More to add (just finished)

This commit is contained in:
Belim 2023-02-20 16:34:31 +01:00
parent e99ec1c7d9
commit 26d90bd271
14 changed files with 1563 additions and 0 deletions

49
src/BloatyNosy.sln Normal file
View File

@ -0,0 +1,49 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.1.32210.238
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BloatyNosy", "BloatyNosy\BloatyNosy.csproj", "{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|ARM.ActiveCfg = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|ARM.Build.0 = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|ARM64.Build.0 = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|x64.ActiveCfg = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|x64.Build.0 = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|x86.ActiveCfg = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Debug|x86.Build.0 = Debug|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|Any CPU.Build.0 = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|ARM.ActiveCfg = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|ARM.Build.0 = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|ARM64.ActiveCfg = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|ARM64.Build.0 = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|x64.ActiveCfg = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|x64.Build.0 = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|x86.ActiveCfg = Release|Any CPU
{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8E4625AD-7C1B-4CFB-8374-5F44D4508DBA}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>

BIN
src/BloatyNosy/AppIcon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
src/BloatyNosy/AppLogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@ -0,0 +1,239 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{44CAFCEB-0F6D-487F-9F5F-63F230DBB069}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>BloatyNosy</RootNamespace>
<AssemblyName>BloatyNosy</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup />
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>AppIcon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FeatureBase.cs" />
<Compile Include="FeatureNode.cs" />
<Compile Include="Features\Browser\GoogleChrome.cs" />
<Compile Include="Features\Browser\MozillaFirefox.cs" />
<Compile Include="Features\Desktop\AppsTheme.cs" />
<Compile Include="Features\Desktop\SnapAssistFlyout.cs" />
<Compile Include="Features\Desktop\Stickers.cs" />
<Compile Include="Features\Desktop\Transparency.cs" />
<Compile Include="Features\Desktop\Widgets.cs" />
<Compile Include="Features\Desktop\WidgetsR.cs" />
<Compile Include="Features\Desktop\WindowsTheme.cs" />
<Compile Include="Features\Explorer\FileExplorer.cs" />
<Compile Include="Features\Explorer\HiddenFileExt.cs" />
<Compile Include="Features\Explorer\HiddenFileFolder.cs" />
<Compile Include="Features\Recommendation\EnableWSL.cs" />
<Compile Include="Features\Gaming\GameDVR.cs" />
<Compile Include="Features\Gaming\PowerThrottling.cs" />
<Compile Include="Features\Gaming\VisualFX.cs" />
<Compile Include="Features\Privacy\Advertising.cs" />
<Compile Include="Features\Privacy\AppsAutoInstall.cs" />
<Compile Include="Features\Privacy\Biometrics.cs" />
<Compile Include="Features\Privacy\CompatibilityTelemetry.cs" />
<Compile Include="Features\Privacy\DiagnosticData.cs" />
<Compile Include="Features\Privacy\Feedback.cs" />
<Compile Include="Features\Privacy\LocationTracking.cs" />
<Compile Include="Features\Privacy\SuggestedContent.cs" />
<Compile Include="Features\Privacy\TailoredExperiences.cs" />
<Compile Include="Features\Privacy\Telemetry.cs" />
<Compile Include="Features\Privacy\WindowsTips.cs" />
<Compile Include="Features\Apps\StoreApps.cs" />
<Compile Include="Features\Apps\StoreAppsEngine.cs" />
<Compile Include="Features\System\FaxPrinter.cs" />
<Compile Include="Features\System\FullContextMenus.cs" />
<Compile Include="Features\System\OneDriveR.cs" />
<Compile Include="Features\System\RemoveW11Watermark.cs" />
<Compile Include="Features\System\TeamsAutostart.cs" />
<Compile Include="Features\System\TPMCheck.cs" />
<Compile Include="Features\System\XPSWriter.cs" />
<Compile Include="Features\Taskbar\MostUsedApps.cs" />
<Compile Include="Features\Taskbar\StartmenuLayout.cs" />
<Compile Include="Features\Taskbar\TaskbarChat.cs" />
<Compile Include="Features\Taskbar\TaskbarSearch.cs" />
<Compile Include="Features\Taskbar\TaskView.cs" />
<Compile Include="Helpers\ErrorHelper.cs" />
<Compile Include="Helpers\HelperTool.cs" />
<Compile Include="Helpers\OsHelper.cs" />
<Compile Include="ITreeNode.cs" />
<Compile Include="Helpers\RegistryHelper.cs" />
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Modules\Setup\Pages.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Views\AboutPageView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Views\AboutPageView.Designer.cs">
<DependentUpon>AboutPageView.cs</DependentUpon>
</Compile>
<Compile Include="Views\AppsPageView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Views\AppsPageView.Designer.cs">
<DependentUpon>AppsPageView.cs</DependentUpon>
</Compile>
<Compile Include="Modules\WinModder\ModsParser.cs" />
<Compile Include="Modules\WinModder\ModsManifest.cs" />
<Compile Include="Views\ModsPageView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Views\ModsPageView.Designer.cs">
<DependentUpon>ModsPageView.cs</DependentUpon>
</Compile>
<Compile Include="Views\PackagesPageView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Views\PackagesPageView.Designer.cs">
<DependentUpon>PackagesPageView.cs</DependentUpon>
</Compile>
<Compile Include="Helpers\WindowsHelper.cs" />
<Compile Include="Views\IModsPageView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Views\IModsPageView.Designer.cs">
<DependentUpon>IModsPageView.cs</DependentUpon>
</Compile>
<Compile Include="Views\SetupPageView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Views\SetupPageView.Designer.cs">
<DependentUpon>SetupPageView.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="Views\AboutPageView.resx">
<DependentUpon>AboutPageView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\AppsPageView.resx">
<DependentUpon>AppsPageView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\ModsPageView.resx">
<DependentUpon>ModsPageView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\PackagesPageView.resx">
<DependentUpon>PackagesPageView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\IModsPageView.resx">
<DependentUpon>IModsPageView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Views\SetupPageView.resx">
<DependentUpon>SetupPageView.cs</DependentUpon>
</EmbeddedResource>
<None Include="app.manifest" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="AppIcon.ico" />
<Content Include="Resources\systemApps.txt" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.8 %28x86 und x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory />
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>de-DE</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,35 @@
namespace Features.Feature
{
public abstract class FeatureBase
{
/// <summary>
/// Name of Feature
/// </summary>
/// <returns>The feature name</returns>
public abstract string ID();
/// <summary>
/// Tooltip text of sssessments
/// </summary>
/// <returns>The feature tooltip</returns>
public abstract string Info();
/// <summary>
/// Checks whether Features should be applied
/// </summary>
/// <returns>Returns true if the feature should be applied, false otherwise.</returns>
public abstract bool CheckFeature();
/// <summary>
/// Do the Feature
/// </summary>
/// <returns>Returns true if the feature was successfull, false otherwise.</returns>
public abstract bool DoFeature();
/// <summary>
/// Undo the Feature
/// </summary>
/// <returns>Returns true if the feature was successfull, false otherwise.</returns>
public abstract bool UndoFeature();
}
}

View File

@ -0,0 +1,17 @@
using System.Windows.Forms;
namespace Features.Feature
{
internal class FeatureNode : TreeNode
{
public FeatureBase Feature { get; }
public FeatureNode(FeatureBase feature)
{
Feature = feature;
Text = Feature.ID();
ToolTipText = Feature.Info();
Checked = true;
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BloatyNosy.ITreeNode
{
public static class ITreeNode
{
public static IEnumerable<TreeNode> All(this TreeNodeCollection nodes)
{
if (nodes == null) throw new ArgumentNullException(nameof(nodes));
foreach (TreeNode n in nodes)
{
yield return n;
foreach (TreeNode child in n.Nodes.All())
{
yield return child;
}
}
}
}
}

437
src/BloatyNosy/MainForm.Designer.cs generated Normal file
View File

@ -0,0 +1,437 @@
namespace BloatyNosy
{
partial class MainForm
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.pnlForm = new System.Windows.Forms.Panel();
this.pnlMain = new System.Windows.Forms.Panel();
this.lnkRunSetup = new System.Windows.Forms.LinkLabel();
this.btnAppOptions = new System.Windows.Forms.Button();
this.btnSettings = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.btnKebapMenu = new System.Windows.Forms.Button();
this.btnAnalyze = new System.Windows.Forms.Button();
this.lnkSubHeader = new System.Windows.Forms.LinkLabel();
this.progress = new System.Windows.Forms.ProgressBar();
this.lblTools = new System.Windows.Forms.Label();
this.cmbTools = new System.Windows.Forms.ComboBox();
this.lblHeader = new System.Windows.Forms.Label();
this.rtbLog = new System.Windows.Forms.RichTextBox();
this.tvwFeatures = new System.Windows.Forms.TreeView();
this.contextKebapMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.menuAdvanced = new System.Windows.Forms.ToolStripMenuItem();
this.menuIgnoreLowLevelP = new System.Windows.Forms.ToolStripMenuItem();
this.menuImportProfile = new System.Windows.Forms.ToolStripMenuItem();
this.menuExportProfile = new System.Windows.Forms.ToolStripMenuItem();
this.contextAppMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.menuFix = new System.Windows.Forms.ToolStripMenuItem();
this.menuFixInfo = new System.Windows.Forms.ToolStripTextBox();
this.menuRestore = new System.Windows.Forms.ToolStripMenuItem();
this.menuRestoreInfo = new System.Windows.Forms.ToolStripTextBox();
this.pnlForm.SuspendLayout();
this.pnlMain.SuspendLayout();
this.contextKebapMenu.SuspendLayout();
this.contextAppMenu.SuspendLayout();
this.SuspendLayout();
//
// pnlForm
//
this.pnlForm.AutoScroll = true;
this.pnlForm.Controls.Add(this.pnlMain);
this.pnlForm.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlForm.Location = new System.Drawing.Point(0, 0);
this.pnlForm.Name = "pnlForm";
this.pnlForm.Size = new System.Drawing.Size(1019, 801);
this.pnlForm.TabIndex = 0;
//
// pnlMain
//
this.pnlMain.AutoScroll = true;
this.pnlMain.Controls.Add(this.lnkRunSetup);
this.pnlMain.Controls.Add(this.btnAppOptions);
this.pnlMain.Controls.Add(this.btnSettings);
this.pnlMain.Controls.Add(this.label1);
this.pnlMain.Controls.Add(this.btnKebapMenu);
this.pnlMain.Controls.Add(this.btnAnalyze);
this.pnlMain.Controls.Add(this.lnkSubHeader);
this.pnlMain.Controls.Add(this.progress);
this.pnlMain.Controls.Add(this.lblTools);
this.pnlMain.Controls.Add(this.cmbTools);
this.pnlMain.Controls.Add(this.lblHeader);
this.pnlMain.Controls.Add(this.rtbLog);
this.pnlMain.Controls.Add(this.tvwFeatures);
this.pnlMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlMain.Location = new System.Drawing.Point(0, 0);
this.pnlMain.Name = "pnlMain";
this.pnlMain.Size = new System.Drawing.Size(1019, 801);
this.pnlMain.TabIndex = 0;
//
// lnkRunSetup
//
this.lnkRunSetup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lnkRunSetup.AutoSize = true;
this.lnkRunSetup.Font = new System.Drawing.Font("Segoe UI Variable Text", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lnkRunSetup.Location = new System.Drawing.Point(704, 764);
this.lnkRunSetup.Name = "lnkRunSetup";
this.lnkRunSetup.Size = new System.Drawing.Size(229, 15);
this.lnkRunSetup.TabIndex = 179;
this.lnkRunSetup.TabStop = true;
this.lnkRunSetup.Text = "I want to set up Windows 11 for the first time...";
this.lnkRunSetup.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkRunSetup_LinkClicked);
//
// btnAppOptions
//
this.btnAppOptions.AutoEllipsis = true;
this.btnAppOptions.BackColor = System.Drawing.Color.MediumVioletRed;
this.btnAppOptions.FlatAppearance.BorderSize = 0;
this.btnAppOptions.Font = new System.Drawing.Font("Segoe Fluent Icons", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnAppOptions.ForeColor = System.Drawing.Color.White;
this.btnAppOptions.Location = new System.Drawing.Point(350, 213);
this.btnAppOptions.Name = "btnAppOptions";
this.btnAppOptions.Size = new System.Drawing.Size(54, 42);
this.btnAppOptions.TabIndex = 178;
this.btnAppOptions.Text = "...";
this.btnAppOptions.UseVisualStyleBackColor = false;
this.btnAppOptions.Click += new System.EventHandler(this.btnAppOptions_Click);
//
// btnSettings
//
this.btnSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnSettings.FlatAppearance.BorderSize = 0;
this.btnSettings.FlatAppearance.MouseOverBackColor = System.Drawing.Color.WhiteSmoke;
this.btnSettings.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnSettings.Font = new System.Drawing.Font("Segoe Fluent Icons", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnSettings.ForeColor = System.Drawing.Color.MediumVioletRed;
this.btnSettings.Location = new System.Drawing.Point(965, 751);
this.btnSettings.Name = "btnSettings";
this.btnSettings.Size = new System.Drawing.Size(42, 38);
this.btnSettings.TabIndex = 177;
this.btnSettings.Text = "...";
this.btnSettings.UseVisualStyleBackColor = true;
this.btnSettings.Click += new System.EventHandler(this.btnSettings_Click);
//
// label1
//
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label1.AutoEllipsis = true;
this.label1.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(47, 49);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(532, 43);
this.label1.TabIndex = 176;
this.label1.Text = "Welcome to the new era of Windows debloating";
//
// btnKebapMenu
//
this.btnKebapMenu.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnKebapMenu.FlatAppearance.BorderSize = 0;
this.btnKebapMenu.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnKebapMenu.Font = new System.Drawing.Font("Segoe Fluent Icons", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnKebapMenu.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btnKebapMenu.Location = new System.Drawing.Point(977, 0);
this.btnKebapMenu.Name = "btnKebapMenu";
this.btnKebapMenu.Size = new System.Drawing.Size(42, 38);
this.btnKebapMenu.TabIndex = 175;
this.btnKebapMenu.Text = "...";
this.btnKebapMenu.UseVisualStyleBackColor = true;
this.btnKebapMenu.Click += new System.EventHandler(this.btnMenu_Click);
//
// btnAnalyze
//
this.btnAnalyze.AutoEllipsis = true;
this.btnAnalyze.BackColor = System.Drawing.Color.MediumVioletRed;
this.btnAnalyze.FlatAppearance.BorderSize = 0;
this.btnAnalyze.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnAnalyze.ForeColor = System.Drawing.Color.White;
this.btnAnalyze.Location = new System.Drawing.Point(71, 213);
this.btnAnalyze.Name = "btnAnalyze";
this.btnAnalyze.Size = new System.Drawing.Size(286, 42);
this.btnAnalyze.TabIndex = 27;
this.btnAnalyze.Text = "Analyze";
this.btnAnalyze.UseVisualStyleBackColor = false;
this.btnAnalyze.Click += new System.EventHandler(this.btnAnalyze_Click);
//
// lnkSubHeader
//
this.lnkSubHeader.ActiveLinkColor = System.Drawing.Color.MediumVioletRed;
this.lnkSubHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lnkSubHeader.AutoEllipsis = true;
this.lnkSubHeader.Font = new System.Drawing.Font("Segoe UI Variable Text Semibold", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lnkSubHeader.ForeColor = System.Drawing.Color.Black;
this.lnkSubHeader.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.lnkSubHeader.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
this.lnkSubHeader.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lnkSubHeader.Location = new System.Drawing.Point(71, 679);
this.lnkSubHeader.Name = "lnkSubHeader";
this.lnkSubHeader.Size = new System.Drawing.Size(795, 18);
this.lnkSubHeader.TabIndex = 171;
this.lnkSubHeader.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkSubHeader_LinkClicked);
//
// progress
//
this.progress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progress.Location = new System.Drawing.Point(72, 285);
this.progress.Name = "progress";
this.progress.Size = new System.Drawing.Size(856, 5);
this.progress.TabIndex = 166;
this.progress.Visible = false;
//
// lblTools
//
this.lblTools.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.lblTools.AutoSize = true;
this.lblTools.Font = new System.Drawing.Font("Segoe UI Variable Text", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTools.ForeColor = System.Drawing.Color.DeepPink;
this.lblTools.Location = new System.Drawing.Point(32, 749);
this.lblTools.Name = "lblTools";
this.lblTools.Size = new System.Drawing.Size(38, 30);
this.lblTools.TabIndex = 25;
this.lblTools.Text = "More\r\nApps!";
//
// cmbTools
//
this.cmbTools.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.cmbTools.BackColor = System.Drawing.Color.WhiteSmoke;
this.cmbTools.DropDownHeight = 200;
this.cmbTools.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbTools.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cmbTools.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.cmbTools.FormattingEnabled = true;
this.cmbTools.IntegralHeight = false;
this.cmbTools.ItemHeight = 21;
this.cmbTools.Location = new System.Drawing.Point(75, 750);
this.cmbTools.Name = "cmbTools";
this.cmbTools.Size = new System.Drawing.Size(338, 29);
this.cmbTools.TabIndex = 19;
this.cmbTools.SelectedIndexChanged += new System.EventHandler(this.cmbTools_SelectedIndexChanged);
//
// lblHeader
//
this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblHeader.AutoEllipsis = true;
this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lblHeader.Location = new System.Drawing.Point(69, 112);
this.lblHeader.Name = "lblHeader";
this.lblHeader.Size = new System.Drawing.Size(843, 59);
this.lblHeader.TabIndex = 16;
this.lblHeader.Text = "Windows 11 is too bloaty && nosey and has some annoying features that just need t" +
"o go.\r\nThis app will scan your system and inform you which features it likes or " +
"dislikes in your configuration.";
//
// rtbLog
//
this.rtbLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.rtbLog.BackColor = System.Drawing.Color.White;
this.rtbLog.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.rtbLog.Cursor = System.Windows.Forms.Cursors.IBeam;
this.rtbLog.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtbLog.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.rtbLog.HideSelection = false;
this.rtbLog.Location = new System.Drawing.Point(72, 305);
this.rtbLog.Name = "rtbLog";
this.rtbLog.ReadOnly = true;
this.rtbLog.Size = new System.Drawing.Size(861, 360);
this.rtbLog.TabIndex = 138;
this.rtbLog.Text = "";
this.rtbLog.Visible = false;
this.rtbLog.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richLog_LinkClicked);
//
// tvwFeatures
//
this.tvwFeatures.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tvwFeatures.BackColor = System.Drawing.Color.White;
this.tvwFeatures.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.tvwFeatures.CheckBoxes = true;
this.tvwFeatures.Font = new System.Drawing.Font("Segoe UI Variable Text", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tvwFeatures.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.tvwFeatures.FullRowSelect = true;
this.tvwFeatures.ItemHeight = 30;
this.tvwFeatures.LineColor = System.Drawing.Color.HotPink;
this.tvwFeatures.Location = new System.Drawing.Point(72, 305);
this.tvwFeatures.Name = "tvwFeatures";
this.tvwFeatures.ShowLines = false;
this.tvwFeatures.ShowNodeToolTips = true;
this.tvwFeatures.ShowRootLines = false;
this.tvwFeatures.Size = new System.Drawing.Size(858, 360);
this.tvwFeatures.TabIndex = 168;
this.tvwFeatures.Visible = false;
this.tvwFeatures.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeFeatures_AfterCheck);
//
// contextKebapMenu
//
this.contextKebapMenu.BackColor = System.Drawing.SystemColors.Control;
this.contextKebapMenu.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.contextKebapMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuAdvanced,
this.menuIgnoreLowLevelP,
this.menuImportProfile,
this.menuExportProfile});
this.contextKebapMenu.Name = "menuMain";
this.contextKebapMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
this.contextKebapMenu.Size = new System.Drawing.Size(259, 108);
//
// menuAdvanced
//
this.menuAdvanced.Name = "menuAdvanced";
this.menuAdvanced.Size = new System.Drawing.Size(258, 26);
this.menuAdvanced.Text = "Advanced mode";
this.menuAdvanced.Click += new System.EventHandler(this.menuAdvanced_Click);
//
// menuIgnoreLowLevelP
//
this.menuIgnoreLowLevelP.Name = "menuIgnoreLowLevelP";
this.menuIgnoreLowLevelP.Size = new System.Drawing.Size(258, 26);
this.menuIgnoreLowLevelP.Text = "Ignore Low level problems";
this.menuIgnoreLowLevelP.TextDirection = System.Windows.Forms.ToolStripTextDirection.Horizontal;
this.menuIgnoreLowLevelP.Click += new System.EventHandler(this.menuIgnoreLowLevelP_Click);
//
// menuImportProfile
//
this.menuImportProfile.Name = "menuImportProfile";
this.menuImportProfile.Size = new System.Drawing.Size(258, 26);
this.menuImportProfile.Text = "Import profile";
this.menuImportProfile.Click += new System.EventHandler(this.menuImportProfile_Click);
//
// menuExportProfile
//
this.menuExportProfile.Name = "menuExportProfile";
this.menuExportProfile.Size = new System.Drawing.Size(258, 26);
this.menuExportProfile.Text = "Export profile";
this.menuExportProfile.Click += new System.EventHandler(this.menuExportProfile_Click);
//
// contextAppMenu
//
this.contextAppMenu.BackColor = System.Drawing.SystemColors.Control;
this.contextAppMenu.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.contextAppMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuFix,
this.menuFixInfo,
this.menuRestore,
this.menuRestoreInfo});
this.contextAppMenu.Name = "menuMain";
this.contextAppMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
this.contextAppMenu.Size = new System.Drawing.Size(361, 104);
//
// menuFix
//
this.menuFix.Name = "menuFix";
this.menuFix.Size = new System.Drawing.Size(360, 32);
this.menuFix.Text = "Fix problems";
this.menuFix.Click += new System.EventHandler(this.menuFix_Click);
//
// menuFixInfo
//
this.menuFixInfo.BackColor = System.Drawing.SystemColors.Control;
this.menuFixInfo.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.menuFixInfo.Enabled = false;
this.menuFixInfo.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.menuFixInfo.Margin = new System.Windows.Forms.Padding(5, 1, 1, 1);
this.menuFixInfo.Name = "menuFixInfo";
this.menuFixInfo.Size = new System.Drawing.Size(300, 16);
this.menuFixInfo.Text = "This will fix all found and selected problems";
//
// menuRestore
//
this.menuRestore.Name = "menuRestore";
this.menuRestore.Size = new System.Drawing.Size(360, 32);
this.menuRestore.Text = "Restore settings";
this.menuRestore.TextDirection = System.Windows.Forms.ToolStripTextDirection.Horizontal;
this.menuRestore.Click += new System.EventHandler(this.menuRestore_Click);
//
// menuRestoreInfo
//
this.menuRestoreInfo.BackColor = System.Drawing.SystemColors.Control;
this.menuRestoreInfo.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.menuRestoreInfo.Enabled = false;
this.menuRestoreInfo.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.menuRestoreInfo.Margin = new System.Windows.Forms.Padding(5, 1, 1, 1);
this.menuRestoreInfo.Name = "menuRestoreInfo";
this.menuRestoreInfo.Size = new System.Drawing.Size(300, 16);
this.menuRestoreInfo.Text = "This will restore the default settings ";
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1019, 801);
this.Controls.Add(this.pnlForm);
this.Name = "MainForm";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "BloatyNosy";
this.Shown += new System.EventHandler(this.MainForm_Shown);
this.pnlForm.ResumeLayout(false);
this.pnlMain.ResumeLayout(false);
this.pnlMain.PerformLayout();
this.contextKebapMenu.ResumeLayout(false);
this.contextAppMenu.ResumeLayout(false);
this.contextAppMenu.PerformLayout();
this.ResumeLayout(false);
}
#endregion
public System.Windows.Forms.Panel pnlForm;
private System.Windows.Forms.Panel pnlMain;
private System.Windows.Forms.Label lblTools;
private System.Windows.Forms.ComboBox cmbTools;
private System.Windows.Forms.Label lblHeader;
private System.Windows.Forms.Button btnAnalyze;
private System.Windows.Forms.RichTextBox rtbLog;
private System.Windows.Forms.ProgressBar progress;
private System.Windows.Forms.LinkLabel lnkSubHeader;
private System.Windows.Forms.TreeView tvwFeatures;
private System.Windows.Forms.Button btnKebapMenu;
private System.Windows.Forms.ContextMenuStrip contextKebapMenu;
private System.Windows.Forms.ToolStripMenuItem menuAdvanced;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button btnSettings;
private System.Windows.Forms.ToolStripMenuItem menuIgnoreLowLevelP;
private System.Windows.Forms.Button btnAppOptions;
private System.Windows.Forms.ContextMenuStrip contextAppMenu;
private System.Windows.Forms.ToolStripMenuItem menuFix;
private System.Windows.Forms.ToolStripTextBox menuFixInfo;
private System.Windows.Forms.ToolStripMenuItem menuRestore;
private System.Windows.Forms.ToolStripTextBox menuRestoreInfo;
private System.Windows.Forms.ToolStripMenuItem menuImportProfile;
private System.Windows.Forms.LinkLabel lnkRunSetup;
private System.Windows.Forms.ToolStripMenuItem menuExportProfile;
}
}

514
src/BloatyNosy/MainForm.cs Normal file
View File

@ -0,0 +1,514 @@
using BloatyNosy.ITreeNode;
using Features.Feature;
using HelperTool;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BloatyNosy
{
public partial class MainForm : Form
{
public Control INavPage;
private int progression = 0;
private int progressionIncrease = 0;
private static readonly ErrorHelper logger = ErrorHelper.Instance;
public MainForm()
=> InitializeComponent();
private void MainForm_Shown(object sender, EventArgs e)
{
this.AddDefaultFeatures();
this.AddMoreApps();
this.SetStyle();
}
private void SetStyle()
{
btnAppOptions.Text = "\uE70D";
btnKebapMenu.Text = "\u22ee";
btnSettings.Text = "\uE713";
btnAnalyze.Text += "\x20" + OsHelper.thisOS;
BackColor =
tvwFeatures.BackColor =
rtbLog.BackColor =
Color.FromArgb(244, 241, 249);
logger.SetTarget(rtbLog); // Log messages to target richLog
INavPage = pnlForm.Controls[0]; // Set default NavPage
}
public void SetView(Control View)
{
var control = View as Control;
control.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom);
control.Dock = DockStyle.Fill;
INavPage.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom);
INavPage.Dock = DockStyle.Fill;
pnlForm.Controls.Clear();
pnlForm.Controls.Add(View);
}
private void AddMoreApps()
{
cmbTools.Items.Add("InstaPackage");
cmbTools.Items.Add("BloatFinder");
cmbTools.Items.Add("WinModder");
cmbTools.Items.Insert(0, "Select...");
cmbTools.SelectedIndex = 0;
}
/// <summary>
/// Register some more Tools
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmbTools_SelectedIndexChanged(object sender, EventArgs e)
{
string message = Convert.ToString(cmbTools.SelectedItem);
string[] keys = new string[] { "Insta", "Bloat", "Mod" };
string sKeyResult = keys.FirstOrDefault<string>(s => message.Contains(s));
switch (sKeyResult)
{
case "Insta":
this.SetView(new PackagesPageView()); // Packages > InstaPackages view
break;
case "Bloat":
this.SetView(new AppsPageView()); // In-box apps > BloatFinder view
break;
case "Mod":
this.SetView(new ModsPageView()); // Mods > WinModder view
break;
default:
break;
}
}
private void lnkRunSetup_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
=> this.SetView(new SetupPageView(this)); // Mods > Setup view
private void btnSettings_Click(object sender, EventArgs e)
=> this.SetView(new AboutPageView()); // Settings view
public void AddDefaultFeatures()
{
tvwFeatures.Nodes.Clear();
tvwFeatures.BeginUpdate();
// Root node
TreeNode root = new TreeNode("Problems to be checked ")
{
Checked = true,
};
TreeNode browser = new TreeNode("Browser", new TreeNode[] {
new FeatureNode(new Features.Feature.Browser.ChromeTelemetry()),
new FeatureNode(new Features.Feature.Browser.FirefoxTelemetry()),
})
{
Checked = true,
};
TreeNode explorer = new TreeNode("Explorer", new TreeNode[] {
new FeatureNode(new Features.Feature.Explorer.FileExplorer()),
new FeatureNode(new Features.Feature.Explorer.HiddenFileFolder()),
new FeatureNode(new Features.Feature.Explorer.HiddenFileExt()),
})
{
Checked = true,
};
TreeNode desktop = new TreeNode("Desktop", new System.Windows.Forms.TreeNode[] {
new FeatureNode(new Features.Feature.Desktop.AppsTheme()),
new FeatureNode(new Features.Feature.Desktop.WindowsTheme()),
new FeatureNode(new Features.Feature.Desktop.Transparency()),
new FeatureNode(new Features.Feature.Desktop.SnapAssistFlyout()),
new FeatureNode(new Features.Feature.Desktop.Widgets()),
new FeatureNode(new Features.Feature.Desktop.WidgetsRemove()),
new FeatureNode(new Features.Feature.Desktop.Stickers()),
})
{
Checked = true,
};
TreeNode taskbar = new TreeNode("Taskbar and Start menu", new System.Windows.Forms.TreeNode[] {
new FeatureNode(new Features.Feature.Taskbar.TaskbarSearch()),
new FeatureNode(new Features.Feature.Taskbar.TaskbarChat()),
new FeatureNode(new Features.Feature.Taskbar.TaskView()),
new FeatureNode(new Features.Feature.Taskbar.MostUsedApps()),
new FeatureNode(new Features.Feature.Taskbar.StartmenuLayout()),
})
{
Checked = true,
};
TreeNode system = new TreeNode("System", new System.Windows.Forms.TreeNode[] {
new FeatureNode(new Features.Feature.System.FullContextMenus()),
new FeatureNode(new Features.Feature.System.RemoveW11Watermark()),
new FeatureNode(new Features.Feature.System.TeamsAutostart()),
new FeatureNode(new Features.Feature.System.Fax()),
new FeatureNode(new Features.Feature.System.XPSWriter()),
new FeatureNode(new Features.Feature.System.TPMCheck()),
new FeatureNode(new Features.Feature.System.OneDriveRemove()),
})
{
Checked = true,
};
TreeNode gaming = new TreeNode("Gaming", new TreeNode[] {
new FeatureNode(new Features.Feature.Gaming.GameDVR()),
new FeatureNode(new Features.Feature.Gaming.PowerThrottling()),
new FeatureNode(new Features.Feature.Gaming.VisualFX()),
})
{
Checked = true,
};
TreeNode privacy = new TreeNode("Privacy", new TreeNode[] {
new FeatureNode(new Features.Feature.Privacy.DiagnosticData()),
new FeatureNode(new Features.Feature.Privacy.Telemetry()),
new FeatureNode(new Features.Feature.Privacy.CompatibilityTelemetry()),
new FeatureNode(new Features.Feature.Privacy.LocationTracking()),
new FeatureNode(new Features.Feature.Privacy.Advertising()),
new FeatureNode(new Features.Feature.Privacy.Feedback()),
new FeatureNode(new Features.Feature.Privacy.SuggestedContent()),
new FeatureNode(new Features.Feature.Privacy.Biometrics()),
new FeatureNode(new Features.Feature.Privacy.AppsAutoInstall()),
new FeatureNode(new Features.Feature.Privacy.WindowsTips()),
new FeatureNode(new Features.Feature.Privacy.TailoredExperiences()),
})
{
Checked = true
};
TreeNode components = new TreeNode("Feature Recommendation", new TreeNode[] {
new FeatureNode(new Features.Feature.Recommendation.EnableWSL()),
})
{
Checked = true,
};
TreeNode apps = new TreeNode("Bloatware (from Microsoft, ASUS, Adobe, HP, Meta etc.)", new TreeNode[] {
new FeatureNode(new Features.Feature.Apps.StoreApps()),
})
{
Checked = true,
};
root.Nodes.AddRange(new TreeNode[]
{
browser,
explorer,
desktop,
taskbar,
system,
gaming,
privacy,
components,
apps,
});
tvwFeatures.Nodes.Add(root);
// Some tvw nicety
foreach (TreeNode tn in tvwFeatures.Nodes) { tn.Expand(); }
tvwFeatures.Nodes[0].NodeFont = new Font(tvwFeatures.Font, FontStyle.Bold);
tvwFeatures.EndUpdate();
}
private async void btnAnalyze_Click(object sender, EventArgs e)
{
Reset();
int performFeaturesCount = 0;
List<FeatureNode> selectedFeatures = CollectFeatureNodes();
foreach (FeatureNode node in selectedFeatures)
{
var feature = node.Feature;
ConfiguredTaskAwaitable<bool> analyzeTask = Task<bool>.Factory.StartNew(() => feature.CheckFeature()).ConfigureAwait(true);
// logger.Log("Check {0}", node.Text);
bool shouldPerform = await analyzeTask;
lnkSubHeader.Text = "Check " + feature.ID();
if (menuIgnoreLowLevelP.Checked == true)
if (shouldPerform & !node.Text.Contains("LOW"))
{
logger.Log("Problem on " + node.Parent.Text + ": " + feature.ID());
//logger.Log("- {0}", node.Text);
performFeaturesCount += 1;
node.ForeColor = Color.MediumVioletRed;
}
else
{
node.Checked = false; // Uncheck all fixed
node.ForeColor = Color.Gray;
//logger.Log("Problem fixed: {0}", node.Text);
}
else if (shouldPerform)
{
logger.Log("Problem on " + node.Parent.Text + ": " + feature.ID());
performFeaturesCount += 1;
node.ForeColor = Color.MediumVioletRed;
}
else
{
node.Checked = false;
node.ForeColor = Color.Gray;
}
}
tvwFeatures.ExpandAll();
tvwFeatures.SelectedNode = tvwFeatures.Nodes[0];
DoProgress(100);
StringBuilder sum = new StringBuilder();
sum.Append(Environment.NewLine);
sum.Append("======= Summary =======\n");
sum.Append($"We've checked {selectedFeatures.Count} features of your Windows 11 installation.\r\n");
sum.Append($"We like {selectedFeatures.Count - performFeaturesCount} of these features (no need for action).\r\n");
logger.Log(sum.ToString(), "");
lnkSubHeader.Text = $"There are {performFeaturesCount} features we don't like and which should be fixed (click for details).\r\n";
}
private void SelectFeatureNodes(TreeNodeCollection trNodeCollection, bool isCheck)
{
foreach (TreeNode trNode in trNodeCollection)
{
trNode.Checked = isCheck;
if (trNode.Nodes.Count > 0)
SelectFeatureNodes(trNode.Nodes, isCheck);
}
}
private List<FeatureNode> CollectFeatureNodes()
{
List<FeatureNode> selectedFeatures = new List<FeatureNode>();
foreach (TreeNode treeNode in tvwFeatures.Nodes.All())
{
if (treeNode.Checked && treeNode.GetType() == typeof(FeatureNode))
{
selectedFeatures.Add((FeatureNode)treeNode);
}
}
progressionIncrease = (int)Math.Floor(100.0f / selectedFeatures.Count);
return selectedFeatures;
}
private void Reset()
{
progression = 0;
progressionIncrease = 0;
progress.Value = 0;
progress.Visible = true;
rtbLog.Visible = true;
rtbLog.Text = "";
}
private void DoProgress(int value)
{
progression = value;
progress.Value = progression;
}
private void IncrementProgress()
{
progression += progressionIncrease;
progress.Value = progression;
}
private async void ApplyFeatures(List<FeatureNode> treeNodes)
{
tvwFeatures.Enabled = false;
foreach (FeatureNode node in treeNodes)
{
var assessment = node.Feature;
ConfiguredTaskAwaitable<bool> performTask = Task<bool>.Factory.StartNew(() => assessment.DoFeature()).ConfigureAwait(true);
lnkSubHeader.Text = "Fixing " + node.Text;
var result = await performTask;
IncrementProgress();
}
DoProgress(100);
lnkSubHeader.Text = "";
tvwFeatures.Enabled = true;
}
private async void UndoFeatures(List<FeatureNode> treeNodes)
{
tvwFeatures.Enabled = false;
foreach (FeatureNode node in treeNodes)
{
var assessment = node.Feature;
ConfiguredTaskAwaitable<bool> performTask = Task<bool>.Factory.StartNew(() => assessment.UndoFeature()).ConfigureAwait(true);
lnkSubHeader.Text = "Restore " + node.Text;
var result = await performTask;
IncrementProgress();
}
DoProgress(100);
lnkSubHeader.Text = "";
tvwFeatures.Enabled = true;
}
private void menuFix_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(rtbLog.Text))
{
MessageBox.Show("No analyze has taken place yet");
return;
}
Reset();
List<FeatureNode> performNodes = CollectFeatureNodes();
ApplyFeatures(performNodes);
}
private void menuRestore_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Do you want to restore selected features to Windows default state?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
{
Reset();
List<FeatureNode> performNodes = CollectFeatureNodes();
UndoFeatures(performNodes);
}
}
private void treeFeatures_AfterCheck(object sender, TreeViewEventArgs e)
{
tvwFeatures.BeginUpdate();
foreach (TreeNode child in e.Node.Nodes)
{
child.Checked = e.Node.Checked;
}
tvwFeatures.EndUpdate();
}
private void menuAdvanced_Click(object sender, EventArgs e)
{
menuAdvanced.Checked = !(menuAdvanced.Checked);
if (menuAdvanced.Checked == true)
{
tvwFeatures.Visible = true;
tvwFeatures.BringToFront();
}
else if (menuAdvanced.Checked == false)
tvwFeatures.Visible = false;
rtbLog.Visible = true;
}
private void menuIgnoreLowLevelP_Click(object sender, EventArgs e)
{
menuIgnoreLowLevelP.Checked = !(menuIgnoreLowLevelP.Checked);
SelectFeatureNodes(tvwFeatures.Nodes, true);
}
private void richLog_LinkClicked(object sender, LinkClickedEventArgs e)
=> Utils.LaunchUri(e.LinkText);
private void btnAppOptions_Click(object sender, EventArgs e)
=> this.contextAppMenu.Show(Cursor.Position.X, Cursor.Position.Y);
private void btnMenu_Click(object sender, EventArgs e)
=> this.contextKebapMenu.Show(Cursor.Position.X, Cursor.Position.Y);
private void lnkSubHeader_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
=> menuAdvanced.PerformClick();
private void menuImportProfile_Click(object sender, EventArgs e)
{
OpenFileDialog f = new OpenFileDialog();
f.InitialDirectory = HelperTool.Utils.Data.DataRootDir;
f.Filter = "BloatyNosy files (*.bloos)|*.bloos|ThisIsWin11 files (*.tiw1)|*.tiw1";
if (f.ShowDialog() == DialogResult.OK)
{
SelectFeatureNodes(tvwFeatures.Nodes, false);
tvwFeatures.ExpandAll();
tvwFeatures.Nodes[0].EnsureVisible();
menuAdvanced.PerformClick();
using (StreamReader reader = new StreamReader(f.OpenFile()))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
foreach (TreeNode treeNode in tvwFeatures.Nodes.All())
{
if (treeNode.Text.Contains(line))
{
treeNode.BackColor = Color.Yellow;
treeNode.Text += "\x20" + "(" + Path.GetFileNameWithoutExtension(f.FileName) + ")";
treeNode.Checked = true;
}
}
}
MessageBox.Show("Profile has been successfully imported.\n\nWe have highlighted the configuration that would be enabled (no changes are done yet).", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
private void menuExportProfile_Click(object sender, EventArgs e)
{
SaveFileDialog f = new SaveFileDialog();
f.InitialDirectory = HelperTool.Utils.Data.DataRootDir;
f.FileName = "debloos-profile";
f.Filter = "BloatyNosy files *.bloos|*.bloos";
if (f.ShowDialog() == DialogResult.OK)
{
using (StreamWriter writer = new StreamWriter(f.OpenFile()))
{
foreach (TreeNode treeNode in tvwFeatures.Nodes.All())
{
if (!treeNode.Checked)
continue;
writer.WriteLine(String.Format("{0}", treeNode.Text));
}
writer.Close();
}
MessageBox.Show("Profile has been successfully exported.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextKebapMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="contextAppMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>172, 17</value>
</metadata>
</root>

24
src/BloatyNosy/Program.cs Normal file
View File

@ -0,0 +1,24 @@
using System;
using System.Windows.Forms;
namespace BloatyNosy
{
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]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}

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="highestAvailable" 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>