├── .gitignore
├── LICENSE
├── PluginClipilot
├── PluginClipilot.Designer.cs
├── PluginClipilot.cs
├── PluginClipilot.csproj
├── PluginClipilot.resx
├── Properties
│ └── AssemblyInfo.cs
└── packages.config
├── PluginInterface
├── IPlugin.cs
├── PluginInterface.csproj
└── Properties
│ └── AssemblyInfo.cs
├── PluginMSCC
├── MSCCPluginControl.Designer.cs
├── MSCCPluginControl.cs
├── MSCCPluginControl.resx
├── PluginMSCC.csproj
├── Properties
│ └── AssemblyInfo.cs
└── packages.config
├── PluginMSNavigator
├── MSNavigatorPluginControl.Designer.cs
├── MSNavigatorPluginControl.cs
├── MSNavigatorPluginControl.resx
├── PluginMSNavigator.csproj
└── Properties
│ └── AssemblyInfo.cs
├── README.md
├── SuperMSConfig.sln
└── SuperMSConfig
├── AboutForm.Designer.cs
├── AboutForm.cs
├── AboutForm.resx
├── App.config
├── AppIcon.ico
├── AppIcon.png
├── BaseHabit.cs
├── BaseHabitCategory.cs
├── Config
├── AppsHabit.cs
├── RegistryHabit.cs
├── ServiceHabit.cs
└── StartupHabit.cs
├── GetStartedPage.Designer.cs
├── GetStartedPage.cs
├── GetStartedPage.resx
├── HabitChecker.cs
├── Habits
├── AIHabits.cs
├── AdsHabits.cs
├── AppsHabits.cs
├── GamingHabits.cs
├── MSEdgeHabits.cs
├── PrivacyHabits.cs
├── SecurityHabits.cs
├── ServiceHabits.cs
├── StartupHabits.cs
└── SystemHabits.cs
├── Helpers
├── Logger.cs
└── Utils.cs
├── MainForm.Designer.cs
├── MainForm.cs
├── MainForm.resx
├── PluginLoader.cs
├── PluginsForm.Designer.cs
├── PluginsForm.cs
├── PluginsForm.resx
├── Program.cs
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
├── SuperMSConfig.csproj
├── Templates
├── HabitFactory.cs
├── HabitTemplate.cs
└── TemplateLoader.cs
├── app.manifest
├── assetCopilot.png
├── assetCopilotBW.png
└── packages.config
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Ll]og/
33 | [Ll]ogs/
34 |
35 | # Visual Studio 2015/2017 cache/options directory
36 | .vs/
37 | # Uncomment if you have tasks that create the project's static files in wwwroot
38 | #wwwroot/
39 |
40 | # Visual Studio 2017 auto generated files
41 | Generated\ Files/
42 |
43 | # MSTest test Results
44 | [Tt]est[Rr]esult*/
45 | [Bb]uild[Ll]og.*
46 |
47 | # NUnit
48 | *.VisualState.xml
49 | TestResult.xml
50 | nunit-*.xml
51 |
52 | # Build Results of an ATL Project
53 | [Dd]ebugPS/
54 | [Rr]eleasePS/
55 | dlldata.c
56 |
57 | # Benchmark Results
58 | BenchmarkDotNet.Artifacts/
59 |
60 | # .NET Core
61 | project.lock.json
62 | project.fragment.lock.json
63 | artifacts/
64 |
65 | # ASP.NET Scaffolding
66 | ScaffoldingReadMe.txt
67 |
68 | # StyleCop
69 | StyleCopReport.xml
70 |
71 | # Files built by Visual Studio
72 | *_i.c
73 | *_p.c
74 | *_h.h
75 | *.ilk
76 | *.meta
77 | *.obj
78 | *.iobj
79 | *.pch
80 | *.pdb
81 | *.ipdb
82 | *.pgc
83 | *.pgd
84 | *.rsp
85 | *.sbr
86 | *.tlb
87 | *.tli
88 | *.tlh
89 | *.tmp
90 | *.tmp_proj
91 | *_wpftmp.csproj
92 | *.log
93 | *.tlog
94 | *.vspscc
95 | *.vssscc
96 | .builds
97 | *.pidb
98 | *.svclog
99 | *.scc
100 |
101 | # Chutzpah Test files
102 | _Chutzpah*
103 |
104 | # Visual C++ cache files
105 | ipch/
106 | *.aps
107 | *.ncb
108 | *.opendb
109 | *.opensdf
110 | *.sdf
111 | *.cachefile
112 | *.VC.db
113 | *.VC.VC.opendb
114 |
115 | # Visual Studio profiler
116 | *.psess
117 | *.vsp
118 | *.vspx
119 | *.sap
120 |
121 | # Visual Studio Trace Files
122 | *.e2e
123 |
124 | # TFS 2012 Local Workspace
125 | $tf/
126 |
127 | # Guidance Automation Toolkit
128 | *.gpState
129 |
130 | # ReSharper is a .NET coding add-in
131 | _ReSharper*/
132 | *.[Rr]e[Ss]harper
133 | *.DotSettings.user
134 |
135 | # TeamCity is a build add-in
136 | _TeamCity*
137 |
138 | # DotCover is a Code Coverage Tool
139 | *.dotCover
140 |
141 | # AxoCover is a Code Coverage Tool
142 | .axoCover/*
143 | !.axoCover/settings.json
144 |
145 | # Coverlet is a free, cross platform Code Coverage Tool
146 | coverage*.json
147 | coverage*.xml
148 | coverage*.info
149 |
150 | # Visual Studio code coverage results
151 | *.coverage
152 | *.coveragexml
153 |
154 | # NCrunch
155 | _NCrunch_*
156 | .*crunch*.local.xml
157 | nCrunchTemp_*
158 |
159 | # MightyMoose
160 | *.mm.*
161 | AutoTest.Net/
162 |
163 | # Web workbench (sass)
164 | .sass-cache/
165 |
166 | # Installshield output folder
167 | [Ee]xpress/
168 |
169 | # DocProject is a documentation generator add-in
170 | DocProject/buildhelp/
171 | DocProject/Help/*.HxT
172 | DocProject/Help/*.HxC
173 | DocProject/Help/*.hhc
174 | DocProject/Help/*.hhk
175 | DocProject/Help/*.hhp
176 | DocProject/Help/Html2
177 | DocProject/Help/html
178 |
179 | # Click-Once directory
180 | publish/
181 |
182 | # Publish Web Output
183 | *.[Pp]ublish.xml
184 | *.azurePubxml
185 | # Note: Comment the next line if you want to checkin your web deploy settings,
186 | # but database connection strings (with potential passwords) will be unencrypted
187 | *.pubxml
188 | *.publishproj
189 |
190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
191 | # checkin your Azure Web App publish settings, but sensitive information contained
192 | # in these scripts will be unencrypted
193 | PublishScripts/
194 |
195 | # NuGet Packages
196 | *.nupkg
197 | # NuGet Symbol Packages
198 | *.snupkg
199 | # The packages folder can be ignored because of Package Restore
200 | **/[Pp]ackages/*
201 | # except build/, which is used as an MSBuild target.
202 | !**/[Pp]ackages/build/
203 | # Uncomment if necessary however generally it will be regenerated when needed
204 | #!**/[Pp]ackages/repositories.config
205 | # NuGet v3's project.json files produces more ignorable files
206 | *.nuget.props
207 | *.nuget.targets
208 |
209 | # Microsoft Azure Build Output
210 | csx/
211 | *.build.csdef
212 |
213 | # Microsoft Azure Emulator
214 | ecf/
215 | rcf/
216 |
217 | # Windows Store app package directories and files
218 | AppPackages/
219 | BundleArtifacts/
220 | Package.StoreAssociation.xml
221 | _pkginfo.txt
222 | *.appx
223 | *.appxbundle
224 | *.appxupload
225 |
226 | # Visual Studio cache files
227 | # files ending in .cache can be ignored
228 | *.[Cc]ache
229 | # but keep track of directories ending in .cache
230 | !?*.[Cc]ache/
231 |
232 | # Others
233 | ClientBin/
234 | ~$*
235 | *~
236 | *.dbmdl
237 | *.dbproj.schemaview
238 | *.jfm
239 | *.pfx
240 | *.publishsettings
241 | orleans.codegen.cs
242 |
243 | # Including strong name files can present a security risk
244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
245 | #*.snk
246 |
247 | # Since there are multiple workflows, uncomment next line to ignore bower_components
248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
249 | #bower_components/
250 |
251 | # RIA/Silverlight projects
252 | Generated_Code/
253 |
254 | # Backup & report files from converting an old project file
255 | # to a newer Visual Studio version. Backup files are not needed,
256 | # because we have git ;-)
257 | _UpgradeReport_Files/
258 | Backup*/
259 | UpgradeLog*.XML
260 | UpgradeLog*.htm
261 | ServiceFabricBackup/
262 | *.rptproj.bak
263 |
264 | # SQL Server files
265 | *.mdf
266 | *.ldf
267 | *.ndf
268 |
269 | # Business Intelligence projects
270 | *.rdl.data
271 | *.bim.layout
272 | *.bim_*.settings
273 | *.rptproj.rsuser
274 | *- [Bb]ackup.rdl
275 | *- [Bb]ackup ([0-9]).rdl
276 | *- [Bb]ackup ([0-9][0-9]).rdl
277 |
278 | # Microsoft Fakes
279 | FakesAssemblies/
280 |
281 | # GhostDoc plugin setting file
282 | *.GhostDoc.xml
283 |
284 | # Node.js Tools for Visual Studio
285 | .ntvs_analysis.dat
286 | node_modules/
287 |
288 | # Visual Studio 6 build log
289 | *.plg
290 |
291 | # Visual Studio 6 workspace options file
292 | *.opt
293 |
294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
295 | *.vbw
296 |
297 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
298 | *.vbp
299 |
300 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
301 | *.dsw
302 | *.dsp
303 |
304 | # Visual Studio 6 technical files
305 | *.ncb
306 | *.aps
307 |
308 | # Visual Studio LightSwitch build output
309 | **/*.HTMLClient/GeneratedArtifacts
310 | **/*.DesktopClient/GeneratedArtifacts
311 | **/*.DesktopClient/ModelManifest.xml
312 | **/*.Server/GeneratedArtifacts
313 | **/*.Server/ModelManifest.xml
314 | _Pvt_Extensions
315 |
316 | # Paket dependency manager
317 | .paket/paket.exe
318 | paket-files/
319 |
320 | # FAKE - F# Make
321 | .fake/
322 |
323 | # CodeRush personal settings
324 | .cr/personal
325 |
326 | # Python Tools for Visual Studio (PTVS)
327 | __pycache__/
328 | *.pyc
329 |
330 | # Cake - Uncomment if you are using it
331 | # tools/**
332 | # !tools/packages.config
333 |
334 | # Tabs Studio
335 | *.tss
336 |
337 | # Telerik's JustMock configuration file
338 | *.jmconfig
339 |
340 | # BizTalk build output
341 | *.btp.cs
342 | *.btm.cs
343 | *.odx.cs
344 | *.xsd.cs
345 |
346 | # OpenCover UI analysis results
347 | OpenCover/
348 |
349 | # Azure Stream Analytics local run output
350 | ASALocalRun/
351 |
352 | # MSBuild Binary and Structured Log
353 | *.binlog
354 |
355 | # NVidia Nsight GPU debugger configuration file
356 | *.nvuser
357 |
358 | # MFractors (Xamarin productivity tool) working folder
359 | .mfractor/
360 |
361 | # Local History for Visual Studio
362 | .localhistory/
363 |
364 | # Visual Studio History (VSHistory) files
365 | .vshistory/
366 |
367 | # BeatPulse healthcheck temp database
368 | healthchecksdb
369 |
370 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
371 | MigrationBackup/
372 |
373 | # Ionide (cross platform F# VS Code tools) working folder
374 | .ionide/
375 |
376 | # Fody - auto-generated XML schema
377 | FodyWeavers.xsd
378 |
379 | # VS Code files for those working on multiple tools
380 | .vscode/*
381 | !.vscode/settings.json
382 | !.vscode/tasks.json
383 | !.vscode/launch.json
384 | !.vscode/extensions.json
385 | *.code-workspace
386 |
387 | # Local History for Visual Studio Code
388 | .history/
389 |
390 | # Windows Installer files from build outputs
391 | *.cab
392 | *.msi
393 | *.msix
394 | *.msm
395 | *.msp
396 |
397 | # JetBrains Rider
398 | *.sln.iml
399 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 A Belim app creation (Builtbybel)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/PluginClipilot/PluginClipilot.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PluginClipilot
2 | {
3 | partial class PluginClipilotControl
4 | {
5 | ///
6 | /// Erforderliche Designervariable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Verwendete Ressourcen bereinigen.
12 | ///
13 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Vom Komponenten-Designer generierter Code
24 |
25 | ///
26 | /// Erforderliche Methode für die Designerunterstützung.
27 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.SuspendLayout();
32 | //
33 | // PluginClipilot
34 | //
35 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
36 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
37 | this.Name = "PluginClipilot";
38 | this.Size = new System.Drawing.Size(410, 417);
39 | this.ResumeLayout(false);
40 |
41 | }
42 |
43 | #endregion
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/PluginClipilot/PluginClipilot.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 | using PluginInterface;
4 | using Microsoft.Web.WebView2.WinForms;
5 |
6 | namespace PluginClipilot
7 | {
8 | public partial class PluginClipilotControl : UserControl, IPlugin
9 | {
10 | private WebView2 webView;
11 |
12 | public UserControl GetControl()
13 | {
14 | return this;
15 | }
16 |
17 | public string PluginName => "Ask Clipilot";
18 | public string PluginVersion => "1.0";
19 | public string PluginInfo => "Displays the Microsoft Copilot in a WebView2 control.";
20 |
21 | public PluginClipilotControl()
22 | {
23 | InitializeComponent();
24 | InitializeWebView();
25 | }
26 |
27 | private async void InitializeWebView()
28 | {
29 | // Initialize WebView2 control
30 | webView = new WebView2
31 | {
32 | Dock = DockStyle.Fill
33 | };
34 |
35 | Controls.Add(webView);
36 |
37 | // Wait for WebView2 to be initialized
38 | await webView.EnsureCoreWebView2Async(null);
39 |
40 | // Navigate to the Microsoft Copilot URL
41 | webView.CoreWebView2.Navigate("https://copilot.microsoft.com");
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/PluginClipilot/PluginClipilot.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {279ED121-4536-4447-BD14-F67025E0A7DE}
8 | Library
9 | PluginClipilot
10 | PluginClipilot
11 | v4.8
12 | 512
13 | true
14 |
15 |
16 |
17 |
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 | ..\packages\Microsoft.Web.WebView2.1.0.2739.15\lib\net462\Microsoft.Web.WebView2.Core.dll
37 |
38 |
39 | ..\packages\Microsoft.Web.WebView2.1.0.2739.15\lib\net462\Microsoft.Web.WebView2.WinForms.dll
40 |
41 |
42 | ..\packages\Microsoft.Web.WebView2.1.0.2739.15\lib\net462\Microsoft.Web.WebView2.Wpf.dll
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | UserControl
58 |
59 |
60 | PluginClipilot.cs
61 |
62 |
63 |
64 |
65 |
66 |
67 | PluginClipilot.cs
68 |
69 |
70 |
71 |
72 | {11724eb0-bd43-41d3-a4c3-7002f9163b7f}
73 | PluginInterface
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/PluginClipilot/PluginClipilot.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/PluginClipilot/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("PluginClipilot")]
9 | [assembly: AssemblyDescription("Plugin for SuperMSConfig")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("A Belim app creation")]
12 | [assembly: AssemblyProduct("PluginClipilot")]
13 | [assembly: AssemblyCopyright("Copyright © 2024")]
14 | [assembly: AssemblyTrademark("Builtbybel")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("279ed121-4536-4447-bd14-f67025e0a7de")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | [assembly: AssemblyVersion("1.0.0.0")]
33 | [assembly: AssemblyFileVersion("1.0.0.0")]
34 |
--------------------------------------------------------------------------------
/PluginClipilot/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/PluginInterface/IPlugin.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace PluginInterface
4 | {
5 | public interface IPlugin
6 | {
7 | UserControl GetControl();
8 | // Property for Plugin information
9 | string PluginName { get; }
10 | string PluginVersion { get; }
11 | string PluginInfo { get; }
12 | }
13 | }
--------------------------------------------------------------------------------
/PluginInterface/PluginInterface.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {11724EB0-BD43-41D3-A4C3-7002F9163B7F}
8 | Library
9 | Properties
10 | PluginInterface
11 | PluginInterface
12 | v4.8
13 | 512
14 | true
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | pdbonly
27 | true
28 | bin\Release\
29 | TRACE
30 | prompt
31 | 4
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/PluginInterface/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("PluginInterface")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("PluginInterface")]
13 | [assembly: AssemblyCopyright("Copyright © 2024")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("11724eb0-bd43-41d3-a4c3-7002f9163b7f")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | [assembly: AssemblyVersion("1.0.0.0")]
33 | [assembly: AssemblyFileVersion("1.0.0.0")]
34 |
--------------------------------------------------------------------------------
/PluginMSCC/MSCCPluginControl.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
--------------------------------------------------------------------------------
/PluginMSCC/PluginMSCC.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {46392552-A27B-43BB-886C-64FCD9D9EDEB}
8 | Library
9 | MSCleanupCompanion
10 | MSCleanupCompanion
11 | v4.8
12 | 512
13 | true
14 |
15 |
16 | true
17 | full
18 | false
19 | bin\Debug\
20 | DEBUG;TRACE
21 | prompt
22 | 4
23 |
24 |
25 | pdbonly
26 | true
27 | bin\Release\
28 | TRACE
29 | prompt
30 | 4
31 |
32 |
33 |
34 | ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
35 |
36 |
37 | ..\PluginInterface\bin\Debug\PluginInterface.dll
38 |
39 |
40 |
41 |
42 | False
43 | ..\..\..\..\..\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | UserControl
58 |
59 |
60 | MSCCPluginControl.cs
61 |
62 |
63 |
64 |
65 |
66 | MSCCPluginControl.cs
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/PluginMSCC/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("MSCleanupCompanion")]
9 | [assembly: AssemblyDescription("Microsoft Cleanup Companion")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Builtbybel")]
12 | [assembly: AssemblyProduct("MSCleanupCompanion")]
13 | [assembly: AssemblyCopyright("Copyright © 2024")]
14 | [assembly: AssemblyTrademark("Builtbybel")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("46392552-a27b-43bb-886c-64fcd9d9edeb")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
33 | // indem Sie "*" wie unten gezeigt eingeben:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/PluginMSCC/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/PluginMSNavigator/MSNavigatorPluginControl.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using PluginInterface;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Data;
6 | using System.Diagnostics;
7 | using System.Drawing;
8 | using System.IO;
9 | using System.Linq;
10 | using System.Management.Automation;
11 | using System.Threading.Tasks;
12 | using System.Windows.Forms;
13 |
14 | namespace MSNavigator
15 | {
16 | public partial class MSNavigatorPluginControl : UserControl, IPlugin
17 | {
18 | private List- items;
19 |
20 | public UserControl GetControl()
21 | {
22 | return this;
23 | }
24 |
25 | public string PluginName => "Microsoft Navigator";
26 | public string PluginVersion => "1.0";
27 | public string PluginInfo => "Windows Navigator is your modern, assistant for Windows. Like Clippy, Butler handles simple requests to manage your system—install apps, tweak settings, and more.";
28 |
29 | private void ShowPluginInfo()
30 | {
31 | string pluginDetails = $"{PluginName}\n" +
32 | $"Version: {PluginVersion}\n\n" +
33 | $"{PluginInfo}";
34 |
35 | MessageBox.Show(pluginDetails, "Plugin Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
36 | }
37 |
38 | public MSNavigatorPluginControl()
39 | {
40 | InitializeComponent();
41 | LoadData();
42 | BackColor =
43 | resultsListBox.BackColor =
44 | resultsTextBox.BackColor =
45 | Color.FromArgb(251, 242, 244);
46 | lblInfo.Text = PluginInfo;
47 | }
48 |
49 | private void LoadData()
50 | {
51 | string jsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins\\PluginMSNavigator", "MSNavigator.json");
52 | string json = File.ReadAllText(jsonFilePath);
53 | items = JsonConvert.DeserializeObject
>(json);
54 | }
55 |
56 | private void resultsListBox_SelectedIndexChanged(object sender, EventArgs e)
57 | {
58 | if (resultsListBox.SelectedIndex >= 0)
59 | {
60 | var selectedItem = items.FirstOrDefault(item => item.Response == resultsListBox.SelectedItem.ToString());
61 | if (selectedItem != null)
62 | {
63 | ExecuteAction(selectedItem.Action);
64 | // Scroll to the bottom of the TextBox
65 | resultsTextBox.Focus();
66 | resultsTextBox.ScrollToCaret();
67 | }
68 | }
69 | }
70 |
71 | private void searchTextBox_TextChanged(object sender, EventArgs e)
72 | {
73 | string searchTerm = searchTextBox.Text.ToLower();
74 | resultsListBox.Items.Clear();
75 |
76 | btnSend.Enabled = !string.IsNullOrWhiteSpace(searchTextBox.Text);
77 |
78 | if (!string.IsNullOrWhiteSpace(searchTerm))
79 | {
80 | var results = items
81 | .Where(item => item.Question.ToLower().Contains(searchTerm))
82 | .Select(item => item.Response)
83 | .ToList();
84 |
85 | resultsListBox.Items.AddRange(results.ToArray());
86 | }
87 | }
88 |
89 | private void searchTextBox_Click(object sender, EventArgs e)
90 | {
91 | searchTextBox.Clear();
92 | }
93 |
94 | private async void ExecuteAction(string action)
95 | {
96 | try
97 | {
98 | btnSend.Enabled = false;
99 | // Output the action string to help with debugging
100 | Console.WriteLine($"Executing action: {action}");
101 |
102 | if (action.StartsWith("ms-settings:"))
103 | {
104 | // Open ms-settings URI
105 | Process.Start(new ProcessStartInfo
106 | {
107 | FileName = action,
108 | UseShellExecute = true
109 | });
110 | }
111 | else if (action.StartsWith("cmd:"))
112 | {
113 | // Execute CMD command
114 | string command = action.Substring("cmd:".Length);
115 | await ExecuteCmdCommand(command);
116 | }
117 | else if (action.StartsWith("powershell:"))
118 | {
119 | // Execute PowerShell command
120 | string command = action.Substring("powershell:".Length);
121 | await ExecutePowerShellCommand(command);
122 | }
123 | else if (action.StartsWith("install:"))
124 | {
125 | // Install application using winget
126 | string wingetId = action.Substring("install:".Length).Trim();
127 | await InstallAppWithWinget(wingetId);
128 | }
129 | else
130 | {
131 | // Log unknown action type
132 | MessageBox.Show($"Unknown action type: {action}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
133 | }
134 |
135 | btnSend.Enabled = true;
136 | }
137 | catch (Exception ex)
138 | {
139 | // Log any exceptions
140 | MessageBox.Show($"Exception: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
141 | }
142 | }
143 |
144 | private async Task InstallAppWithWinget(string wingetId)
145 | {
146 | try
147 | {
148 | resultsTextBox.Text = "Installing " + wingetId;
149 |
150 | using (PowerShell powerShell = PowerShell.Create())
151 | {
152 | // Add script to install application with winget
153 | powerShell.AddScript($"winget install --id {wingetId} --accept-source-agreements --accept-package-agreements");
154 |
155 | // Execute script asynchronously
156 | var output = await Task.Run(() => powerShell.Invoke());
157 |
158 | // Capture errors from PowerShell
159 | var errors = powerShell.Streams.Error.ReadAll();
160 |
161 | // Process output
162 | if (output.Any())
163 | {
164 | resultsTextBox.Text = "Output: " + string.Join(Environment.NewLine, output.Select(o => o.ToString()));
165 | }
166 |
167 | // Process errors
168 | if (errors.Any())
169 | {
170 | resultsTextBox.Text += Environment.NewLine + "Error: " + string.Join(Environment.NewLine, errors.Select(e => e.ToString()));
171 | }
172 | }
173 | }
174 | catch (Exception ex)
175 | {
176 | resultsTextBox.Text = "Exception: " + ex.Message;
177 | }
178 | }
179 |
180 | // Execute PS command
181 | public async Task ExecutePowerShellCommand(string command)
182 | {
183 | try
184 | {
185 | ProcessStartInfo processInfo = new ProcessStartInfo
186 | {
187 | FileName = "powershell.exe",
188 | Arguments = $"-NoProfile -ExecutionPolicy Bypass -Command \"{command}\"",
189 | RedirectStandardOutput = true,
190 | RedirectStandardError = true,
191 | UseShellExecute = false,
192 | CreateNoWindow = true
193 | };
194 |
195 | using (Process process = Process.Start(processInfo))
196 | {
197 | // Read output and error asynchronously using Task.Run
198 | string output = await Task.Run(() => process.StandardOutput.ReadToEnd());
199 | string error = await Task.Run(() => process.StandardError.ReadToEnd());
200 | process.WaitForExit(); // Wait for the process to exit (synchronous)
201 |
202 | // Update UI with results (invoke on UI thread)
203 | Invoke((Action)(() =>
204 | {
205 | resultsTextBox.Text = $"Output: {output}\r\nError: {error}";
206 | }));
207 | }
208 | }
209 | catch (Exception ex)
210 | {
211 | // Update UI with exception (invoke on UI thread)
212 | Invoke((Action)(() =>
213 | {
214 | resultsTextBox.Text = $"Exception: {ex.Message}";
215 | }));
216 | }
217 | }
218 |
219 | // Execute CMD command
220 | public async Task ExecuteCmdCommand(string command)
221 | {
222 | try
223 | {
224 | ProcessStartInfo processInfo = new ProcessStartInfo
225 | {
226 | FileName = "cmd.exe",
227 | Arguments = $"/C \"{command}\"",
228 | RedirectStandardOutput = true,
229 | RedirectStandardError = true,
230 | UseShellExecute = false,
231 | CreateNoWindow = true
232 | };
233 |
234 | using (Process process = Process.Start(processInfo))
235 | {
236 | string output = await Task.Run(() => process.StandardOutput.ReadToEnd());
237 | string error = await Task.Run(() => process.StandardError.ReadToEnd());
238 | process.WaitForExit();
239 |
240 | Invoke((Action)(() =>
241 | {
242 | resultsTextBox.Text = $"Output: {output}\r\nError: {error}";
243 | }));
244 | }
245 | }
246 | catch (Exception ex)
247 | {
248 | Invoke((Action)(() =>
249 | {
250 | resultsTextBox.Text = $"Exception: {ex.Message}";
251 | }));
252 | }
253 | }
254 |
255 | private void newChatToolStripMenuItem_Click(object sender, EventArgs e)
256 | {
257 | searchTextBox.Text = "Type your question";
258 | resultsTextBox.Clear();
259 | }
260 | }
261 | }
262 |
263 | public class Item
264 | {
265 | public string Question { get; set; }
266 | public string Response { get; set; }
267 | public string Action { get; set; }
268 | }
--------------------------------------------------------------------------------
/PluginMSNavigator/MSNavigatorPluginControl.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 142, 17
125 |
126 |
--------------------------------------------------------------------------------
/PluginMSNavigator/PluginMSNavigator.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {15A24130-DFAC-4BE3-96EE-EF620EA9181C}
8 | Library
9 | Properties
10 | MSNavigator
11 | MSNavigator
12 | v4.8
13 | 512
14 | true
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 | x64
25 |
26 |
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 | ..\PluginInterface\bin\Debug\PluginInterface.dll
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | UserControl
55 |
56 |
57 | MSNavigatorPluginControl.cs
58 |
59 |
60 |
61 |
62 | MSNavigatorPluginControl.cs
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/PluginMSNavigator/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("MSNavigator")]
9 | [assembly: AssemblyDescription("Windows Navigator")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Builtbybel")]
12 | [assembly: AssemblyProduct("MSNavigator")]
13 | [assembly: AssemblyCopyright("Copyright © 2024")]
14 | [assembly: AssemblyTrademark("Builtbybel")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("15a24130-dfac-4be3-96ee-ef620ea9181c")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
33 | // indem Sie "*" wie unten gezeigt eingeben:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MSConfig Gets Superpowers After 25 Years – Now It's SuperMSConfig 😃
2 |
3 | We all know MSConfig, the tool that helps you manage some system settings. SuperMSConfig takes things a step further by automating many of these tasks
4 |
5 | Built specifically for Windows 11, it not only enhances system configuration but also customizes your system right after installation by revisiting the Out-of-Box Experience (OOBE), ensuring your Windows setup starts off perfectly.
6 |
7 | 
8 |
9 |
10 | ## What Does SuperMSConfig Do? 🎯
11 | While MSConfig traditionally allows you to manage startup settings and system drivers, SuperMSConfig goes much further:
12 |
13 | - Reconfigures Windows 11 OOBE: SuperMSConfig revisits the out-of-box setup, letting you fine-tune the Windows 11 post-installation experience. Whether it’s disabling intrusive features or optimizing services, it provides full control over how your system behaves immediately after setup.
14 |
15 | - Automates MSConfig: It streamlines and automates MSConfig tasks, eliminating the hassle of manual configuration. SuperMSConfig scans your system to detect unnecessary startup apps, services, and system tweaks—cleaning up what slows down your PC.
16 |
17 | - Comprehensive System Checker: It checks for Windows 11’s bad habits—unwanted services, sneaky startup programs, intrusive browser settings, system configurations, unwanted updates, security settings, ads, and much more.
18 |
19 | ## How SuperMSConfig Enhances Windows 11’s OOBE 💻
20 | Unlike the default Windows 11 setup, which can leave unnecessary features enabled by default, SuperMSConfig revisits the Out-of-Box Experience after installation, giving you control over:
21 |
22 | - Disabling annoying ads and unwanted telemetry
23 | - Tweaking system settings for better performance and privacy
24 | - **Optimizing configurations that Windows leaves on by default, improving your user experience right from the start**
25 |
26 |
27 | ## Origins: Born from XD-AntiSpy 🛡️
28 | SuperMSConfig began as a simple [XD-AntiSpy](https://github.com/builtbybel/xd-AntiSpy) Plugin , an app focused on improving privacy. However, it evolved into its own standalone tool with broader system management features. XD-AntiSpy remains a great companion for privacy tweaks, while SuperMSConfig handles the overall system management, making them the perfect duo.
29 |
30 | **My plan with SuperMSConfig is to create a dynamic tool that lets you turn almost any online guide, tutorial, or configuration into a shareable template, available for everyone to use. This way, anyone can show off their Super Microsoft configuration setup. 😉**
31 |
32 | ## How to Use
33 | 1. **Open** **SuperMSConfig**.
34 | 2. Click **"Check"** to start scanning your system for bad habits.
35 | 3. Review the issues highlighted in red as **"Bad"** habits.
36 | 4. Select the issues you want to fix and click **"Fix"**.
37 |
38 |
39 |
--------------------------------------------------------------------------------
/SuperMSConfig.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.11.35208.52
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SuperMSConfig", "SuperMSConfig\SuperMSConfig.csproj", "{6514A6A5-6E23-4B36-AC92-DF96DB8901D3}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginInterface", "PluginInterface\PluginInterface.csproj", "{11724EB0-BD43-41D3-A4C3-7002F9163B7F}"
9 | EndProject
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginMSNavigator", "PluginMSNavigator\PluginMSNavigator.csproj", "{15A24130-DFAC-4BE3-96EE-EF620EA9181C}"
11 | EndProject
12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginMSCC", "PluginMSCC\PluginMSCC.csproj", "{46392552-A27B-43BB-886C-64FCD9D9EDEB}"
13 | EndProject
14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginClipilot", "PluginClipilot\PluginClipilot.csproj", "{279ED121-4536-4447-BD14-F67025E0A7DE}"
15 | EndProject
16 | Global
17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
18 | Debug|Any CPU = Debug|Any CPU
19 | Release|Any CPU = Release|Any CPU
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {6514A6A5-6E23-4B36-AC92-DF96DB8901D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {6514A6A5-6E23-4B36-AC92-DF96DB8901D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {6514A6A5-6E23-4B36-AC92-DF96DB8901D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
25 | {6514A6A5-6E23-4B36-AC92-DF96DB8901D3}.Release|Any CPU.Build.0 = Release|Any CPU
26 | {11724EB0-BD43-41D3-A4C3-7002F9163B7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27 | {11724EB0-BD43-41D3-A4C3-7002F9163B7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 | {11724EB0-BD43-41D3-A4C3-7002F9163B7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 | {11724EB0-BD43-41D3-A4C3-7002F9163B7F}.Release|Any CPU.Build.0 = Release|Any CPU
30 | {15A24130-DFAC-4BE3-96EE-EF620EA9181C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31 | {15A24130-DFAC-4BE3-96EE-EF620EA9181C}.Debug|Any CPU.Build.0 = Debug|Any CPU
32 | {15A24130-DFAC-4BE3-96EE-EF620EA9181C}.Release|Any CPU.ActiveCfg = Release|Any CPU
33 | {15A24130-DFAC-4BE3-96EE-EF620EA9181C}.Release|Any CPU.Build.0 = Release|Any CPU
34 | {46392552-A27B-43BB-886C-64FCD9D9EDEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
35 | {46392552-A27B-43BB-886C-64FCD9D9EDEB}.Debug|Any CPU.Build.0 = Debug|Any CPU
36 | {46392552-A27B-43BB-886C-64FCD9D9EDEB}.Release|Any CPU.ActiveCfg = Release|Any CPU
37 | {46392552-A27B-43BB-886C-64FCD9D9EDEB}.Release|Any CPU.Build.0 = Release|Any CPU
38 | {279ED121-4536-4447-BD14-F67025E0A7DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
39 | {279ED121-4536-4447-BD14-F67025E0A7DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
40 | {279ED121-4536-4447-BD14-F67025E0A7DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
41 | {279ED121-4536-4447-BD14-F67025E0A7DE}.Release|Any CPU.Build.0 = Release|Any CPU
42 | EndGlobalSection
43 | GlobalSection(SolutionProperties) = preSolution
44 | HideSolutionNode = FALSE
45 | EndGlobalSection
46 | GlobalSection(ExtensibilityGlobals) = postSolution
47 | SolutionGuid = {7F605095-F8EF-4B2E-84E7-79FE694DDEE5}
48 | EndGlobalSection
49 | EndGlobal
50 |
--------------------------------------------------------------------------------
/SuperMSConfig/AboutForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SuperMSConfig
2 | {
3 | partial class AboutForm
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm));
32 | this.panelBottom = new System.Windows.Forms.Panel();
33 | this.btnDonate = new System.Windows.Forms.Button();
34 | this.btnWebsite = new System.Windows.Forms.Button();
35 | this.lblAbout = new System.Windows.Forms.Label();
36 | this.lblHeaderInfo = new System.Windows.Forms.Label();
37 | this.linkVersion = new System.Windows.Forms.LinkLabel();
38 | this.label2 = new System.Windows.Forms.Label();
39 | this.label3 = new System.Windows.Forms.Label();
40 | this.panelBottom.SuspendLayout();
41 | this.SuspendLayout();
42 | //
43 | // panelBottom
44 | //
45 | this.panelBottom.BackColor = System.Drawing.Color.Gainsboro;
46 | this.panelBottom.Controls.Add(this.btnDonate);
47 | this.panelBottom.Controls.Add(this.btnWebsite);
48 | this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
49 | this.panelBottom.Location = new System.Drawing.Point(0, 379);
50 | this.panelBottom.Name = "panelBottom";
51 | this.panelBottom.Size = new System.Drawing.Size(451, 76);
52 | this.panelBottom.TabIndex = 0;
53 | //
54 | // btnDonate
55 | //
56 | this.btnDonate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
57 | | System.Windows.Forms.AnchorStyles.Right)));
58 | this.btnDonate.AutoEllipsis = true;
59 | this.btnDonate.BackColor = System.Drawing.Color.White;
60 | this.btnDonate.FlatAppearance.BorderColor = System.Drawing.Color.Black;
61 | this.btnDonate.FlatAppearance.BorderSize = 0;
62 | this.btnDonate.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
63 | this.btnDonate.ForeColor = System.Drawing.Color.Black;
64 | this.btnDonate.Location = new System.Drawing.Point(227, 23);
65 | this.btnDonate.Name = "btnDonate";
66 | this.btnDonate.Size = new System.Drawing.Size(203, 32);
67 | this.btnDonate.TabIndex = 247;
68 | this.btnDonate.TabStop = false;
69 | this.btnDonate.Text = "Donate";
70 | this.btnDonate.UseVisualStyleBackColor = true;
71 | this.btnDonate.Click += new System.EventHandler(this.btnDonate_Click);
72 | //
73 | // btnWebsite
74 | //
75 | this.btnWebsite.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
76 | | System.Windows.Forms.AnchorStyles.Right)));
77 | this.btnWebsite.AutoEllipsis = true;
78 | this.btnWebsite.BackColor = System.Drawing.Color.White;
79 | this.btnWebsite.FlatAppearance.BorderColor = System.Drawing.Color.Black;
80 | this.btnWebsite.FlatAppearance.BorderSize = 0;
81 | this.btnWebsite.Font = new System.Drawing.Font("Segoe UI Variable Text Semiligh", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
82 | this.btnWebsite.ForeColor = System.Drawing.Color.Black;
83 | this.btnWebsite.Location = new System.Drawing.Point(19, 23);
84 | this.btnWebsite.Name = "btnWebsite";
85 | this.btnWebsite.Size = new System.Drawing.Size(203, 32);
86 | this.btnWebsite.TabIndex = 246;
87 | this.btnWebsite.TabStop = false;
88 | this.btnWebsite.Text = "GitHub";
89 | this.btnWebsite.UseVisualStyleBackColor = true;
90 | this.btnWebsite.Click += new System.EventHandler(this.btnWebsite_Click);
91 | //
92 | // lblAbout
93 | //
94 | this.lblAbout.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
95 | | System.Windows.Forms.AnchorStyles.Right)));
96 | this.lblAbout.AutoEllipsis = true;
97 | this.lblAbout.BackColor = System.Drawing.Color.Transparent;
98 | this.lblAbout.Font = new System.Drawing.Font("Segoe UI Variable Small", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
99 | this.lblAbout.Location = new System.Drawing.Point(14, 88);
100 | this.lblAbout.Name = "lblAbout";
101 | this.lblAbout.Size = new System.Drawing.Size(425, 91);
102 | this.lblAbout.TabIndex = 233;
103 | this.lblAbout.Text = resources.GetString("lblAbout.Text");
104 | //
105 | // lblHeaderInfo
106 | //
107 | this.lblHeaderInfo.AutoSize = true;
108 | this.lblHeaderInfo.BackColor = System.Drawing.Color.Transparent;
109 | this.lblHeaderInfo.Font = new System.Drawing.Font("Segoe UI Variable Small Semibol", 18F, System.Drawing.FontStyle.Bold);
110 | this.lblHeaderInfo.Location = new System.Drawing.Point(10, 14);
111 | this.lblHeaderInfo.Name = "lblHeaderInfo";
112 | this.lblHeaderInfo.Size = new System.Drawing.Size(188, 32);
113 | this.lblHeaderInfo.TabIndex = 235;
114 | this.lblHeaderInfo.Text = "SuperMSConfig";
115 | //
116 | // linkVersion
117 | //
118 | this.linkVersion.AutoEllipsis = true;
119 | this.linkVersion.BackColor = System.Drawing.Color.Transparent;
120 | this.linkVersion.Font = new System.Drawing.Font("Segoe UI Variable Small", 10.75F);
121 | this.linkVersion.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
122 | this.linkVersion.LinkColor = System.Drawing.Color.Black;
123 | this.linkVersion.Location = new System.Drawing.Point(12, 59);
124 | this.linkVersion.Name = "linkVersion";
125 | this.linkVersion.Size = new System.Drawing.Size(427, 20);
126 | this.linkVersion.TabIndex = 237;
127 | this.linkVersion.TabStop = true;
128 | this.linkVersion.Text = "Version";
129 | this.linkVersion.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkAbout_LinkClicked);
130 | //
131 | // label2
132 | //
133 | this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
134 | | System.Windows.Forms.AnchorStyles.Right)));
135 | this.label2.AutoEllipsis = true;
136 | this.label2.BackColor = System.Drawing.Color.Transparent;
137 | this.label2.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
138 | this.label2.ForeColor = System.Drawing.Color.Black;
139 | this.label2.Location = new System.Drawing.Point(12, 330);
140 | this.label2.Name = "label2";
141 | this.label2.Size = new System.Drawing.Size(425, 46);
142 | this.label2.TabIndex = 239;
143 | this.label2.Text = "Microsoft 365 Copilot is a registered trademark of Microsoft Corporation. ";
144 | this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
145 | //
146 | // label3
147 | //
148 | this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
149 | this.label3.AutoSize = true;
150 | this.label3.BackColor = System.Drawing.Color.Transparent;
151 | this.label3.ForeColor = System.Drawing.Color.DarkGray;
152 | this.label3.Location = new System.Drawing.Point(314, 1);
153 | this.label3.Name = "label3";
154 | this.label3.Size = new System.Drawing.Size(137, 13);
155 | this.label3.TabIndex = 240;
156 | this.label3.Text = "A Belim app creation (2024)";
157 | //
158 | // AboutForm
159 | //
160 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
161 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
162 | this.ClientSize = new System.Drawing.Size(451, 455);
163 | this.Controls.Add(this.label3);
164 | this.Controls.Add(this.label2);
165 | this.Controls.Add(this.linkVersion);
166 | this.Controls.Add(this.lblHeaderInfo);
167 | this.Controls.Add(this.lblAbout);
168 | this.Controls.Add(this.panelBottom);
169 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
170 | this.MaximizeBox = false;
171 | this.MinimizeBox = false;
172 | this.Name = "AboutForm";
173 | this.Opacity = 0.95D;
174 | this.ShowIcon = false;
175 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
176 | this.panelBottom.ResumeLayout(false);
177 | this.ResumeLayout(false);
178 | this.PerformLayout();
179 |
180 | }
181 |
182 | #endregion
183 |
184 | private System.Windows.Forms.Panel panelBottom;
185 | private System.Windows.Forms.Button btnWebsite;
186 | private System.Windows.Forms.Button btnDonate;
187 | private System.Windows.Forms.Label lblAbout;
188 | private System.Windows.Forms.Label lblHeaderInfo;
189 | private System.Windows.Forms.LinkLabel linkVersion;
190 | private System.Windows.Forms.Label label2;
191 | private System.Windows.Forms.Label label3;
192 | }
193 | }
--------------------------------------------------------------------------------
/SuperMSConfig/AboutForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Drawing;
4 | using System.Drawing.Drawing2D;
5 | using System.Text.RegularExpressions;
6 | using System.Windows.Forms;
7 |
8 | namespace SuperMSConfig
9 | {
10 | public partial class AboutForm : Form
11 | {
12 | public AboutForm()
13 | {
14 | InitializeComponent();
15 | linkVersion.Text = "Version " + Program.GetCurrentVersionTostring();
16 | SetStyle();
17 | }
18 |
19 | private void SetStyle()
20 | {
21 | // Set default colors
22 | BackColor = Color.FromArgb(243, 243, 243);
23 | panelBottom.BackColor = Color.FromArgb(243, 243, 243);
24 |
25 | this.Paint += new PaintEventHandler(ApplyGradientBackground);
26 | }
27 |
28 | private void btnWebsite_Click(object sender, EventArgs e)
29 | {
30 | Process.Start("https://github.com/builtbybel/SuperMSConfig");
31 | }
32 |
33 | private void btnDonate_Click(object sender, EventArgs e)
34 | {
35 | string paypalUrl = "https://www.paypal.com/donate?hosted_button_id=MY7HX4QLYR4KG";
36 | try
37 | {
38 | Process.Start(new ProcessStartInfo
39 | {
40 | FileName = paypalUrl,
41 | UseShellExecute = true
42 | });
43 | MessageBox.Show("Thank you for your support! 💖", "Thank You!", MessageBoxButtons.OK, MessageBoxIcon.Information);
44 | }
45 | catch (Exception)
46 | {
47 | MessageBox.Show("Unable to open the donation page. Please try again later.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
48 | }
49 | }
50 |
51 | private void linkAbout_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
52 | {
53 | string pattern = @"\((http[^\)]+)\)"; // Find link within parentheses
54 | string text = linkVersion.Text;
55 |
56 | Match match = Regex.Match(text, pattern);
57 | if (match.Success)
58 | {
59 | string link = match.Groups[1].Value;
60 | Clipboard.SetText(link);
61 | MessageBox.Show("Link copied to clipboard.");
62 | }
63 | }
64 |
65 | // AI generated!! Apply gradient to control
66 | private void ApplyGradientBackground(object sender, PaintEventArgs e)
67 | {
68 | Control control = sender as Control;
69 |
70 | if (control != null)
71 | {
72 | // Create rectangle that matches the control's size
73 | Rectangle controlRect = control.ClientRectangle;
74 |
75 | // Create LinearGradientBrush with multiple colorss
76 | using (LinearGradientBrush brush = new LinearGradientBrush(controlRect, Color.Empty, Color.Empty, 45f))
77 | {
78 | // Color blend to create a multi-color gradient
79 | ColorBlend colorBlend = new ColorBlend();
80 | colorBlend.Colors = new Color[]
81 | {
82 | Color.FromArgb(255, 220, 230, 250), // Soft Blue
83 | Color.FromArgb(255, 255, 220, 250), // Soft Pink
84 | Color.FromArgb(255, 200, 220, 240), // Soft Purple
85 | Color.FromArgb(255, 240, 210, 240), // Pastel Pink
86 | Color.FromArgb(255, 250, 230, 240) // Soft Red
87 | };
88 |
89 | // Positions for each color in the gradient
90 | colorBlend.Positions = new float[] { 0f, 0.25f, 0.5f, 0.75f, 1f };
91 | brush.InterpolationColors = colorBlend;
92 |
93 | // Fill the control with the gradient brush
94 | e.Graphics.FillRectangle(brush, controlRect);
95 | }
96 | }
97 | }
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/SuperMSConfig/AboutForm.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | In SuperMSConfig, the Copilot is named Clipilot, honoring Microsoft’s classic Clippy. With a modern touch, Clipilot provides smart support to improve your productivity. It also supports plugins, with several already integrated to enhance your experience.
122 |
123 |
--------------------------------------------------------------------------------
/SuperMSConfig/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/SuperMSConfig/AppIcon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/builtbybel/SuperMSConfig/262fd6129fb414318bc89ad662ed49e579d28c5f/SuperMSConfig/AppIcon.ico
--------------------------------------------------------------------------------
/SuperMSConfig/AppIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/builtbybel/SuperMSConfig/262fd6129fb414318bc89ad662ed49e579d28c5f/SuperMSConfig/AppIcon.png
--------------------------------------------------------------------------------
/SuperMSConfig/BaseHabit.cs:
--------------------------------------------------------------------------------
1 | using System.Threading.Tasks;
2 |
3 | public abstract class BaseHabit
4 | {
5 | public abstract string Name { get; }
6 | public abstract string Description { get; }
7 |
8 | public enum HabitStatus
9 | {
10 | Good,
11 | Bad,
12 | NotConfigured
13 | }
14 |
15 | public virtual HabitStatus Status { get; set; } = HabitStatus.NotConfigured;
16 |
17 | public abstract Task Check();
18 | public abstract Task Fix();
19 | public abstract Task Revert();
20 | public abstract string GetDetails();
21 | }
22 |
--------------------------------------------------------------------------------
/SuperMSConfig/BaseHabitCategory.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace SuperMSConfig
4 | {
5 | public abstract class BaseHabitCategory
6 | {
7 | protected readonly List habits = new List();
8 | public IReadOnlyList Habits => habits.AsReadOnly();
9 |
10 | public abstract string CategoryName { get; }
11 |
12 | public IEnumerable GetHabits()
13 | {
14 | foreach (var habit in habits)
15 | {
16 | yield return habit;
17 | }
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/SuperMSConfig/Config/AppsHabit.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Management.Automation;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace SuperMSConfig
8 | {
9 | public class AppsHabit : BaseHabit
10 | {
11 | public AppsHabit(string appName, string description, Logger logger)
12 | {
13 | Name = appName;
14 | Description = description;
15 | this.logger = logger;
16 | Status = HabitStatus.NotConfigured; // Default status
17 | }
18 |
19 | // Override Name property
20 | public override string Name { get; }
21 |
22 | // Override Description property
23 | public override string Description { get; }
24 |
25 | // Override Status property
26 | public override HabitStatus Status { get; set; }
27 |
28 | private readonly Logger logger;
29 |
30 | // Override Check method
31 | public override async Task Check()
32 | {
33 | try
34 | {
35 | logger.Log($"Checking for {Name}...", Color.Blue);
36 |
37 | Status = await IsAppInstalled(Name) ? HabitStatus.Bad : HabitStatus.Good;
38 | logger.Log(Status == HabitStatus.Bad ? $"{Name} is installed." : $"{Name} is not installed.", Status == HabitStatus.Bad ? Color.Red : Color.Green);
39 | }
40 | catch (Exception ex)
41 | {
42 | logger.Log($"Error during Check: {ex.Message}", Color.Red, ex.StackTrace);
43 | }
44 | }
45 |
46 | // Override Fix method
47 | public override async Task Fix()
48 | {
49 | try
50 | {
51 | if (Status == HabitStatus.Bad)
52 | {
53 | logger.Log($"Uninstalling {Name}...", Color.Blue);
54 | await UninstallApp(Name);
55 | Status = HabitStatus.Good; // Update status after fixing
56 | logger.Log($"{Name} uninstalled successfully.", Color.Green);
57 | }
58 | }
59 | catch (Exception ex)
60 | {
61 | logger.Log($"Error during Fix: {ex.Message}", Color.Red, ex.StackTrace);
62 | }
63 | }
64 |
65 | // Override Revert method
66 | public override async Task Revert()
67 | {
68 | try
69 | {
70 | string message = $"{Name} reinstall not possible. Please use the Microsoft Store";
71 |
72 | MessageBox.Show(message, "Revert Not Possible", MessageBoxButtons.OK, MessageBoxIcon.Warning);
73 | }
74 | catch (Exception ex)
75 | {
76 | logger.Log($"Error during Revert: {ex.Message}", Color.Red, ex.StackTrace);
77 | }
78 | }
79 |
80 | // Override GetDetails method
81 | public override string GetDetails()
82 | {
83 | return $"Application Name: {Name}, Description: {Description}, Status: {Status}";
84 | }
85 |
86 | // Check if an app is installed
87 | private async Task IsAppInstalled(string appName)
88 | {
89 | try
90 | {
91 | using (PowerShell powerShell = PowerShell.Create())
92 | {
93 | powerShell.AddScript($"Get-AppxPackage -Name *{appName}*");
94 | var results = await Task.Run(() => powerShell.Invoke());
95 |
96 | // Results?, so its installed!
97 | return results.Count > 0;
98 | }
99 | }
100 | catch (Exception ex)
101 | {
102 | logger.Log($"Error checking app {appName}: {ex.Message}", Color.Red, ex.StackTrace);
103 | }
104 |
105 | // Not installed
106 | return false;
107 | }
108 |
109 | // Uninstall an appx
110 | private async Task UninstallApp(string appName)
111 | {
112 | try
113 | {
114 | string uninstallCommand = $"Get-AppxPackage *{appName}* | Remove-AppxPackage";
115 |
116 | using (PowerShell powerShell = PowerShell.Create())
117 | {
118 | powerShell.AddScript(uninstallCommand);
119 | await Task.Run(() => powerShell.Invoke());
120 | }
121 | }
122 | catch (Exception ex)
123 | {
124 | logger.Log($"Error uninstalling app {appName}: {ex.Message}", Color.Red, ex.StackTrace);
125 | }
126 | }
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/SuperMSConfig/Config/ServiceHabit.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using System;
3 | using System.Drawing;
4 | using System.ServiceProcess;
5 | using System.Threading.Tasks;
6 |
7 | namespace SuperMSConfig
8 | {
9 | public class ServiceHabit : BaseHabit
10 | {
11 | private readonly string serviceName;
12 | private readonly string description;
13 | private readonly Logger logger;
14 | private readonly int badValue;
15 |
16 | public ServiceHabit(string serviceName, string description, Logger logger, int badValue)
17 | {
18 | this.serviceName = serviceName;
19 | this.description = description;
20 | this.logger = logger;
21 | this.badValue = badValue;
22 | Status = HabitStatus.NotConfigured; // Initial status
23 | }
24 |
25 | public override string Name => $"Service: {serviceName}";
26 | public override string Description => description;
27 |
28 | public override HabitStatus Status { get; set; }
29 |
30 | public override async Task Check()
31 | {
32 | try
33 | {
34 | logger.Log($"Checking service '{serviceName}'...", Color.Blue);
35 |
36 | ServiceControllerStatus status = CheckServiceStatus();
37 | if ((badValue == 1 && status == ServiceControllerStatus.Running) ||
38 | (badValue == 0 && status != ServiceControllerStatus.Running))
39 | {
40 | Status = HabitStatus.Bad;
41 | }
42 | else
43 | {
44 | Status = HabitStatus.Good;
45 | }
46 |
47 | logger.Log($"{serviceName} status: {(Status == HabitStatus.Bad ? "Bad" : "Good")}.", Status == HabitStatus.Bad ? Color.Red : Color.Green);
48 | }
49 | catch (Exception ex)
50 | {
51 | logger.Log($"Error during Check: {ex.Message}", Color.Red, ex.StackTrace);
52 | Status = HabitStatus.NotConfigured; // Set status to NotConfigured in case of error
53 | }
54 | }
55 |
56 | private ServiceControllerStatus CheckServiceStatus()
57 | {
58 | try
59 | {
60 | using (var service = new ServiceController(serviceName))
61 | {
62 | service.Refresh();
63 | return service.Status;
64 | }
65 | }
66 | catch (InvalidOperationException ex)
67 | {
68 | logger.Log($"Service '{serviceName}' not found: {ex.Message}", Color.Red);
69 | Status = HabitStatus.NotConfigured; // Set status to NotConfigured if the service is not found
70 | return ServiceControllerStatus.Stopped;
71 | }
72 | catch (Exception ex)
73 | {
74 | logger.Log($"Error checking status of '{serviceName}': {ex.Message}", Color.Red);
75 | Status = HabitStatus.NotConfigured; // Set status to NotConfigured if there is a general error
76 | return ServiceControllerStatus.Stopped;
77 | }
78 | }
79 |
80 | public override async Task Fix()
81 | {
82 | try
83 | {
84 | if (Status == HabitStatus.Bad)
85 | {
86 | logger.Log($"Stopping service '{serviceName}' and setting to manual...", Color.Blue);
87 | await Task.Run(() =>
88 | {
89 | using (var service = new ServiceController(serviceName))
90 | {
91 | if (service.Status != ServiceControllerStatus.Stopped)
92 | {
93 | service.Stop();
94 | service.WaitForStatus(ServiceControllerStatus.Stopped);
95 | logger.Log($"Service '{serviceName}' stopped successfully.", Color.Green);
96 | }
97 | else
98 | {
99 | logger.Log($"Service '{serviceName}' is already stopped.", Color.Orange);
100 | }
101 |
102 | SetServiceStartType(serviceName, 3); // 3 means Manual
103 | }
104 | });
105 | }
106 | }
107 | catch (InvalidOperationException ex)
108 | {
109 | logger.Log($"Service '{serviceName}' not found or cannot be stopped: {ex.Message}", Color.Red);
110 | }
111 | catch (Exception ex)
112 | {
113 | logger.Log($"Error stopping service '{serviceName}': {ex.Message}", Color.Red);
114 | }
115 | }
116 |
117 | public override async Task Revert()
118 | {
119 | try
120 | {
121 | if (Status == HabitStatus.Good)
122 | {
123 | logger.Log($"Starting service '{serviceName}' and setting to automatic...", Color.Blue);
124 | await Task.Run(() =>
125 | {
126 | using (var service = new ServiceController(serviceName))
127 | {
128 | if (service.Status != ServiceControllerStatus.Running)
129 | {
130 | service.Start();
131 | service.WaitForStatus(ServiceControllerStatus.Running);
132 | logger.Log($"Service '{serviceName}' started successfully.", Color.Green);
133 | }
134 | else
135 | {
136 | logger.Log($"Service '{serviceName}' is already running.", Color.Orange);
137 | }
138 |
139 | SetServiceStartType(serviceName, 2); // 2 means Automatic
140 | }
141 | });
142 | }
143 | }
144 | catch (InvalidOperationException ex)
145 | {
146 | logger.Log($"Service '{serviceName}' not found or cannot be started: {ex.Message}", Color.Red);
147 | }
148 | catch (Exception ex)
149 | {
150 | logger.Log($"Error starting service '{serviceName}': {ex.Message}", Color.Red);
151 | }
152 | }
153 |
154 | private void SetServiceStartType(string serviceName, int startType)
155 | {
156 | try
157 | {
158 | string keyPath = $@"SYSTEM\CurrentControlSet\Services\{serviceName}";
159 | using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, writable: true))
160 | {
161 | if (key != null)
162 | {
163 | key.SetValue("Start", startType, RegistryValueKind.DWord);
164 | logger.Log($"Service '{serviceName}' start type set to {(startType == 2 ? "Automatic" : "Manual")}.", Color.Green);
165 | }
166 | else
167 | {
168 | logger.Log($"Failed to find registry key for service '{serviceName}'.", Color.Red);
169 | }
170 | }
171 | }
172 | catch (Exception ex)
173 | {
174 | logger.Log($"Error setting service start type: {ex.Message}", Color.Red);
175 | }
176 | }
177 |
178 | public override string GetDetails()
179 | {
180 | ServiceControllerStatus status = CheckServiceStatus();
181 | return $"Service Name: {serviceName}, Description: {description}, Status: {status}";
182 | }
183 | }
184 | }
185 |
--------------------------------------------------------------------------------
/SuperMSConfig/Config/StartupHabit.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using System;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 | using System.Drawing;
7 |
8 | namespace SuperMSConfig
9 | {
10 | public class StartupHabit : BaseHabit
11 | {
12 | private readonly string appName;
13 | private readonly string description;
14 | private readonly Logger logger;
15 |
16 | public StartupHabit(string appName, string description, Logger logger)
17 | {
18 | this.appName = appName;
19 | this.description = description ?? "No description provided";
20 | this.logger = logger;
21 | }
22 |
23 | public override string Name => appName;
24 | public override string Description => description;
25 |
26 | public override HabitStatus Status { get; set; } = HabitStatus.NotConfigured;
27 |
28 | public override async Task Check()
29 | {
30 | await Task.Run(() =>
31 | {
32 | try
33 | {
34 | bool foundInHKCU = CheckRegistry(@"Software\Microsoft\Windows\CurrentVersion\Run", Registry.CurrentUser);
35 | bool foundInHKLM = CheckRegistry(@"Software\Microsoft\Windows\CurrentVersion\Run", Registry.LocalMachine);
36 |
37 | if (foundInHKCU || foundInHKLM)
38 | {
39 | Status = HabitStatus.Bad;
40 | }
41 | else
42 | {
43 | Status = HabitStatus.Good;
44 | }
45 |
46 | logger.Log($"Checked startup for '{appName}': {(Status == HabitStatus.Bad ? "Found" : "Not Found")}", Status == HabitStatus.Bad ? Color.Red : Color.Green);
47 | }
48 | catch (Exception ex)
49 | {
50 | logger.Log($"Error during Check for '{appName}': {ex.Message}", Color.Red);
51 | }
52 | });
53 | }
54 |
55 | private bool CheckRegistry(string subKey, RegistryKey baseKey)
56 | {
57 | try
58 | {
59 | using (var key = baseKey.OpenSubKey(subKey))
60 | {
61 | if (key != null)
62 | {
63 | var apps = key.GetValueNames();
64 | return apps.Contains(appName);
65 | }
66 | }
67 | }
68 | catch (Exception ex)
69 | {
70 | logger.Log($"Error during Check for '{appName}': {ex.Message}", Color.Red);
71 | }
72 | return false;
73 | }
74 |
75 | public override async Task Fix()
76 | {
77 | await Task.Run(() =>
78 | {
79 | try
80 | {
81 | bool removedFromHKCU = RemoveFromRegistry(@"Software\Microsoft\Windows\CurrentVersion\Run", Registry.CurrentUser);
82 | bool removedFromHKLM = RemoveFromRegistry(@"Software\Microsoft\Windows\CurrentVersion\Run", Registry.LocalMachine);
83 |
84 | if (removedFromHKCU || removedFromHKLM)
85 | {
86 | Status = HabitStatus.Good;
87 | logger.Log($"Fixed startup for '{appName}': Removed from startup", Color.Green);
88 | }
89 | else
90 | {
91 | logger.Log($"Failed to remove startup entry for '{appName}'", Color.Orange);
92 | }
93 | }
94 | catch (Exception ex)
95 | {
96 | logger.Log($"Error during Fix for '{appName}': {ex.Message}", Color.Red);
97 | }
98 | });
99 | }
100 |
101 | private bool RemoveFromRegistry(string subKey, RegistryKey baseKey)
102 | {
103 | try
104 | {
105 | using (var key = baseKey.OpenSubKey(subKey, true))
106 | {
107 | if (key != null && Status == HabitStatus.Bad)
108 | {
109 | var apps = key.GetValueNames();
110 | if (apps.Contains(appName))
111 | {
112 | key.DeleteValue(appName, false);
113 | return true;
114 | }
115 | }
116 | }
117 | }
118 | catch (Exception ex)
119 | {
120 | logger.Log($"Error removing from registry '{appName}': {ex.Message}", Color.Red);
121 | }
122 | return false;
123 | }
124 |
125 | public override Task Revert()
126 | {
127 | return Task.Run(() =>
128 | {
129 | try
130 | {
131 | string message = "Revert of this action is not possible. Please enable the autostart in the application's settings.";
132 | logger.Log(message, Color.Orange);
133 | MessageBox.Show(message, "Revert Not Possible", MessageBoxButtons.OK, MessageBoxIcon.Warning);
134 | }
135 | catch (Exception ex)
136 | {
137 | logger.Log($"Error during Revert for '{appName}': {ex.Message}", Color.Red);
138 | }
139 | });
140 | }
141 |
142 | public override string GetDetails()
143 | {
144 | return $"App Name: {appName}, Description: {description}";
145 | }
146 | }
147 | }
--------------------------------------------------------------------------------
/SuperMSConfig/GetStartedPage.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SuperMSConfig
2 | {
3 | partial class GetStartedPage
4 | {
5 | ///
6 | /// Erforderliche Designervariable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Verwendete Ressourcen bereinigen.
12 | ///
13 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Vom Komponenten-Designer generierter Code
24 |
25 | ///
26 | /// Erforderliche Methode für die Designerunterstützung.
27 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.btnBack = new System.Windows.Forms.Button();
32 | this.btnNext = new System.Windows.Forms.Button();
33 | this.lblHeader = new System.Windows.Forms.Label();
34 | this.lblDescription = new System.Windows.Forms.Label();
35 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
36 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
37 | this.SuspendLayout();
38 | //
39 | // btnBack
40 | //
41 | this.btnBack.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
42 | this.btnBack.AutoEllipsis = true;
43 | this.btnBack.BackColor = System.Drawing.Color.Transparent;
44 | this.btnBack.Cursor = System.Windows.Forms.Cursors.Hand;
45 | this.btnBack.FlatAppearance.BorderSize = 0;
46 | this.btnBack.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
47 | this.btnBack.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
48 | this.btnBack.Font = new System.Drawing.Font("Segoe MDL2 Assets", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
49 | this.btnBack.ForeColor = System.Drawing.Color.Black;
50 | this.btnBack.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
51 | this.btnBack.Location = new System.Drawing.Point(166, 116);
52 | this.btnBack.Name = "btnBack";
53 | this.btnBack.Size = new System.Drawing.Size(33, 32);
54 | this.btnBack.TabIndex = 286;
55 | this.btnBack.Text = "<";
56 | this.btnBack.UseVisualStyleBackColor = false;
57 | this.btnBack.Click += new System.EventHandler(this.btnBack_Click);
58 | //
59 | // btnNext
60 | //
61 | this.btnNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
62 | this.btnNext.AutoEllipsis = true;
63 | this.btnNext.BackColor = System.Drawing.Color.Transparent;
64 | this.btnNext.Cursor = System.Windows.Forms.Cursors.Hand;
65 | this.btnNext.FlatAppearance.BorderColor = System.Drawing.Color.WhiteSmoke;
66 | this.btnNext.FlatAppearance.BorderSize = 0;
67 | this.btnNext.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gainsboro;
68 | this.btnNext.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
69 | this.btnNext.Font = new System.Drawing.Font("Segoe MDL2 Assets", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
70 | this.btnNext.ForeColor = System.Drawing.Color.Black;
71 | this.btnNext.Location = new System.Drawing.Point(205, 116);
72 | this.btnNext.Name = "btnNext";
73 | this.btnNext.Size = new System.Drawing.Size(33, 32);
74 | this.btnNext.TabIndex = 287;
75 | this.btnNext.Text = ">";
76 | this.btnNext.UseVisualStyleBackColor = false;
77 | this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
78 | //
79 | // lblHeader
80 | //
81 | this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
82 | | System.Windows.Forms.AnchorStyles.Right)));
83 | this.lblHeader.AutoEllipsis = true;
84 | this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Display", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
85 | this.lblHeader.Location = new System.Drawing.Point(46, 9);
86 | this.lblHeader.Name = "lblHeader";
87 | this.lblHeader.Size = new System.Drawing.Size(204, 67);
88 | this.lblHeader.TabIndex = 288;
89 | this.lblHeader.Text = "Welcome to the new era of System Configuration";
90 | //
91 | // lblDescription
92 | //
93 | this.lblDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
94 | | System.Windows.Forms.AnchorStyles.Left)
95 | | System.Windows.Forms.AnchorStyles.Right)));
96 | this.lblDescription.AutoEllipsis = true;
97 | this.lblDescription.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 12F);
98 | this.lblDescription.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
99 | this.lblDescription.Location = new System.Drawing.Point(12, 165);
100 | this.lblDescription.Name = "lblDescription";
101 | this.lblDescription.Size = new System.Drawing.Size(226, 342);
102 | this.lblDescription.TabIndex = 289;
103 | this.lblDescription.Text = "...";
104 | //
105 | // pictureBox1
106 | //
107 | this.pictureBox1.Image = global::SuperMSConfig.Properties.Resources.assetCopilotBW;
108 | this.pictureBox1.Location = new System.Drawing.Point(3, 9);
109 | this.pictureBox1.Name = "pictureBox1";
110 | this.pictureBox1.Size = new System.Drawing.Size(37, 35);
111 | this.pictureBox1.TabIndex = 290;
112 | this.pictureBox1.TabStop = false;
113 | //
114 | // GetStartedPage
115 | //
116 | this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
117 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
118 | this.BackColor = System.Drawing.Color.White;
119 | this.Controls.Add(this.pictureBox1);
120 | this.Controls.Add(this.lblDescription);
121 | this.Controls.Add(this.lblHeader);
122 | this.Controls.Add(this.btnNext);
123 | this.Controls.Add(this.btnBack);
124 | this.Name = "GetStartedPage";
125 | this.Size = new System.Drawing.Size(253, 531);
126 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
127 | this.ResumeLayout(false);
128 |
129 | }
130 |
131 | #endregion
132 | private System.Windows.Forms.Button btnBack;
133 | private System.Windows.Forms.Button btnNext;
134 | private System.Windows.Forms.Label lblHeader;
135 | private System.Windows.Forms.Label lblDescription;
136 | private System.Windows.Forms.PictureBox pictureBox1;
137 | }
138 | }
139 |
--------------------------------------------------------------------------------
/SuperMSConfig/GetStartedPage.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Windows.Forms;
4 |
5 | namespace SuperMSConfig
6 | {
7 | public partial class GetStartedPage : UserControl
8 | {
9 | private int currentStep = 0;
10 |
11 | private string[] stepsDescriptions = new[]
12 | {
13 | "SuperMSConfig revisits the out-of-box setup, letting you fine-tune the Windows 11 post-installation experience. Whether it’s disabling intrusive features or optimizing services, it provides full control over how your system behaves immediately after setup. " +
14 | "\n\nGot questions? Just click the Copilot icon!",
15 |
16 | "The 'OOBE' scan reviews all default system configuration categories, as well as over 10 additional areas for potential misconfigurations." +
17 | "You can personalize the scan by selecting specific categories using the dropdown. " +
18 | "\n\nClick 'Check' to begin the scan.",
19 |
20 | "After a successful scan, you can view the results directly. Good configurations are grayed out," +
21 | " non-configured settings are highlighted in orange, and bad configurations are marked in red. " +
22 | "Clicking on an entry also updates the status in the three small radio buttons at the bottom left.",
23 |
24 | "Besides the native scan, you can map any other tweaks you want. " +
25 | "Whether it's a recommended config from Neowin or Deskmodder, " +
26 | "or from an app like Bloatynosy, the magic lies in '... Settings > Load config from source'." +
27 | "For more details on how it works and to add more tweaks, check the 'source' folder of the app."
28 | };
29 |
30 | private string[] stepsHeader = new[]
31 | {
32 | "Welcome",
33 | "Step 1: Let's customize your experience",
34 | "Step 2: Review the results",
35 | "Step 3: Load additional tweaks"
36 | };
37 |
38 | public GetStartedPage()
39 | {
40 | InitializeComponent();
41 | SetStyle();
42 | UpdateStep();
43 | BackColor = Color.FromArgb(249, 249, 251);
44 | }
45 |
46 | private void SetStyle()
47 | {
48 | // Segoe MDL2 Assets
49 | btnBack.Text = "\uE76B";
50 | btnNext.Text = "\uE76C";
51 | }
52 |
53 | private void UpdateStep()
54 | {
55 | lblDescription.Text = stepsDescriptions[currentStep];
56 | lblHeader.Text = stepsHeader[currentStep];
57 | btnBack.Enabled = currentStep > 0;
58 | btnNext.Text = currentStep < stepsDescriptions.Length - 1 ? "\uE76C" : "\uE73E";
59 | }
60 |
61 | private void btnBack_Click(object sender, EventArgs e)
62 | {
63 | if (currentStep > 0)
64 | {
65 | currentStep--;
66 | UpdateStep();
67 | }
68 | }
69 |
70 | private void btnNext_Click(object sender, EventArgs e)
71 | {
72 | if (currentStep < stepsDescriptions.Length - 1)
73 | {
74 | currentStep++;
75 | UpdateStep();
76 | }
77 | else
78 | {
79 | MessageBox.Show("Thanks for taking the time to get to know SuperMSConfig! Your system's new configuration awaits.");
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/SuperMSConfig/GetStartedPage.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/SuperMSConfig/HabitChecker.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Drawing;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using static BaseHabit;
6 |
7 | namespace SuperMSConfig
8 | {
9 | public class HabitChecker
10 | {
11 | private readonly List habitCategories = new List();
12 | private readonly Logger logger;
13 |
14 | public HabitChecker(Logger logger)
15 | {
16 | this.logger = logger;
17 |
18 | // Add habit categories
19 | habitCategories.Add(new AdsHabits(logger));
20 | habitCategories.Add(new AIHabits(logger));
21 | habitCategories.Add(new PrivacyHabits(logger));
22 | habitCategories.Add(new SecurityHabits(logger));
23 | habitCategories.Add(new ServiceHabits(logger));
24 | habitCategories.Add(new AppsHabits(logger));
25 | habitCategories.Add(new StartupHabits(logger));
26 | habitCategories.Add(new SystemHabits(logger));
27 | habitCategories.Add(new BrowserHabits(logger));
28 | habitCategories.Add(new GamingHabits(logger));
29 | }
30 |
31 | public async Task> GetAllHabits()
32 | {
33 | var habits = new List();
34 |
35 | foreach (var category in habitCategories)
36 | {
37 | habits.AddRange(category.GetHabits());
38 | }
39 |
40 | return habits;
41 | }
42 |
43 | public async Task CheckHabit(BaseHabit habit)
44 | {
45 | await habit.Check();
46 | logger.Log($"{habit.Name} - {habit.Description}: {habit.Status}",
47 | GetColorForStatus(habit.Status),
48 | habit.GetDetails());
49 | }
50 |
51 | // Get color based on HabitStatus
52 | public Color GetColorForStatus(HabitStatus status)
53 | {
54 | switch (status)
55 | {
56 | case HabitStatus.Good:
57 | return Color.DimGray;
58 |
59 | case HabitStatus.Bad:
60 | return Color.Crimson;
61 |
62 | case HabitStatus.NotConfigured:
63 | return Color.DarkOrange;
64 |
65 | default:
66 | return Color.Black; // Fallback color if status is unknown
67 | }
68 | }
69 |
70 | // Get all category names and add to dropdown list in UI
71 | public List GetCategoryNames()
72 | {
73 | return habitCategories
74 | .Select(c => c.CategoryName)
75 | .Distinct()
76 | .ToList();
77 | }
78 |
79 | public async Task> GetHabitsByCategory(string categoryName)
80 | {
81 | var category = habitCategories.FirstOrDefault(c => c.CategoryName == categoryName);
82 |
83 | if (category != null)
84 | {
85 | return category.GetHabits().ToList();
86 | }
87 |
88 | return new List();
89 | }
90 | }
91 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/AIHabits.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 |
5 | public class AIHabits : BaseHabitCategory
6 | {
7 | public override string CategoryName => "AI";
8 | private readonly Logger logger;
9 |
10 | public AIHabits(Logger logger)
11 | {
12 | this.logger = logger;
13 |
14 | // Copilot Taskbar
15 | habits.Add(new SuperMSConfig.RegistryHabit(
16 | RegistryHive.CurrentUser,
17 | @"Software\Policies\Microsoft\Windows\WindowsCopilot",
18 | "TurnOffWindowsCopilot",
19 | 0,
20 | 1,
21 | "Windows AI",
22 | "DWORD",
23 | logger));
24 |
25 | // Recall Experience
26 | habits.Add(new SuperMSConfig.RegistryHabit(
27 | RegistryHive.CurrentUser,
28 | @"Software\Policies\Microsoft\Windows\WindowsAI",
29 | "DisableAIDataAnalysis",
30 | 0,
31 | 1,
32 | "Windows AI (Recall > Current user)",
33 | "DWORD", logger));
34 | habits.Add(new SuperMSConfig.RegistryHabit(
35 | RegistryHive.LocalMachine,
36 | @"Software\Policies\Microsoft\Windows\WindowsAI",
37 | "DisableAIDataAnalysis",
38 | 0,
39 | 1,
40 | "Windows AI (Recall > All users)",
41 | "DWORD",
42 | logger));
43 | }
44 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/AdsHabits.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 | using System.Collections.Generic;
5 |
6 | public class AdsHabits : BaseHabitCategory
7 | {
8 | private readonly Logger logger;
9 |
10 | public override string CategoryName => "Ads";
11 |
12 | public AdsHabits(Logger logger)
13 | {
14 | // this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
15 | // just assign our logger to the field if it's null
16 | this.logger = logger;
17 |
18 | if (logger == null)
19 | {
20 | Console.WriteLine("Warning: Logger is null. Logging will be disabled.");
21 | }
22 |
23 | habits.Add(new SuperMSConfig.RegistryHabit(
24 | RegistryHive.CurrentUser,
25 | @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced",
26 | "ShowSyncProviderNotifications",
27 | 1,
28 | 0,
29 | "Disable Windows 11 File Explorer Ads",
30 | "DWORD",
31 | logger));
32 |
33 | habits.Add(new SuperMSConfig.RegistryHabit(
34 | RegistryHive.CurrentUser,
35 | @"Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement",
36 | "ScoobeSystemSettingEnabled",
37 | 1,
38 | 0,
39 | "Disable Windows 11 FinishSetup Ads",
40 | "DWORD",
41 | logger));
42 |
43 | habits.Add(new SuperMSConfig.RegistryHabit(
44 | RegistryHive.CurrentUser,
45 | @"Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager",
46 | "RotatingLockScreenOverlayEnabled",
47 | 1,
48 | 0,
49 | "Disable Windows 11 LockScreen Ads",
50 | "DWORD",
51 | logger));
52 |
53 | habits.Add(new SuperMSConfig.RegistryHabit(
54 | RegistryHive.CurrentUser,
55 | @"Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager",
56 | "SubscribedContent-338387Enabled",
57 | 1,
58 | 0,
59 | "Disable Windows 11 LockScreen Ads",
60 | "DWORD",
61 | logger));
62 |
63 | habits.Add(new SuperMSConfig.RegistryHabit(
64 | RegistryHive.CurrentUser,
65 | @"Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo",
66 | "Enabled",
67 | 1,
68 | 0,
69 | "Disable Windows 11 Personalized Ads",
70 | "DWORD",
71 | logger));
72 |
73 | habits.Add(new SuperMSConfig.RegistryHabit(
74 | RegistryHive.CurrentUser,
75 | @"Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager",
76 | "SubscribedContent-338393Enabled",
77 | 1,
78 | 0,
79 | "Disable Windows 11 Settings Ads",
80 | "DWORD",
81 | logger));
82 |
83 | habits.Add(new SuperMSConfig.RegistryHabit(
84 | RegistryHive.CurrentUser,
85 | @"Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager",
86 | "SubscribedContent-353694Enabled",
87 | 1,
88 | 0,
89 | "Disable Windows 11 Settings Ads",
90 | "DWORD",
91 | logger));
92 |
93 | habits.Add(new SuperMSConfig.RegistryHabit(
94 | RegistryHive.CurrentUser,
95 | @"Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager",
96 | "SubscribedContent-353696Enabled",
97 | 1,
98 | 0,
99 | "Disable Windows 11 Settings Ads",
100 | "DWORD",
101 | logger));
102 |
103 | habits.Add(new SuperMSConfig.RegistryHabit(
104 | RegistryHive.CurrentUser,
105 | @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced",
106 | "Start_IrisRecommendations",
107 | 1,
108 | 0,
109 | "Disable Windows 11 Startmenu Ads",
110 | "DWORD",
111 | logger));
112 |
113 | habits.Add(new SuperMSConfig.RegistryHabit(
114 | RegistryHive.CurrentUser,
115 | @"Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager",
116 | "SubscribedContent-338389Enabled",
117 | 1,
118 | 0,
119 | "Disable Windows Tips and Suggestions",
120 | "DWORD",
121 | logger));
122 |
123 | habits.Add(new SuperMSConfig.RegistryHabit(
124 | RegistryHive.CurrentUser,
125 | @"Software\Microsoft\Windows\CurrentVersion\Privacy",
126 | "TailoredExperiencesWithDiagnosticDataEnabled",
127 | 1,
128 | 0,
129 | "Disable Tailored Experiences",
130 | "DWORD",
131 | logger));
132 |
133 | habits.Add(new SuperMSConfig.RegistryHabit(
134 | RegistryHive.CurrentUser,
135 | @"Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager",
136 | "SubscribedContent-310093Enabled",
137 | 1,
138 | 0,
139 | "Disable Windows 11 Welcome Experience Ads",
140 | "DWORD",
141 | logger));
142 | }
143 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/AppsHabits.cs:
--------------------------------------------------------------------------------
1 | using SuperMSConfig;
2 | using System;
3 |
4 | public class AppsHabits : BaseHabitCategory
5 | {
6 | private readonly Logger logger;
7 |
8 | public override string CategoryName => "Apps / Bloatware";
9 |
10 | public AppsHabits(Logger logger)
11 | {
12 | this.logger = logger;
13 |
14 | // Bloatware entries
15 | habits.Add(new AppsHabit("Microsoft.BingWeather", "Remove Microsoft Bing Weather App", logger));
16 | habits.Add(new AppsHabit("Microsoft.XboxApp", "Remove Xbox App", logger));
17 | habits.Add(new AppsHabit("Microsoft.OfficeHub", "Remove Office Hub", logger));
18 | habits.Add(new AppsHabit("Microsoft.SkypeApp", "Remove Skype", logger));
19 | habits.Add(new AppsHabit("Microsoft.MixedReality.Portal", "Remove Mixed Reality Portal", logger));
20 | habits.Add(new AppsHabit("Microsoft.WindowsPhone", "Remove Windows Phone App", logger));
21 | habits.Add(new AppsHabit("Microsoft.3DBuilder", "Remove 3D Builder", logger));
22 | habits.Add(new AppsHabit("Microsoft.BingFinance", "Remove Bing Finance", logger));
23 | habits.Add(new AppsHabit("Microsoft.BingNews", "Remove Bing News", logger));
24 | habits.Add(new AppsHabit("Microsoft.BingSports", "Remove Bing Sports", logger));
25 | habits.Add(new AppsHabit("Microsoft.BingTravel", "Remove Bing Travel", logger));
26 | habits.Add(new AppsHabit("Microsoft.GetHelp", "Remove Get Help App", logger));
27 | habits.Add(new AppsHabit("Microsoft.GetStarted", "Remove Get Started App", logger));
28 | // Additional bloatware entries
29 | habits.Add(new AppsHabit("Microsoft.MicrosoftSolitaireCollection", "Remove Microsoft Solitaire Collection", logger));
30 | habits.Add(new AppsHabit("Microsoft.MicrosoftStickyNotes", "Remove Microsoft Sticky Notes", logger));
31 | habits.Add(new AppsHabit("Microsoft.MicrosoftToDo", "Remove Microsoft To Do", logger));
32 | habits.Add(new AppsHabit("Microsoft.MicrosoftPhotos", "Remove Microsoft Photos", logger));
33 | habits.Add(new AppsHabit("Microsoft.MicrosoftNews", "Remove Microsoft News", logger));
34 | habits.Add(new AppsHabit("Facebook", "Remove Facebook", logger));
35 | habits.Add(new AppsHabit("Instagram", "Remove Instagram", logger));
36 | habits.Add(new AppsHabit("Twitter.Twitter", "Remove Twitter", logger));
37 | habits.Add(new AppsHabit("King.CandyCrushSaga", "Remove Candy Crush Saga", logger));
38 | habits.Add(new AppsHabit("King.CandyCrushSodaSaga", "Remove Candy Crush Soda Saga", logger));
39 | habits.Add(new AppsHabit("King.CandyCrushFriendsSaga", "Remove Candy Crush Friends Saga", logger));
40 | }
41 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/GamingHabits.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 |
5 | public class GamingHabits : BaseHabitCategory
6 | {
7 | private readonly Logger logger;
8 |
9 | public override string CategoryName => "Gaming";
10 |
11 | public GamingHabits(Logger logger)
12 | {
13 | this.logger = logger;
14 |
15 | // Disable VBS (Virtualization-Based Security)
16 | habits.Add(new SuperMSConfig.RegistryHabit(
17 | RegistryHive.LocalMachine,
18 | @"SYSTEM\CurrentControlSet\Control\DeviceGuard",
19 | "EnableVirtualizationBasedSecurity",
20 | 1, // Bad value (enabled)
21 | 0, // Good value (disabled)
22 | "Disable Virtualization-Based Security " +
23 | "(This feature is known for hogging system resources." +
24 | "Disabling it frees up CPU cycles and ensures your games run smoother, " +
25 | "with less overhead dragging down performance making your gaming experience feel sluggish)",
26 | "DWORD",
27 | logger
28 | ));
29 |
30 | // Disable Core Isolation / Memory Integrity
31 | habits.Add(new SuperMSConfig.RegistryHabit(
32 | RegistryHive.LocalMachine,
33 | @"SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity",
34 | "Enabled",
35 | 1, // Bad value (enabled)
36 | 0, // Good value (disabled)
37 | "Disable Memory Integrity for better gaming FPS (Core Isolation)",
38 | "DWORD", logger
39 | ));
40 | }
41 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/MSEdgeHabits.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 |
5 | public class BrowserHabits : BaseHabitCategory
6 | {
7 | private readonly Logger logger;
8 |
9 | public override string CategoryName => "MS Edge ";
10 |
11 | public BrowserHabits(Logger logger)
12 | {
13 | this.logger = logger;
14 |
15 | // Disable Password Saving
16 | habits.Add(new SuperMSConfig.RegistryHabit(
17 | RegistryHive.LocalMachine,
18 | @"Software\Policies\Microsoft\Edge",
19 | "PasswordManagerEnabled",
20 | 1, // Bad value (password saving enabled)
21 | 0, // Good value (password saving disabled)
22 | CategoryName + "Disable password saving for better security",
23 | "DWORD",
24 | logger));
25 |
26 | // Disable Auto-Complete
27 | habits.Add(new SuperMSConfig.RegistryHabit(
28 | RegistryHive.LocalMachine,
29 | @"Software\Policies\Microsoft\Edge",
30 | "AutofillAddressEnabled",
31 | 1, // Bad value (auto-fill enabled)
32 | 0, // Good value (auto-fill disabled)
33 | CategoryName + "Disable auto-fill for better privacy",
34 | "DWORD",
35 | logger));
36 |
37 | // Enable Safe Browsing
38 | habits.Add(new SuperMSConfig.RegistryHabit(
39 | RegistryHive.LocalMachine,
40 | @"Software\Policies\Microsoft\Edge",
41 | "SafeBrowsingEnabled",
42 | 0, // Bad value (safe browsing disabled)
43 | 1, // Good value (safe browsing enabled)
44 | CategoryName + "Enable Safe Browsing to protect against harmful sites",
45 | "DWORD",
46 | logger));
47 |
48 | // Block Pop-ups
49 | habits.Add(new SuperMSConfig.RegistryHabit(
50 | RegistryHive.LocalMachine,
51 | @"Software\Policies\Microsoft\Edge",
52 | "PopupsAllowed",
53 | 1, // Bad value (pop-ups allowed)
54 | 0, // Good value (pop-ups blocked)
55 | CategoryName + "Block pop-ups to avoid unwanted interruptions",
56 | "DWORD",
57 | logger));
58 |
59 | // Enable Do Not Track
60 | habits.Add(new SuperMSConfig.RegistryHabit(
61 | RegistryHive.LocalMachine,
62 | @"Software\Policies\Microsoft\Edge",
63 | "DoNotTrackEnabled",
64 | 0, // Bad value (Do Not Track disabled)
65 | 1, // Good value (Do Not Track enabled)
66 | CategoryName + "Enable Do Not Track to enhance privacy",
67 | "DWORD",
68 | logger));
69 |
70 | // Disable Autofill Credit Card
71 | habits.Add(new SuperMSConfig.RegistryHabit(
72 | RegistryHive.LocalMachine,
73 | @"Software\Policies\Microsoft\Edge",
74 | "AutofillCreditCardEnabled",
75 | 1, // Bad value (credit card autofill enabled)
76 | 0, // Good value (credit card autofill disabled)
77 | CategoryName + "Disable autofill for credit cards for better security",
78 | "DWORD",
79 | logger));
80 |
81 | // Disable Browser Sign-in
82 | habits.Add(new SuperMSConfig.RegistryHabit(
83 | RegistryHive.LocalMachine,
84 | @"Software\Policies\Microsoft\Edge",
85 | "BrowserSignin",
86 | 1, // Bad value (sign-in enabled)
87 | 0, // Good value (sign-in disabled)
88 | CategoryName + "Disable browser sign-in to prevent account syncing",
89 | "DWORD",
90 | logger));
91 |
92 | // Disable Default Browser Setting
93 | habits.Add(new SuperMSConfig.RegistryHabit(
94 | RegistryHive.LocalMachine,
95 | @"Software\Policies\Microsoft\Edge",
96 | "DefaultBrowserSettingEnabled",
97 | 1, // Bad value (default browser setting enabled)
98 | 0, // Good value (default browser setting disabled)
99 | CategoryName + "Disable default browser setting",
100 | "DWORD",
101 | logger));
102 |
103 | // Disable Edge Collections
104 | habits.Add(new SuperMSConfig.RegistryHabit(
105 | RegistryHive.LocalMachine,
106 | @"Software\Policies\Microsoft\Edge",
107 | "EdgeCollectionsEnabled",
108 | 1, // Bad value (collections enabled)
109 | 0, // Good value (collections disabled)
110 | CategoryName + "Disable Edge Collections",
111 | "DWORD",
112 | logger));
113 |
114 | // Disable Edge Shopping Assistant
115 | habits.Add(new SuperMSConfig.RegistryHabit(
116 | RegistryHive.LocalMachine,
117 | @"Software\Policies\Microsoft\Edge",
118 | "EdgeShoppingAssistantEnabled",
119 | 1, // Bad value (shopping assistant enabled)
120 | 0, // Good value (shopping assistant disabled)
121 | CategoryName + "Disable Edge Shopping Assistant",
122 | "DWORD",
123 | logger));
124 |
125 | // Disable Gamer Mode
126 | habits.Add(new SuperMSConfig.RegistryHabit(
127 | RegistryHive.LocalMachine,
128 | @"Software\Policies\Microsoft\Edge",
129 | "GamerModeEnabled",
130 | 1, // Bad value (gamer mode enabled)
131 | 0, // Good value (gamer mode disabled)
132 | CategoryName + "Disable Gamer Mode",
133 | "DWORD",
134 | logger));
135 |
136 | // Disable First Run Experience
137 | habits.Add(new SuperMSConfig.RegistryHabit(
138 | RegistryHive.LocalMachine,
139 | @"Software\Policies\Microsoft\Edge",
140 | "HideFirstRunExperience",
141 | 0, // Bad value (first run experience enabled)
142 | 1, // Good value (first run experience disabled)
143 | CategoryName + "Hide First Run Experience",
144 | "DWORD",
145 | logger));
146 |
147 | // Disable Import on Each Launch
148 | habits.Add(new SuperMSConfig.RegistryHabit(
149 | RegistryHive.LocalMachine,
150 | @"Software\Policies\Microsoft\Edge",
151 | "ImportOnEachLaunch",
152 | 1, // Bad value (import on each launch enabled)
153 | 0, // Good value (import on each launch disabled)
154 | CategoryName + "Disable import on each launch",
155 | "DWORD",
156 | logger));
157 |
158 | // "Don't Show Sponsored links in new tab page
159 | habits.Add(new SuperMSConfig.RegistryHabit(
160 | RegistryHive.LocalMachine,
161 | @"Software\Policies\Microsoft\Edge",
162 | "NewTabPageHideDefaultTopSites",
163 | 0, // Bad value (top sites visible)
164 | 1, // Good value (top sites hidden)
165 | CategoryName + "Don't Show Sponsored links in new tab page",
166 | "DWORD",
167 | logger));
168 |
169 | // Disable New Tab Page Quick Links
170 | habits.Add(new SuperMSConfig.RegistryHabit(
171 | RegistryHive.LocalMachine,
172 | @"Software\Policies\Microsoft\Edge",
173 | "NewTabPageQuickLinksEnabled",
174 | 1, // Bad value (quick links enabled)
175 | 0, // Good value (quick links disabled)
176 | CategoryName + "Disable quick links on new tab page",
177 | "DWORD",
178 | logger));
179 |
180 | // Disable Startup Boost
181 | habits.Add(new SuperMSConfig.RegistryHabit(
182 | RegistryHive.LocalMachine,
183 | @"Software\Policies\Microsoft\Edge",
184 | "StartupBoostEnabled",
185 | 1, // Bad value (startup boost enabled)
186 | 0, // Good value (startup boost disabled)
187 | CategoryName + "Disable startup boost",
188 | "DWORD",
189 | logger));
190 |
191 | // Disable User Feedback
192 | habits.Add(new SuperMSConfig.RegistryHabit(
193 | RegistryHive.LocalMachine,
194 | @"Software\Policies\Microsoft\Edge",
195 | "UserFeedbackAllowed",
196 | 1, // Bad value (feedback allowed)
197 | 0, // Good value (feedback disabled)
198 | CategoryName + "Disable user feedback",
199 | "DWORD",
200 | logger));
201 | }
202 | }
203 |
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/PrivacyHabits.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 |
5 | public class PrivacyHabits : BaseHabitCategory
6 | {
7 | private readonly Logger logger;
8 |
9 | public override string CategoryName => "Privacy";
10 |
11 | public PrivacyHabits(Logger logger)
12 | {
13 | this.logger = logger;
14 |
15 | // Disable diagnostic data collection
16 | habits.Add(new SuperMSConfig.RegistryHabit(
17 | RegistryHive.LocalMachine,
18 | @"Software\Policies\Microsoft\Windows\DataCollection",
19 | "AllowTelemetry",
20 | 2, // Bad Enhanced data collection (full)
21 | 1, // Recommended for home users / Minimal data collection (basic)
22 | "Enable basic telemetry data collection for Home/Pro editions",
23 | "DWORD",
24 | logger));
25 |
26 | habits.Add(new SuperMSConfig.RegistryHabit(
27 | RegistryHive.LocalMachine,
28 | @"Software\Policies\Microsoft\Windows\DataCollection",
29 | "AllowTelemetry",
30 | 1, // Bad value (enabled)
31 | 0, // Disable telemetry (only for Enterprise, Education, Server)
32 | "Disable telemetry data collection for enterprise-level privacy",
33 | "DWORD",
34 | logger));
35 |
36 | // Disable activity history
37 | habits.Add(new SuperMSConfig.RegistryHabit(
38 | RegistryHive.CurrentUser,
39 | @"Software\Microsoft\Windows\CurrentVersion\Privacy",
40 | "ActivityHistoryEnabled",
41 | 1, // Bad value (enabled)
42 | 0, // Good value (disabled)
43 | "Disable activity history (prevents Windows from tracking and storing your activity)",
44 | "DWORD",
45 | logger));
46 |
47 | // Disable location tracking
48 | habits.Add(new SuperMSConfig.RegistryHabit(
49 | RegistryHive.CurrentUser,
50 | @"Software\Microsoft\Windows\CurrentVersion\LocationAndSensors",
51 | "LocationEnabled",
52 | 1, // Bad value (enabled)
53 | 0, // Good value (disabled)
54 | "Disable location tracking (prevents Windows from accessing your location)",
55 | "DWORD",
56 | logger));
57 |
58 | // Disable background apps
59 | habits.Add(new SuperMSConfig.RegistryHabit(
60 | RegistryHive.CurrentUser,
61 | @"Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications",
62 | "Disabled",
63 | 1, // Bad value (enabled)
64 | 0, // Good value (disabled)
65 | "Disable background apps (prevents apps from running in the background)",
66 | "DWORD",
67 | logger));
68 |
69 | // Disable automatic app updates
70 | habits.Add(new SuperMSConfig.RegistryHabit(
71 | RegistryHive.CurrentUser,
72 | @"Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate",
73 | "AutoDownload",
74 | 1, // Bad value (enabled)
75 | 0, // Good value (disabled)
76 | "Disable automatic app updates (prevents apps from updating automatically)",
77 | "DWORD",
78 | logger));
79 |
80 | // Disable sending of feedback and error reports
81 | habits.Add(new SuperMSConfig.RegistryHabit(
82 | RegistryHive.CurrentUser,
83 | @"Software\Microsoft\Windows\CurrentVersion\Feedback",
84 | "EnableFeedback",
85 | 0, // Bad value (enabled)
86 | 1, // Good value (disabled)
87 | "Disable sending of feedback and error reports (prevents sending feedback to Microsoft)",
88 | "DWORD",
89 | logger));
90 |
91 | // Disable camera access
92 | habits.Add(new SuperMSConfig.RegistryHabit(
93 | RegistryHive.CurrentUser,
94 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\camera",
95 | "Value",
96 | "Allow", // Bad value (Allow)
97 | "Deny", // Good value (Deny)
98 | "Disable camera access (prevents apps from using your camera)",
99 | "STRING",
100 | logger));
101 |
102 | // Disable microphone access
103 | habits.Add(new SuperMSConfig.RegistryHabit(
104 | RegistryHive.CurrentUser,
105 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\microphone",
106 | "Value",
107 | "Allow", // Bad value (Allow)
108 | "Deny", // Good value (Deny)
109 | "Disable microphone access (prevents apps from using your microphone)",
110 | "STRING",
111 | logger));
112 |
113 | // Disable location access
114 | habits.Add(new SuperMSConfig.RegistryHabit(
115 | RegistryHive.CurrentUser,
116 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location",
117 | "Value",
118 | "Allow", // Bad value (Allow)
119 | "Deny", // Good value (Deny)
120 | "Disable location access (prevents apps from using your location)",
121 | "STRING",
122 | logger));
123 |
124 | // Disable contacts access
125 | habits.Add(new SuperMSConfig.RegistryHabit(
126 | RegistryHive.CurrentUser,
127 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\contacts",
128 | "Value",
129 | "Allow", // Bad value (Allow)
130 | "Deny", // Good value (Deny)
131 | "Disable contacts access (prevents apps from using your contacts)",
132 | "STRING",
133 | logger));
134 |
135 | // Disable calendar access
136 | habits.Add(new SuperMSConfig.RegistryHabit(
137 | RegistryHive.CurrentUser,
138 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\calendar",
139 | "Value",
140 | "Allow", // Bad value (Allow)
141 | "Deny", // Good value (Deny)
142 | "Disable calendar access (prevents apps from accessing your calendar)",
143 | "STRING",
144 | logger));
145 |
146 | // Disable call history access
147 | habits.Add(new SuperMSConfig.RegistryHabit(
148 | RegistryHive.CurrentUser,
149 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\callHistory",
150 | "Value",
151 | "Allow", // Bad value (Allow)
152 | "Deny", // Good value (Deny)
153 | "Disable call history access (prevents apps from accessing your call history)",
154 | "STRING",
155 | logger));
156 |
157 | // Disable email access
158 | habits.Add(new SuperMSConfig.RegistryHabit(
159 | RegistryHive.CurrentUser,
160 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\email",
161 | "Value",
162 | "Allow", // Bad value (Allow)
163 | "Deny", // Good value (Deny)
164 | "Disable email access (prevents apps from accessing your email)",
165 | "STRING",
166 | logger));
167 |
168 | // Disable messaging access
169 | habits.Add(new SuperMSConfig.RegistryHabit(
170 | RegistryHive.CurrentUser,
171 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\messaging",
172 | "Value",
173 | "Allow", // Bad value (Allow)
174 | "Deny", // Good value (Deny)
175 | "Disable messaging access (prevents apps from accessing your messages)",
176 | "STRING",
177 | logger));
178 |
179 | // Disable radio access
180 | habits.Add(new SuperMSConfig.RegistryHabit(
181 | RegistryHive.CurrentUser,
182 | @"Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\radios",
183 | "Value",
184 | "Allow", // Bad value (Allow)
185 | "Deny", // Good value (Deny)
186 | "Disable radio access (prevents apps from accessing your radios)",
187 | "STRING",
188 | logger));
189 | }
190 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/SecurityHabits.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 |
5 | public class SecurityHabits : BaseHabitCategory
6 | {
7 | private readonly Logger logger;
8 |
9 | public override string CategoryName => "Security";
10 |
11 | public SecurityHabits(Logger logger)
12 | {
13 | this.logger = logger;
14 |
15 | // Enable Windows Defender
16 | habits.Add(new SuperMSConfig.RegistryHabit(
17 | RegistryHive.LocalMachine,
18 | @"Software\Policies\Microsoft\Windows Defender",
19 | "DisableAntiSpyware",
20 | 1, // Bad value (disabled)
21 | 0, // Good value (enabled)
22 | "Enable Windows Defender (prevents spyware and malware)",
23 | "DWORD",
24 | logger));
25 |
26 | // Enable User Account Control (UAC)
27 | habits.Add(new SuperMSConfig.RegistryHabit(
28 | RegistryHive.LocalMachine,
29 | @"Software\Policies\Microsoft\Windows\System",
30 | "EnableLUA",
31 | 0, // Bad value (disabled)
32 | 1, // Good value (enabled)
33 | "Enable User Account Control (UAC) (prompts for administrative actions)",
34 | "DWORD",
35 | logger));
36 |
37 | // Disable SMBv1
38 | habits.Add(new SuperMSConfig.RegistryHabit(
39 | RegistryHive.LocalMachine,
40 | @"System\CurrentControlSet\Services\LanmanServer\Parameters",
41 | "SMB1",
42 | 1, // Bad value (enabled)
43 | 0, // Good value (disabled)
44 | "Disable SMBv1 (prevents exploitation of old vulnerabilities)",
45 | "DWORD",
46 | logger));
47 |
48 | // Enable Windows Defender Real-Time Protection
49 | habits.Add(new SuperMSConfig.RegistryHabit(
50 | RegistryHive.LocalMachine,
51 | @"Software\Policies\Microsoft\Windows Defender\Real-Time Protection",
52 | "DisableRealtimeMonitoring",
53 | 1, // Bad value (disabled)
54 | 0, // Good value (enabled)
55 | "Enable Windows Defender Real-Time Protection (scans for threats in real time)",
56 | "DWORD",
57 | logger));
58 |
59 | // Disable Windows Script Host
60 | habits.Add(new SuperMSConfig.RegistryHabit(
61 | RegistryHive.CurrentUser,
62 | @"Software\Microsoft\Windows Script Host\Settings",
63 | "Enabled",
64 | 1, // Bad value (enabled)
65 | 0, // Good value (disabled)
66 | "Disable Windows Script Host (prevents malicious scripts)",
67 | "DWORD",
68 | logger));
69 |
70 | // Enable Secure Boot
71 | habits.Add(new SuperMSConfig.RegistryHabit(
72 | RegistryHive.LocalMachine,
73 | @"System\CurrentControlSet\Control\SecureBoot\State",
74 | "UEFISecureBootEnabled",
75 | 0, // Bad value (disabled)
76 | 1, // Good value (enabled)
77 | "Enable Secure Boot (prevents unauthorized OS and bootloaders)",
78 | "DWORD",
79 | logger));
80 |
81 | // Enable Firewall
82 | habits.Add(new SuperMSConfig.RegistryHabit(
83 | RegistryHive.LocalMachine,
84 | @"Software\Policies\Microsoft\WindowsFirewall\DomainProfile",
85 | "EnableFirewall",
86 | 0, // Bad value (disabled)
87 | 1, // Good value (enabled)
88 | "Enable Firewall (Protect all network connections)",
89 | "DWORD",
90 | logger));
91 |
92 | // Disable AutoRun
93 | habits.Add(new SuperMSConfig.RegistryHabit(
94 | RegistryHive.LocalMachine,
95 | @"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",
96 | "NoDriveTypeAutoRun",
97 | 0, // Bad value (enabled)
98 | 255, // Good value (disabled)
99 | "Disable AutoRun (prevents auto-starting of malicious USB devices)",
100 | "DWORD",
101 | logger));
102 |
103 | // Disable Guest Account
104 | habits.Add(new SuperMSConfig.RegistryHabit(
105 | RegistryHive.LocalMachine,
106 | @"Software\Microsoft\Windows NT\CurrentVersion\Winlogon",
107 | "AutoAdminLogon",
108 | 1, // Bad value (enabled)
109 | 0, // Good value (disabled)
110 | "Disable Guest Account (prevents unauthorized access)",
111 | "DWORD",
112 | logger));
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/ServiceHabits.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace SuperMSConfig
5 | {
6 | public class ServiceHabits : BaseHabitCategory
7 | {
8 | private readonly Logger logger;
9 |
10 | public override string CategoryName => "Services";
11 |
12 | public ServiceHabits(Logger logger)
13 | {
14 | this.logger = logger;
15 |
16 | // badValue; 1 for stopped, 0 for running
17 |
18 | habits.Add(new ServiceHabit("diagnosticshub.standardcollector.service", "Microsoft (R) Diagnostics Hub Standard Collector Service: Collects diagnostic data for system health and performance.", logger, 1));
19 |
20 | // Adobe Acrobat Updater
21 | habits.Add(new ServiceHabit("AdobeARMservice", "Adobe Acrobat Update Service: Keeps Adobe Acrobat software up to date.", logger, 1));
22 |
23 | // Google Services (irrelevant services)
24 | habits.Add(new ServiceHabit("gupdate", "Google Update Service: Keeps Google applications such as Chrome up to date.", logger, 1));
25 | habits.Add(new ServiceHabit("gupdatem", "Google Update Service (Machine-Wide): Keeps Google applications up to date (machine-wide).", logger, 1));
26 |
27 | // TeamViewer
28 | habits.Add(new ServiceHabit("TeamViewer", "TeamViewer Service: Allows remote access and support connections.", logger, 1));
29 |
30 | // Citrix Updater Service
31 | habits.Add(new ServiceHabit("CWAUpdaterService", "Citrix Workspace App Updater Service: Manages updates for Citrix Workspace.", logger, 1));
32 |
33 | // Apple Services (on Windows)
34 | habits.Add(new ServiceHabit("AppleMobileDeviceService", "Apple Mobile Device Service: Allows iTunes to communicate with iPhones/iPads.", logger, 1));
35 | habits.Add(new ServiceHabit("Bonjour Service", "Apple Bonjour Service: Allows automatic discovery of devices on local networks, often unnecessary.", logger, 1));
36 |
37 | // NVIDIA Telemetry
38 | habits.Add(new ServiceHabit("NvTelemetryContainer", "NVIDIA Telemetry Service: Collects and sends telemetry data to NVIDIA.", logger, 1));
39 |
40 | // Dropbox Update Services
41 | habits.Add(new ServiceHabit("dbupdate", "Dropbox Update Service: Keeps Dropbox application up to date.", logger, 1));
42 | habits.Add(new ServiceHabit("dbupdatem", "Dropbox Update Service (Machine-Wide): Keeps Dropbox up to date for all users on the system.", logger, 1));
43 |
44 | // Skype Updater
45 | habits.Add(new ServiceHabit("SkypeUpdate", "Skype Updater Service: Updates Skype automatically, often unnecessary.", logger, 1));
46 |
47 | // Spotify Web Helper
48 | habits.Add(new ServiceHabit("SpotifyWebHelper", "Spotify Web Helper: Automatically launches Spotify from web links, often not needed.", logger, 1));
49 |
50 | // Realtek Audio Services
51 | habits.Add(new ServiceHabit("RtkAudioService", "Realtek Audio Service: Manages audio-related tasks for Realtek hardware, usually unnecessary for basic use.", logger, 1));
52 |
53 | // Intel Update Manager
54 | habits.Add(new ServiceHabit("IntelRapidStorage", "Intel Rapid Storage Technology: Often unnecessary unless using advanced RAID or disk management features.", logger, 1));
55 |
56 | // Steam Client Service
57 | habits.Add(new ServiceHabit("Steam Client Service", "Steam Client Service: Allows Steam to update and manage games, not needed unless you actively use Steam.", logger, 1));
58 |
59 | // Adobe Genuine Software Integrity Service
60 | habits.Add(new ServiceHabit("AdobeGenuineMonitorService", "Adobe Genuine Software Integrity Service: Checks for genuine Adobe software, not essential for regular use.", logger, 1));
61 |
62 | // Windows Services
63 | habits.Add(new ServiceHabit("diagnosticshub.standardcollector.service", "Microsoft (R) Diagnostics Hub Standard Collector Service: Collects diagnostic data for system health and performance.", logger, 1));
64 | habits.Add(new ServiceHabit("DiagTrack", "Diagnostics Tracking Service: Monitors and tracks diagnostics and performance metrics.", logger, 1));
65 | habits.Add(new ServiceHabit("dmwappushservice", "WAP Push Message Routing Service: Handles WAP push messages, but can be safely turned off if not in use.", logger, 1));
66 | habits.Add(new ServiceHabit("lfsvc", "Geolocation Service: Manages location data for various applications. Disable if you don’t use location-based services.", logger, 1));
67 | habits.Add(new ServiceHabit("MapsBroker", "Downloaded Maps Manager: Manages offline maps. Disable if you don’t use offline maps.", logger, 1));
68 | habits.Add(new ServiceHabit("NetTcpPortSharing", "Net.Tcp Port Sharing Service: Enables network communication via TCP. Turn off if you don’t use networked applications.", logger, 1));
69 | habits.Add(new ServiceHabit("RemoteRegistry", "Remote Registry: Allows remote access to the Windows registry. Disable if remote registry access is unnecessary.", logger, 1));
70 | habits.Add(new ServiceHabit("TrkWks", "Distributed Link Tracking Client: Maintains links to files across a network. Disable if not using networked file links.", logger, 1));
71 | habits.Add(new ServiceHabit("WbioSrvc", "Windows Biometric Service: Supports fingerprint and facial recognition hardware. Disable if you don’t use biometric devices.", logger, 1));
72 | habits.Add(new ServiceHabit("WMPNetworkSvc", "Windows Media Player Network Sharing Service: Shares media over the network. Disable if you don’t share media.", logger, 1));
73 | habits.Add(new ServiceHabit("XblAuthManager", "Xbox Live Auth Manager: Manages Xbox Live authentication. Turn off if you don’t use Xbox Live services.", logger, 1));
74 | habits.Add(new ServiceHabit("XblGameSave", "Xbox Live Game Save Service: Manages Xbox game saves. Disable if you’re not using Xbox Live game features.", logger, 1));
75 | habits.Add(new ServiceHabit("XboxNetApiSvc", "Xbox Live Networking Service: Handles Xbox Live network connections. Turn off if Xbox Live services aren’t needed.", logger, 1));
76 | habits.Add(new ServiceHabit("ndu", "Windows Network Data Usage Monitor: Tracks network data usage. Disable if you don’t need to monitor data usage.", logger, 1));
77 | habits.Add(new ServiceHabit("fxssvc", "Fax Service: Manages fax operations. If you don’t use a fax machine, it’s safe to turn off this service.", logger, 1));
78 | habits.Add(new ServiceHabit("WiaRpc", "Windows Image Acquisition (WIA): Supports image acquisition devices like scanners and cameras. Disable if these devices aren’t used.", logger, 1));
79 | habits.Add(new ServiceHabit("SmartCard", "Smart Card: Supports smart card devices for security. Turn off if smart card functionality isn’t needed.", logger, 1));
80 | habits.Add(new ServiceHabit("Spooler", "Print Spooler: Manages print jobs. Disable if you don’t have a printer or print jobs.", logger, 1));
81 | habits.Add(new ServiceHabit("SysMain", "Superfetch (SysMain): Improves startup times by preloading frequently used applications. If you have an SSD, you might not need this.", logger, 1));
82 | habits.Add(new ServiceHabit("bthserv", "Bluetooth Support Service: Manages Bluetooth connections. Turn off if you don’t use Bluetooth devices.", logger, 1));
83 | habits.Add(new ServiceHabit("WerSvc", "Windows Error Reporting Service: Sends error reports to Microsoft. Disable if you don’t wish to share error information.", logger, 1));
84 | habits.Add(new ServiceHabit("wisvc", "Windows Insider Service: Manages Windows Insider updates. Disable if you’re not part of the Insider Program.", logger, 1));
85 | habits.Add(new ServiceHabit("seclogon", "Secondary Logon: Allows running applications with different credentials. Turn off if you don’t use this feature.", logger, 1));
86 | }
87 | }
88 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/StartupHabits.cs:
--------------------------------------------------------------------------------
1 | namespace SuperMSConfig
2 | {
3 | public class StartupHabits : BaseHabitCategory
4 | {
5 | private readonly Logger logger;
6 |
7 | public override string CategoryName => "Startup";
8 |
9 | public StartupHabits(Logger logger)
10 | {
11 | this.logger = logger;
12 |
13 | habits.Add(new StartupHabit("Discord", "Discord: Essential for gaming and communication but can be disabled if it impacts startup performance.", logger));
14 | habits.Add(new StartupHabit("UninstallT20", "Microsoft Teams Updater: Automatically updates Microsoft Teams; disable if it's causing startup delays.", logger));
15 | habits.Add(new StartupHabit("Teams", "Microsoft Teams: Critical for work-related collaboration; disable if it affects startup time.", logger));
16 | habits.Add(new StartupHabit("OneDrive", "OneDrive: Syncs files to the cloud; can be disabled if not needed or causing issues.", logger));
17 | habits.Add(new StartupHabit("Spotify", "Spotify: Launches music streaming; can be disabled if it slows down your system at startup.", logger));
18 | habits.Add(new StartupHabit("Skype", "Skype: Used for calls and messaging; disable if not needed to speed up your startup.", logger));
19 | habits.Add(new StartupHabit("Acrobat", "Adobe Acrobat: Opens PDFs; can be disabled if you don't frequently use it or it slows down boot.", logger));
20 | habits.Add(new StartupHabit("Java Update Scheduler", "Java Update Scheduler: Keeps Java updated; disable if you prefer manual updates or it's causing slowdowns.", logger));
21 | habits.Add(new StartupHabit("CCleaner", "CCleaner: Cleans up system junk; can be disabled if it causes slow startup times.", logger));
22 | habits.Add(new StartupHabit("NVIDIA GeForce Experience", "NVIDIA GeForce Experience: Manages graphics drivers and settings; disable if it’s impacting startup performance.", logger));
23 | habits.Add(new StartupHabit("QuickTime", "QuickTime: Media player; can be disabled if it's not frequently used or slows down startup.", logger));
24 | habits.Add(new StartupHabit("uTorrent", "uTorrent: BitTorrent client; can be disabled if it's causing delays or issues at startup.", logger));
25 | habits.Add(new StartupHabit("RtHDVBg", "Realtek HD Audio Driver: Essential for high-quality sound but may be disabled if causing issues.", logger));
26 | habits.Add(new StartupHabit("RtHDVCpl", "Realtek HD Control Panel: Manages audio settings; can be disabled if it disrupts system performance.", logger));
27 | }
28 | }
29 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Habits/SystemHabits.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 |
5 | public class SystemHabits : BaseHabitCategory
6 | {
7 | private readonly Logger logger;
8 |
9 | public override string CategoryName => "System";
10 |
11 | public SystemHabits(Logger logger)
12 | {
13 | this.logger = logger;
14 |
15 | //Hasten the shutdown process
16 | habits.Add(new SuperMSConfig.RegistryHabit(
17 | RegistryHive.LocalMachine,
18 | @"SYSTEM\CurrentControlSet\Control",
19 | "WaitToKillServiceTimeout",
20 | "5000", // Bad value (disabled)
21 | "2000", // Good value (enabled)
22 | "Hasten the shutdown process",
23 | "STRING",
24 | logger));
25 |
26 |
27 | // Modify the Taskbar alignment to left
28 | habits.Add(new SuperMSConfig.RegistryHabit(
29 | RegistryHive.CurrentUser,
30 | @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced",
31 | "TaskbarAl",
32 | 1, // Bad value (disabled)
33 | 0, // Good value (enabled)
34 | "Modify the Taskbar alignment to left",
35 | "DWORD",
36 | logger));
37 |
38 | // Performance Monitoring
39 | habits.Add(new SuperMSConfig.RegistryHabit(
40 | RegistryHive.LocalMachine,
41 | @"Software\Microsoft\Windows\CurrentVersion\PerformanceMonitoring",
42 | "EnablePerformanceMonitoring",
43 | 0, // Bad value (disabled)
44 | 1, // Good value (enabled)
45 | "Enable performance monitoring",
46 | "DWORD",
47 | logger));
48 |
49 | // Launch folders in a new process
50 | habits.Add(new SuperMSConfig.RegistryHabit(
51 | RegistryHive.LocalMachine,
52 | @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced",
53 | "LaunchFolderWindowsInNewProcess",
54 | 0, // Bad value (disabled)
55 | 1, // Good value (enabled)
56 | "Launch folders in a new process",
57 | "DWORD",
58 | logger));
59 |
60 | // Enable SuperFetch
61 | habits.Add(new SuperMSConfig.RegistryHabit(
62 | RegistryHive.LocalMachine,
63 | @"Software\Policies\Microsoft\Windows\System",
64 | "EnableSuperFetch",
65 | 0, // Bad value (disabled)
66 | 1, // Good value (enabled)
67 | "Enable SuperFetch (improves performance by preloading frequently used apps)",
68 | "DWORD",
69 | logger));
70 |
71 | // Allow access to Task Manager
72 | habits.Add(new SuperMSConfig.RegistryHabit(
73 | RegistryHive.LocalMachine,
74 | @"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options",
75 | "DisableTaskMgr",
76 | 1, // Bad value (enabled)
77 | 0, // Good value (disabled)
78 | "Allow access to Task Manager",
79 | "DWORD",
80 | logger));
81 |
82 | // Disable Background Apps
83 | habits.Add(new SuperMSConfig.RegistryHabit(
84 | RegistryHive.CurrentUser,
85 | @"Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications",
86 | "GlobalUserDisabled",
87 | 0, // Bad value (disabled)
88 | 1, // Good value (enabled)
89 | "Disable background apps (improves system performance)",
90 | "DWORD",
91 | logger));
92 |
93 | // Hide Super Hidden Files and Folders
94 | habits.Add(new SuperMSConfig.RegistryHabit(
95 | RegistryHive.CurrentUser,
96 | @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced",
97 | "ShowSuperHidden",
98 | 1, // Bad value (enabled)
99 | 0, // Good value (disabled)
100 | "Hide super hidden files and folders (improves Explorer performance)",
101 | "DWORD",
102 | logger));
103 |
104 | // Windows Update
105 | habits.Add(new SuperMSConfig.RegistryHabit(
106 | RegistryHive.LocalMachine,
107 | @"Software\Policies\Microsoft\Windows\WindowsUpdate",
108 | "DisableWindowsUpdateAccess",
109 | 1, // Bad value (disabled)
110 | 0, // Good value (enabled)
111 | "Enabled Windows Updates",
112 | "DWORD",
113 | logger));
114 |
115 | // Fast Startup
116 | habits.Add(new SuperMSConfig.RegistryHabit(
117 | RegistryHive.LocalMachine,
118 | @"SYSTEM\CurrentControlSet\Control\Session Manager\Power",
119 | "HiberbootEnabled",
120 | 0, // Bad value (disabled)
121 | 1, // Good value (enabled)
122 | "Enable Fast Startup to speed up boot times",
123 | "DWORD",
124 | logger));
125 |
126 | // System Restore
127 | habits.Add(new SuperMSConfig.RegistryHabit(
128 | RegistryHive.LocalMachine,
129 | @"SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\SystemRestore",
130 | "DisableSR",
131 | 1, // Bad value (System Restore disabled)
132 | 0, // Good value (System Restore enabled)
133 | "Enable System Restore for better system recovery options",
134 | "DWORD",
135 | logger));
136 |
137 | // Remote Desktop
138 | habits.Add(new SuperMSConfig.RegistryHabit(
139 | RegistryHive.LocalMachine,
140 | @"SYSTEM\CurrentControlSet\Control\Terminal Server",
141 | "fDenyTSConnections",
142 | 1, // Bad value (Remote Desktop disabled)
143 | 0, // Good value (Remote Desktop enabled)
144 | "Enable Remote Desktop for remote access to your system",
145 | "DWORD",
146 | logger));
147 |
148 | // File Extensions Visibility
149 | habits.Add(new SuperMSConfig.RegistryHabit(
150 | RegistryHive.CurrentUser,
151 | @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced",
152 | "HideFileExt",
153 | 1, // Bad value (file extensions hidden)
154 | 0, // Good value (file extensions visible)
155 | "Show file extensions for better file management",
156 | "DWORD",
157 | logger));
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/SuperMSConfig/Helpers/Logger.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace SuperMSConfig
8 | {
9 | public class Logger
10 | {
11 | private readonly MainForm mainForm;
12 |
13 | public Logger(MainForm mainForm)
14 | {
15 | this.mainForm = mainForm?? throw new ArgumentNullException(nameof(mainForm));
16 | }
17 |
18 |
19 | // Log method that supports additional details
20 | public void Log(string message, Color color, string details = "")
21 | {
22 | // Find the RichTextBox where logs are displayed
23 | RichTextBox logBox = mainForm.Controls.Find("rtbLog", true).FirstOrDefault() as RichTextBox;
24 |
25 | if (logBox != null)
26 | {
27 | // Ensure UI updates are made on the UI thread
28 | if (logBox.InvokeRequired)
29 | {
30 | logBox.Invoke((Action)(() =>
31 | {
32 | AppendLog(logBox, message, color, details);
33 | }));
34 | }
35 | else
36 | {
37 | AppendLog(logBox, message, color, details);
38 | }
39 | }
40 | }
41 |
42 | private void AppendLog(RichTextBox logBox, string message, Color color, string details)
43 | {
44 | logBox.SelectionColor = color;
45 | logBox.AppendText($"{DateTime.Now}: {message}\n");
46 |
47 | // If there are additional details, append them indented
48 | if (!string.IsNullOrEmpty(details))
49 | {
50 | logBox.SelectionColor = Color.Gray;
51 | logBox.AppendText($"\tDetails: {details}\n");
52 | }
53 |
54 | // Autoscroll to the bottom
55 | logBox.SelectionStart = logBox.Text.Length;
56 | logBox.ScrollToCaret();
57 | }
58 |
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/SuperMSConfig/Helpers/Utils.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Security.Principal;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace SuperMSConfig.Helpers
9 | {
10 | internal static class Utils
11 | {
12 | // Check if app runs as Admin
13 | public static bool IsRunningAsAdmin()
14 | {
15 | try
16 | {
17 | WindowsIdentity identity = WindowsIdentity.GetCurrent();
18 | WindowsPrincipal principal = new WindowsPrincipal(identity);
19 | bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
20 |
21 | //logger.Log($"App is running with Admin rights: {isAdmin}", isAdmin ? Color.Green : Color.Red);
22 |
23 | if (!isAdmin)
24 | {
25 | // logger.Log("The app should be run as Administrator to ensure all features work properly.", Color.Orange);
26 | }
27 |
28 | return isAdmin;
29 | }
30 | catch (Exception ex)
31 | {
32 | // logger.Log($"Error checking admin rights: {ex.Message}", Color.Red);
33 | return false;
34 | }
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/SuperMSConfig/PluginsForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SuperMSConfig
2 | {
3 | partial class PluginsForm
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.SuspendLayout();
32 | //
33 | // PluginsForm
34 | //
35 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
36 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
37 | this.ClientSize = new System.Drawing.Size(414, 507);
38 | this.Name = "PluginsForm";
39 | this.ShowIcon = false;
40 | this.ResumeLayout(false);
41 |
42 | }
43 |
44 | #endregion
45 | }
46 | }
--------------------------------------------------------------------------------
/SuperMSConfig/PluginsForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 |
11 | namespace SuperMSConfig
12 | {
13 | public partial class PluginsForm : Form
14 | {
15 | public PluginsForm()
16 | {
17 | InitializeComponent();
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/SuperMSConfig/PluginsForm.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/SuperMSConfig/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace SuperMSConfig
8 | {
9 | internal static class Program
10 | {
11 | ///
12 | /// Get app version
13 | ///
14 | internal static string GetCurrentVersionTostring() => new Version(Application.ProductVersion).ToString(3);
15 |
16 | ///
17 | /// The main entry point for the application.
18 | ///
19 | ///
20 | [STAThread]
21 | static void Main()
22 | {
23 | Application.EnableVisualStyles();
24 | Application.SetCompatibleTextRenderingDefault(false);
25 | Application.Run(new MainForm());
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/SuperMSConfig/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die einer Assembly zugeordnet sind.
8 | [assembly: AssemblyTitle("SuperMSConfig")]
9 | [assembly: AssemblyDescription("Super Microsoft Configuration")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Builtbybel")]
12 | [assembly: AssemblyProduct("SuperMSConfig")]
13 | [assembly: AssemblyCopyright("Copyright © 2024")]
14 | [assembly: AssemblyTrademark("A Belim app creation")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("6514a6a5-6e23-4b36-ac92-df96db8901d3")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | [assembly: AssemblyVersion("1.5.1")]
33 | [assembly: AssemblyFileVersion("1.5.1")]
34 |
--------------------------------------------------------------------------------
/SuperMSConfig/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:4.0.30319.42000
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SuperMSConfig.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
17 | ///
18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SuperMSConfig.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap assetCopilot {
67 | get {
68 | object obj = ResourceManager.GetObject("assetCopilot", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
75 | ///
76 | internal static System.Drawing.Bitmap assetCopilotBW {
77 | get {
78 | object obj = ResourceManager.GetObject("assetCopilotBW", resourceCulture);
79 | return ((System.Drawing.Bitmap)(obj));
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/SuperMSConfig/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\assetCopilot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
125 | ..\assetCopilotBW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
126 |
127 |
--------------------------------------------------------------------------------
/SuperMSConfig/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:4.0.30319.42000
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SuperMSConfig.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/SuperMSConfig/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SuperMSConfig/SuperMSConfig.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {6514A6A5-6E23-4B36-AC92-DF96DB8901D3}
8 | WinExe
9 | SuperMSConfig
10 | SuperMSConfig
11 | v4.8
12 | 512
13 | true
14 | true
15 |
16 |
17 | x64
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 | app.manifest
37 |
38 |
39 | AppIcon.ico
40 |
41 |
42 |
43 | ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
44 |
45 |
46 |
47 |
48 | False
49 | ..\..\..\..\..\..\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | Form
64 |
65 |
66 | AboutForm.cs
67 |
68 |
69 |
70 |
71 |
72 | UserControl
73 |
74 |
75 | GetStartedPage.cs
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | Form
93 |
94 |
95 | PluginsForm.cs
96 |
97 |
98 | Form
99 |
100 |
101 | MainForm.cs
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | True
110 | True
111 | Resources.resx
112 |
113 |
114 |
115 |
116 |
117 | AboutForm.cs
118 | Designer
119 |
120 |
121 | GetStartedPage.cs
122 |
123 |
124 | PluginsForm.cs
125 |
126 |
127 | MainForm.cs
128 |
129 |
130 | ResXFileCodeGenerator
131 | Designer
132 | Resources.Designer.cs
133 |
134 |
135 |
136 |
137 | SettingsSingleFileGenerator
138 | Settings.Designer.cs
139 |
140 |
141 | True
142 | Settings.settings
143 | True
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 | {11724eb0-bd43-41d3-a4c3-7002f9163b7f}
157 | PluginInterface
158 |
159 |
160 |
161 |
--------------------------------------------------------------------------------
/SuperMSConfig/Templates/HabitFactory.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using SuperMSConfig;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 | using Templates;
9 |
10 | namespace Templates
11 | {
12 | public class HabitFactory
13 | {
14 | public BaseHabit CreateHabit(HabitTemplate template, Logger logger)
15 | {
16 | switch (template.Type)
17 | {
18 | case "RegistryHabit":
19 | var hive = (RegistryHive)Enum.Parse(typeof(RegistryHive), template.Hive);
20 | var valueType = template.ValueType ?? "DWORD"; // Default to "Dword" if not specified
21 | return new RegistryHabit(
22 | hive,
23 | template.Key,
24 | template.ValueName,
25 | template.BadValue,
26 | template.GoodValue,
27 | template.Description,
28 | valueType,
29 | logger);
30 |
31 | case "StartupHabit":
32 | return new StartupHabit(template.AppName, template.Description, logger);
33 | case "ServiceHabit":
34 | // Convert BadValue to int, assuming it's always numeric
35 | return new ServiceHabit(template.ServiceName, template.Description, logger, Convert.ToInt32(template.BadValue));
36 |
37 | case "AppsHabit":
38 | return new AppsHabit(template.AppName, template.Description, logger);
39 |
40 | default:
41 | throw new ArgumentException($"Unknown habit type: {template.Type}");
42 | }
43 | }
44 | }
45 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Templates/HabitTemplate.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace Templates
8 | {
9 | public class HabitTemplate
10 | {
11 | public string Type { get; set; }
12 | public string Hive { get; set; }
13 | public string Key { get; set; }
14 | public string ValueName { get; set; }
15 | public object GoodValue { get; set; }
16 | public object BadValue { get; set; }
17 | public string AppName { get; set; }
18 | public string ServiceName { get; set; }
19 | public string Description { get; set; }
20 | public string ValueType { get; set; }
21 | }
22 |
23 | }
--------------------------------------------------------------------------------
/SuperMSConfig/Templates/TemplateLoader.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.IO;
3 | using Newtonsoft.Json;
4 | using Templates;
5 |
6 | public class TemplateLoader
7 | {
8 | // Deserializes the template JSON file into a list of HabitTemplate objects
9 | public TemplateFile LoadTemplateFile(string filePath)
10 | {
11 | try
12 | {
13 | var json = File.ReadAllText(filePath);
14 |
15 | // Deserialize the full template file (with Header and Entries)
16 | var templateFile = JsonConvert.DeserializeObject(json);
17 |
18 | if (templateFile == null)
19 | {
20 | throw new InvalidDataException("Deserialized JSON data is null.");
21 | }
22 |
23 | return templateFile;
24 | }
25 | catch (JsonException ex)
26 | {
27 | throw new InvalidDataException("Error parsing JSON data. " + ex.Message, ex);
28 | }
29 | catch (IOException ex)
30 | {
31 | throw new IOException("Error reading JSON file. " + ex.Message, ex);
32 | }
33 | }
34 | }
35 |
36 | public class TemplateFile
37 | {
38 | public string Header { get; set; }
39 | public List Entries { get; set; }
40 | }
--------------------------------------------------------------------------------
/SuperMSConfig/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
54 |
55 |
56 |
57 | true
58 | true
59 |
60 |
61 |
62 |
63 |
64 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/SuperMSConfig/assetCopilot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/builtbybel/SuperMSConfig/262fd6129fb414318bc89ad662ed49e579d28c5f/SuperMSConfig/assetCopilot.png
--------------------------------------------------------------------------------
/SuperMSConfig/assetCopilotBW.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/builtbybel/SuperMSConfig/262fd6129fb414318bc89ad662ed49e579d28c5f/SuperMSConfig/assetCopilotBW.png
--------------------------------------------------------------------------------
/SuperMSConfig/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------