major backend updates done, UI updates pending

This commit is contained in:
Belim
2025-05-06 17:09:07 +02:00
parent 32b5351bcb
commit e523013ddd
61 changed files with 392 additions and 154 deletions
+14
View File
@@ -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

+2 -2
View File
@@ -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();
}
+3 -2
View File
@@ -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()),
}
},
+20 -11
View File
@@ -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
+4
View File
@@ -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)
{
+2 -2
View File
@@ -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()
+5 -5
View File
@@ -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)
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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)
);
}
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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)
);
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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()
+3 -3
View File
@@ -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()
+2 -2
View File
@@ -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()
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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)
);
}
+2 -2
View File
@@ -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)
);
}
+4 -4
View File
@@ -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)
);
}
+3 -3
View File
@@ -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);
}
}
+4 -4
View File
@@ -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)
);
}
+2 -2
View File
@@ -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)
);
}
+2 -2
View File
@@ -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)
);
}
+2 -2
View File
@@ -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)
);
}
+2 -2
View File
@@ -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)
);
}
-23
View File
@@ -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");
}
}
}
+27
View File
@@ -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());
}
}
}
+2 -2
View File
@@ -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")]
+79
View File
@@ -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>