major backend updates done, UI updates pending
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 914 B |
@@ -7,8 +7,8 @@ namespace Crapfixer
|
||||
public abstract string ID();
|
||||
public abstract string Info();
|
||||
public abstract string GetFeatureDetails();
|
||||
public abstract bool CheckFeature();
|
||||
public abstract Task<bool> DoFeature(); // async
|
||||
public abstract Task<bool> CheckFeature(); // async
|
||||
public abstract Task<bool> DoFeature(); // async
|
||||
public abstract bool UndoFeature();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace Features
|
||||
Children =
|
||||
{
|
||||
new FeatureNode(new BasicCleanup()),
|
||||
new FeatureNode(new WingetUpgradeAll()) { DefaultChecked = false },
|
||||
}
|
||||
},
|
||||
|
||||
@@ -70,8 +71,8 @@ namespace Features
|
||||
new FeatureNode(new StartLayout()),
|
||||
new FeatureNode(new TaskbarAlignment()),
|
||||
new FeatureNode(new Transparency()),
|
||||
new FeatureNode(new AppDarkMode()),
|
||||
new FeatureNode(new SystemDarkMode()),
|
||||
new FeatureNode(new AppDarkMode()) { DefaultChecked = false },
|
||||
new FeatureNode(new SystemDarkMode()) { DefaultChecked = false },
|
||||
new FeatureNode(new DisableSnapAssistFlyout()),
|
||||
}
|
||||
},
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace Crapfixer
|
||||
TreeNode node = new TreeNode(text)
|
||||
{
|
||||
Tag = featureNode,
|
||||
Checked = true,
|
||||
Checked = featureNode.DefaultChecked,
|
||||
};
|
||||
treeNodes.Add(node);
|
||||
|
||||
@@ -67,12 +67,16 @@ namespace Crapfixer
|
||||
/// <summary>
|
||||
/// Analyzes all checked features recursively and logs only issues.
|
||||
/// </summary>
|
||||
public static void AnalyzeAll(TreeNodeCollection nodes)
|
||||
public static async Task AnalyzeAll(TreeNodeCollection nodes)
|
||||
{
|
||||
ResetAnalysis();
|
||||
|
||||
// Iterate through all nodes and analyze each one recursively
|
||||
foreach (TreeNode node in nodes)
|
||||
AnalyzeCheckedRecursive(node);
|
||||
{
|
||||
// Recursively analyze each node and ensure async tasks are awaited
|
||||
await AnalyzeCheckedRecursive(node);
|
||||
}
|
||||
|
||||
Logger.Log("🔎 ANALYSIS COMPLETE", LogLevel.Info);
|
||||
Logger.Log(new string('=', 50), LogLevel.Info);
|
||||
@@ -82,46 +86,51 @@ namespace Crapfixer
|
||||
issuesFound > 0 ? LogLevel.Warning : LogLevel.Info);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recursively checks all features and logs misconfigurations.
|
||||
/// </summary>
|
||||
private static void AnalyzeCheckedRecursive(TreeNode node)
|
||||
private static async Task AnalyzeCheckedRecursive(TreeNode node)
|
||||
{
|
||||
if (node.Tag is FeatureNode fn)
|
||||
{
|
||||
// If the node is not a category, is checked, and has a feature to check
|
||||
if (!fn.IsCategory && node.Checked && fn.Feature != null)
|
||||
{
|
||||
totalChecked++;
|
||||
bool isOk = fn.Feature.CheckFeature();
|
||||
bool isOk = await fn.Feature.CheckFeature(); // Await the async operation
|
||||
|
||||
if (!isOk)
|
||||
{
|
||||
issuesFound++;
|
||||
node.ForeColor = Color.Red; // misconfigured
|
||||
node.ForeColor = Color.Red; // Mark as misconfigured
|
||||
string category = node.Parent?.Text ?? "General";
|
||||
Logger.Log($"❌ [{category}] {fn.Name} - Not configured as recommended.");
|
||||
Logger.Log($" ➤ {fn.Feature.GetFeatureDetails()}");
|
||||
// log a separator when an issue was found
|
||||
// Log a separator when an issue was found
|
||||
Logger.Log(new string('-', 50), LogLevel.Info);
|
||||
}
|
||||
else
|
||||
{
|
||||
node.ForeColor = Color.Gray; // properly configured
|
||||
node.ForeColor = Color.Gray; // Mark as properly configured
|
||||
}
|
||||
}
|
||||
|
||||
// Recursively process child nodes and ensure awaiting the tasks
|
||||
foreach (TreeNode child in node.Nodes)
|
||||
AnalyzeCheckedRecursive(child);
|
||||
{
|
||||
await AnalyzeCheckedRecursive(child); // Recursively call and await the result
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Analyzes a selected feature and logs its status.
|
||||
/// </summary>
|
||||
public static void AnalyzeFeature(TreeNode node)
|
||||
public static async void AnalyzeFeature(TreeNode node)
|
||||
{
|
||||
if (node.Tag is FeatureNode fn && !fn.IsCategory && node.Checked && fn.Feature != null)
|
||||
{
|
||||
bool isOk = fn.Feature.CheckFeature();
|
||||
bool isOk = await fn.Feature.CheckFeature();
|
||||
node.ForeColor = isOk ? Color.Gray : Color.Red;
|
||||
|
||||
Logger.Log(isOk
|
||||
|
||||
@@ -8,6 +8,10 @@ public class FeatureNode
|
||||
public FeatureBase Feature { get; }
|
||||
public List<FeatureNode> Children { get; set; } = new List<FeatureNode>();
|
||||
|
||||
|
||||
// Property to control default checked state
|
||||
public bool DefaultChecked { get; set; } = true;
|
||||
|
||||
// Constructor for categories
|
||||
public FeatureNode(string name)
|
||||
{
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.AI
|
||||
return "This feature will disable Copilot in Taskbar.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, 1);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, 1));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -27,25 +27,25 @@ namespace Settings.AI
|
||||
return "This will remove Recall from Windows 11 24H2";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
// Check if reg key exists
|
||||
object value = Registry.GetValue(keyName, valueName, null);
|
||||
if (value == null)
|
||||
{
|
||||
// Key does not exist, turn off feature
|
||||
return false;
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
|
||||
// Key exists, check if value is desired value
|
||||
return (int)value != recommendedValue;
|
||||
return Task.FromResult((int)value == recommendedValue);
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
Logger.Log("You've even disabled system-wide Snapshots for all users now.", LogLevel.Info);
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
@@ -61,7 +61,7 @@ namespace Settings.AI
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Ads
|
||||
return "This feature will disable ads in File Explorer.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,10 +20,10 @@ namespace Settings.Ads
|
||||
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return
|
||||
Utils.IntEquals(keyName, valueName, 0);
|
||||
Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -21,9 +21,9 @@ namespace Settings.Ads
|
||||
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (Utils.IntEquals(keyName, valueName, recommendedValue) &&
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue) &&
|
||||
Utils.IntEquals(keyName, valueName2, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Ads
|
||||
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, 0);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -23,9 +23,9 @@ namespace Settings.Ads
|
||||
return $"{keyName} | Value: {valueName} + {valueName2} + {valueName3} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (Utils.IntEquals(keyName, valueName, recommendedValue) &&
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue) &&
|
||||
Utils.IntEquals(keyName, valueName2, recommendedValue) &&
|
||||
Utils.IntEquals(keyName, valueName3, recommendedValue)
|
||||
);
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Ads
|
||||
return "This feature will disable ads in the start menu.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Ads
|
||||
return "Tailored Experiences allows Microsoft to get information from you to deliver personalized tips, ads, and recommendations. Many people would call this telemetry, or even spying.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Ads
|
||||
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Ads
|
||||
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, 0);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "This setting controls whether a user can sign into Microsoft Edge with an account to use services such as sync and single sign on";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Settings.Edge
|
||||
{
|
||||
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||
private const string valueName = "NewTabPageHideDefaultTopSites";
|
||||
private const int recommendedValue = 0;
|
||||
private const int recommendedValue = 1;
|
||||
|
||||
public override string GetFeatureDetails()
|
||||
{
|
||||
@@ -20,16 +20,16 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Hide default top sites from the new tab page in Microsoft Edge";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
@@ -45,7 +45,7 @@ namespace Settings.Edge
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Force Edge to stop asking to change default browser";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Shopping in Microsoft Edge feature will automatically find you the best prices and coupons from across the web as you shop";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Hide home screen and 'Getting Started' on initial launch (from version 80 onwards)";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Microsoft Edge Gamer Mode allows gamers to personalize their browser with gaming themes and gives them the option of enabling Efficiency Mode for PC gaming, the Gaming feed on new tabs, sidebar apps for gamers, and more";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "This feature will disable Copilot in Microsoft Edge.";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, 0);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Allow import of data from other browsers on each Microsoft Edge launch";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Enables Microsoft Edge processes to initialize at operating system startup and restart in the background after the last browser window has been closed";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "By default, when you open a new tab, you see a Bing search bar, Bing image of the day set as the page background. For supported websites, Quick Links on the New Tab page can display recent updates right in the tile";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Settings.Edge
|
||||
|
||||
public override string Info() => "Allow the submission of feedback, suggestions, or customer surveys, as well as reporting issues with the browser";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -31,11 +31,11 @@ namespace Settings.Gaming
|
||||
return "This feature will disable Game DVR.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, 0) &&
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0) &&
|
||||
Utils.IntEquals(keyName, valueName2, 2) &&
|
||||
Utils.IntEquals(keyName2, valueName3, 0);
|
||||
Utils.IntEquals(keyName2, valueName3, 0));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Gaming
|
||||
return "This feature will disable Power Throttling.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Gaming
|
||||
return "This feature will disable visual effects in Windows.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, 0);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Settings.Issues
|
||||
|
||||
public override string Info() => "Deletes all temporary files from the user's Temp folder. Then, the built-in Disk Cleanup utility (cleanmgr) is run.";
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -25,12 +25,12 @@ namespace Settings.Issues
|
||||
bool isOk = totalSize <= 50;
|
||||
|
||||
|
||||
return isOk;
|
||||
return Task.FromResult(isOk);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log($"Error checking Temp folder: {ex.Message}", LogLevel.Error);
|
||||
return false;
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using Crapfixer;
|
||||
|
||||
namespace Settings.System
|
||||
{
|
||||
internal class WingetUpgradeAll : FeatureBase
|
||||
{
|
||||
public override string GetFeatureDetails()
|
||||
{
|
||||
return "Launches Windows Terminal to check and upgrade all installed apps via winget.";
|
||||
}
|
||||
|
||||
public override string ID()
|
||||
{
|
||||
return "Winget App Updates";
|
||||
}
|
||||
|
||||
public override string Info()
|
||||
{
|
||||
return "Automatically searches for available app updates using the Windows package manager 'winget' and installs them in a new Windows Terminal window. It runs 'winget upgrade --include-unknown' to list all available updates, including manually installed apps, and then 'winget upgrade --all --include-unknown' to install them. No manual interaction is required.";
|
||||
}
|
||||
|
||||
public override async Task<bool> CheckFeature()
|
||||
{
|
||||
Logger.Log("📦 Checking all available updates via winget...", LogLevel.Warning);
|
||||
Logger.Log("This may take a while, please be patient.", LogLevel.Warning);
|
||||
|
||||
try
|
||||
{
|
||||
string output = await ExecuteCommand("winget upgrade --include-unknown");
|
||||
|
||||
Logger.Log("Winget upgrade check:\n" + output, LogLevel.Info);
|
||||
|
||||
return output.ToLower().Contains("available");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log("Winget check failed: " + ex.Message, LogLevel.Error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
{
|
||||
return Task.Factory.StartNew(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
LaunchInTerminal("winget upgrade --all --include-unknown");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log("Failed to run winget upgrade: " + ex.Message, LogLevel.Error);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public override bool UndoFeature()
|
||||
{
|
||||
Logger.Log("Winget upgrades cannot be undone.", LogLevel.Warning);
|
||||
return false;
|
||||
}
|
||||
|
||||
private void LaunchInTerminal(string command)
|
||||
{
|
||||
var startInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = "wt.exe",
|
||||
Arguments = "-w 0 nt -p \"Windows PowerShell\" powershell -NoExit -Command \"" + command + "\"",
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
Process.Start(startInfo);
|
||||
}
|
||||
|
||||
private Task<string> ExecuteCommand(string command)
|
||||
{
|
||||
var tcs = new TaskCompletionSource<string>();
|
||||
|
||||
try
|
||||
{
|
||||
var startInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = "cmd.exe",
|
||||
Arguments = "/c " + command,
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true
|
||||
};
|
||||
|
||||
var process = new Process();
|
||||
process.StartInfo = startInfo;
|
||||
|
||||
string output = "";
|
||||
|
||||
process.OutputDataReceived += (sender, args) =>
|
||||
{
|
||||
if (args.Data != null)
|
||||
output += args.Data + Environment.NewLine;
|
||||
};
|
||||
|
||||
process.EnableRaisingEvents = true;
|
||||
process.Exited += (sender, args) =>
|
||||
{
|
||||
tcs.TrySetResult(output);
|
||||
process.Dispose();
|
||||
};
|
||||
|
||||
process.Start();
|
||||
process.BeginOutputReadLine();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
tcs.TrySetException(ex);
|
||||
}
|
||||
|
||||
return tcs.Task;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Privacy
|
||||
return "Disable activity history (prevents Windows from tracking and storing your activity)";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Privacy
|
||||
return "Disable location tracking (prevents Windows from accessing your location)";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -20,11 +20,13 @@ namespace Settings.Privacy
|
||||
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return !Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
bool result = !Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
{
|
||||
try
|
||||
|
||||
@@ -19,11 +19,11 @@ namespace Settings.Privacy
|
||||
return $"{dataCollection} | {diagTrack}";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(dataCollection, "AllowTelemetry", 0) &&
|
||||
Utils.IntEquals(diagTrack, "Start", 2)
|
||||
Utils.IntEquals(diagTrack, "Start", 4)
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
@@ -27,9 +27,9 @@ namespace Settings.System
|
||||
return "This method displays the full classic BSOD with technical error details instead of the simplified sad face version.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName1, recommendedValue) &&
|
||||
Utils.IntEquals(keyName, valueName2, recommendedValue)
|
||||
);
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.System
|
||||
return "Speeds up the appearance of menus and submenus by lowering the default delay. This improves the perceived responsiveness of the UI.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.StringEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.StringEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.System
|
||||
return "Disables the Windows network throttling mechanism to potentially improve performance for streaming, gaming, or real-time applications.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, unchecked((int)0xFFFFFFFF));
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, unchecked((int)0xFFFFFFFF)));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.System
|
||||
return "This feature reduces the WaitToKillServiceTimeout value, which speeds up the shutdown process by reducing the time Windows waits for services to stop.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.StringEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.System
|
||||
return "Enhances system responsiveness by prioritizing CPU resources for foreground tasks, improving performance during active use.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.System
|
||||
return "This method allows you to see what processes are hanging when shutting down and turning on the machine.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Personalization
|
||||
return "This feature enables Dark Mode for apps in Windows 11.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
@@ -85,9 +85,9 @@ namespace Settings.Personalization
|
||||
return "This feature enables Dark Mode for Windows system UI (e.g., taskbar, start menu).";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -24,17 +24,17 @@ namespace Settings.Personalization
|
||||
return "This feature will enable full context menus";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
try
|
||||
{
|
||||
object value = Registry.GetValue(keyName, "", null);
|
||||
return value != null; // Return true if value is not null
|
||||
return Task.FromResult(value != null); // Return true if value is not null
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log("Error occurred while checking: " + ex.Message, LogLevel.Error);
|
||||
return false;
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,13 +26,13 @@ namespace Settings.Personalization
|
||||
return "This feature will disable the personalized lock screen.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return !(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
bool result = !Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
{
|
||||
try
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.UI
|
||||
return "This feature disables Bing search and web suggestions in the Windows Start Menu.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||
}
|
||||
|
||||
public override Task<bool> DoFeature()
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Personalization
|
||||
return "This feature will hide search box on taskbar";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Settings.Personalization
|
||||
{
|
||||
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer";
|
||||
private const string valueName = "ShowOrHideMostUsedApps";
|
||||
private const int recommendedValue = 0;
|
||||
private const int recommendedValue = 2;
|
||||
|
||||
public override string GetFeatureDetails()
|
||||
{
|
||||
@@ -23,12 +23,12 @@ namespace Settings.Personalization
|
||||
|
||||
public override string Info()
|
||||
{
|
||||
return "This feature will hide Most used apps in start menu";
|
||||
return "This feature will hide Most used apps in start menu for all users";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
@@ -37,7 +37,7 @@ namespace Settings.Personalization
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -52,7 +52,7 @@ namespace Settings.Personalization
|
||||
{
|
||||
try
|
||||
{
|
||||
Registry.SetValue(keyName, valueName, 2, RegistryValueKind.DWord);
|
||||
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Personalization
|
||||
return "This feature will hide the Task view button on taskbar";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Personalization
|
||||
return "This feature disables the Snap Assist flyout, which appears when you snap a window.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace Settings.Personalization
|
||||
return "This feature will allow pinning more Apps on start menu";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -27,9 +27,9 @@ namespace Settings.Personalization
|
||||
return "This feature will align the Start button to left";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -27,9 +27,9 @@ namespace Settings.Personalization
|
||||
return "This feature disables transparency effects for Start menu, taskbar, and other surfaces.";
|
||||
}
|
||||
|
||||
public override bool CheckFeature()
|
||||
public override Task<bool> CheckFeature()
|
||||
{
|
||||
return (
|
||||
return Task.FromResult(
|
||||
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace HelperTool
|
||||
{
|
||||
internal class Utils
|
||||
|
||||
{
|
||||
public static class Data
|
||||
{
|
||||
public static string DataRootDir = Application.StartupPath +
|
||||
@"\app\";
|
||||
}
|
||||
|
||||
// Create data directory if non present
|
||||
public static void CreateDataDir()
|
||||
{
|
||||
bool dirExists = Directory.Exists(@"app");
|
||||
if (!dirExists)
|
||||
Directory.CreateDirectory(@"app");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Crapfixer
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// Get app version
|
||||
/// </summary>
|
||||
internal static string GetCurrentVersionTostring() => new Version(Application.ProductVersion).ToString(3);
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||
// indem Sie "*" wie unten gezeigt eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.31.101")]
|
||||
[assembly: AssemblyFileVersion("0.31.101")]
|
||||
[assembly: AssemblyVersion("0.40.124")]
|
||||
[assembly: AssemblyFileVersion("0.40.124")]
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<!-- UAC-Manifestoptionen
|
||||
Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern möchten, ersetzen Sie den
|
||||
Knoten "requestedExecutionLevel" wie folgt.
|
||||
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
||||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
||||
|
||||
Durch Angabe des Elements "requestedExecutionLevel" wird die Datei- und Registrierungsvirtualisierung deaktiviert.
|
||||
Entfernen Sie dieses Element, wenn diese Virtualisierung aus Gründen der Abwärtskompatibilität
|
||||
für die Anwendung erforderlich ist.
|
||||
-->
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- Eine Liste der Windows-Versionen, unter denen diese Anwendung getestet
|
||||
und für die sie entwickelt wurde. Wenn Sie die Auskommentierung der entsprechenden Elemente aufheben,
|
||||
wird von Windows automatisch die kompatibelste Umgebung ausgewählt. -->
|
||||
|
||||
<!-- Windows Vista -->
|
||||
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
|
||||
|
||||
<!-- Windows 7 -->
|
||||
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
|
||||
|
||||
<!-- Windows 8 -->
|
||||
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
|
||||
|
||||
<!-- Windows 8.1 -->
|
||||
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
|
||||
|
||||
<!-- Windows 10 -->
|
||||
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
|
||||
|
||||
</application>
|
||||
</compatibility>
|
||||
|
||||
<!-- Gibt an, dass die Anwendung mit DPI-Werten kompatibel ist und von Windows nicht automatisch auf höhere
|
||||
DPI-Werte skaliert wird. WPF-Anwendungen (Windows Presentation Foundation) sind automatisch mit DPI-Werten kompatibel, eine Aktivierung
|
||||
ist nicht erforderlich. Für Windows Forms-Anwendungen für .NET Framework 4.6, die diese Einstellung aktivieren, muss
|
||||
auch die Einstellung "'EnableWindowsFormsHighDpiAutoResizing" in der Datei "app.config" auf TRUE festgelegt werden.
|
||||
|
||||
Hierdurch können für die Anwendung lange Pfade verwendet werden. Weitere Informationen finden Sie unter https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation.-->
|
||||
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
||||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
|
||||
|
||||
<!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
|
||||
<!--
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="Microsoft.Windows.Common-Controls"
|
||||
version="6.0.0.0"
|
||||
processorArchitecture="*"
|
||||
publicKeyToken="6595b64144ccf1df"
|
||||
language="*"
|
||||
/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
-->
|
||||
|
||||
</assembly>
|
||||
Reference in New Issue
Block a user