├── .gitignore ├── LICENSE ├── README.md ├── languages ├── de │ ├── Bloatynosy Nue.resources.dll │ └── Bloatynosy.resources.dll ├── it │ └── Bloatynosy Nue.resources.dll └── ko │ ├── Bloatynosy Nue.resources.dll │ └── Bloatynosy.resources.dll ├── plugins ├── AppInstaller.json ├── AppMatrix.json ├── Block New Outlook.json ├── ChrisTitusApp.ps1 ├── Clear Icon Cache.json ├── Create Restore Point.ps1 ├── File Extensions Visibility.json ├── Force Windows Update to Windows 11 24H2.json ├── Inplace Upgrade to 24H2 via Registry.json ├── Newtonsoft.Json.dll ├── Remove Windows AI.ps1 ├── Remove default apps.ps1 ├── Restart Explorer.ps1 ├── Restore all built-in apps.ps1 ├── Snap Assist Flyout.json ├── Uninstall OneDrive.ps1 ├── Use light theme.json ├── User Account Control.json ├── Windows 11 24H2 Inplace Upgrade (Server Setup).ps1 ├── Windows Old Remover.json ├── Windows Rollback Timer.json └── plugins_manifest.json └── src ├── Bloatynosy ├── App.config ├── AppIcon.ico ├── AppIconPNG.png ├── BloatynosyNue.csproj ├── Experience │ ├── AI │ │ ├── CopilotTaskbar.cs │ │ ├── RecallMachine.cs │ │ └── RecallUser.cs │ ├── Ads │ │ ├── FileExplorerAds.cs │ │ ├── FinishSetupAds.cs │ │ ├── LockScreenAds.cs │ │ ├── PersonalizedAds.cs │ │ ├── SettingsAds.cs │ │ ├── StartmenuAds.cs │ │ ├── TailoredExperiences.cs │ │ ├── TipsAndSuggestions.cs │ │ └── WelcomeExperienceAds.cs │ ├── FeatureBase.cs │ ├── FeatureNode.cs │ ├── FeaturePanel.cs │ ├── Gaming │ │ ├── GameDVR.cs │ │ ├── PowerThrotteling.cs │ │ └── VisualFX.cs │ ├── Privacy │ │ ├── ActivityHistory.cs │ │ ├── LocationTracking.cs │ │ ├── PrivacyExperience.cs │ │ └── Telemetry.cs │ └── UI │ │ ├── FullContextMenus.cs │ │ ├── LockScreen.cs │ │ ├── SearchboxTaskbarMode.cs │ │ ├── ShowOrHideMostUsedApps.cs │ │ ├── ShowTaskViewButton.cs │ │ ├── StartLayout.cs │ │ └── TaskbarAlignment.cs ├── Helper │ ├── Helper.cs │ ├── Logger.cs │ ├── Utils.cs │ └── Views.cs ├── JsonPluginHandler.cs ├── Locales │ ├── Strings.Designer.cs │ ├── Strings.de.Designer.cs │ ├── Strings.de.resx │ ├── Strings.it.Designer.cs │ ├── Strings.it.resx │ ├── Strings.ko.resx │ └── Strings.resx ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── PSPluginHandler.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resources │ ├── AppIcon.png │ ├── assetHeader.png │ ├── assetUAC.png │ └── assetWaving.png ├── Views │ ├── AppIcon.png │ ├── AppsView.Designer.cs │ ├── AppsView.cs │ ├── AppsView.resx │ ├── ExperienceView.Designer.cs │ ├── ExperienceView.cs │ ├── ExperienceView.resx │ ├── LoggerView.Designer.cs │ ├── LoggerView.cs │ ├── LoggerView.resx │ ├── PluginsReview.Designer.cs │ ├── PluginsReview.cs │ ├── PluginsReview.resx │ ├── PluginsView.Designer.cs │ ├── PluginsView.cs │ ├── PluginsView.resx │ ├── SettingsView.Designer.cs │ ├── SettingsView.cs │ ├── SettingsView.resx │ ├── StoreView.Designer.cs │ ├── StoreView.cs │ └── StoreView.resx ├── app.manifest └── packages.config ├── BloatynosyNue.sln ├── Winpilot.sln └── Winpilot ├── App.config ├── AppIcon.ico ├── AppIconPNG.png ├── Helpers ├── Logger.cs ├── Utils.cs └── Views.cs ├── Interop ├── AIFeaturesHandler.cs ├── AppPackages.cs ├── AppxPackages.cs ├── ClippyConversationHandler.cs ├── ClippyDataHandler.cs ├── ClippyLogicHandler.cs ├── CommandsHandler.cs ├── DownloadHandler.cs ├── StorageSettings.cs ├── ThemeSettings.cs ├── UpdateSettings.cs └── WallpaperSettings.cs ├── InteropBase.cs ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── Program.cs ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── Views ├── SettingsPageView.Designer.cs ├── SettingsPageView.cs └── SettingsPageView.resx ├── Walks ├── AI │ ├── CopilotMSEdge.cs │ └── CopilotTaskbar.cs ├── Ads │ ├── FileExplorerAds.cs │ ├── FinishSetupAds.cs │ ├── LockScreenAds.cs │ ├── PersonalizedAds.cs │ ├── SettingsAds.cs │ ├── StartmenuAds.cs │ ├── TailoredExperiences.cs │ ├── TipsAndSuggestions.cs │ └── WelcomeExperienceAds.cs ├── Bloatware │ └── CAppxPackages.cs ├── Gaming │ ├── GameDVR.cs │ ├── PowerThrottling.cs │ └── VisualFX.cs ├── Privacy │ ├── BackgroundApps.cs │ ├── DiagnosticData.cs │ ├── FindMyDevice.cs │ ├── PrivacyExperience.cs │ └── Telemetry.cs ├── System │ ├── FaxPrinter.cs │ ├── FullContextMenus.cs │ ├── LockScreen.cs │ ├── VerboseMessages.cs │ └── XPSWriter.cs └── Taskbar │ ├── BingSearch.cs │ ├── MostUsedApps.cs │ ├── StartmenuLayout.cs │ ├── TaskView.cs │ └── TaskbarChat.cs ├── WalksBase.cs ├── Winpilot.csproj ├── app-backend ├── UI.css ├── UI_dark.css ├── appxData.json ├── backend.js ├── chatbotClippy.png ├── chatbotPaperclip.png ├── clippySayings.json ├── frontend.html └── staticAIData.json ├── app.manifest └── packages.config /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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Bloaty and the Nosy - No Bloat, No Problem! 2 | 3 | You probably remember my classic BloatynosyApp, which had to go through some renaming and eventually got discontinued. Everything that came after, like the web-based "Winpilot," didn't last long either. Honestly, I thought I was done with Bloatynosy-well, at least with the name. But then, during a recent visit to a well-known company, I saw an employee Googling the app and trying to download it, and I had to stifle a laugh. Apparently, the legend lives on. The employee and I had a good laugh about it, and he even called it the epitome of debloating. 4 | 5 | Sometimes, I think a little too long about things, and then a useful project just pops out. Bloatynosy was one of those projects. Sure, the name wasn't for everyone, but it was the go-to tool for cleaning up and debloating Windows. Recently, I added an OOBE assistant called "Fresh11" to the FlybyScript—basically, an all-in-one solution and I figured, why not use the same foundation to bring Bloatynosy back to life? 6 | 7 | I had a hard time committing to it, but in the end, I went for it. Now I can proudly say that after Bloatynosy, there won’t be anything newer or better. This time, it'll be even leaner, more efficient, smaller, and faster. A simple .exe that anyone can understand, doing exactly what bugs us after installing Windows 11. The reborn Bloatynosy carries the "Nue" extension, not "New" ;) The last solid, classic version was 0.85, and that's where Im picking up (with a fresh new interface). The build carries a small 11.x version number. 8 | 9 | Its primarily designed for Windows 11, but it can also be used on Windows 10, though not all settings are applicable there. 10 | 11 | ## Download 12 | Latest release: [Goto releases page ](https://github.com/builtbybel/Bloatynosy/releases) 13 | 14 | ### Features 15 | 16 | - Native stuff (no web app crap) 17 | - Back to basics: efficient and user-friendly 18 | - No AI/Copilot integration 19 | - Focused on the essentials 20 | 21 | ### What's next 22 | - Localizations coming soon for a global reach 23 | 24 | And much more to come, stay tuned. Feel free to vote for or suggest new features, including those that were part of the classic Bloatynosy but are still missing 25 | -------------------------------------------------------------------------------- /languages/de/Bloatynosy Nue.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/languages/de/Bloatynosy Nue.resources.dll -------------------------------------------------------------------------------- /languages/de/Bloatynosy.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/languages/de/Bloatynosy.resources.dll -------------------------------------------------------------------------------- /languages/it/Bloatynosy Nue.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/languages/it/Bloatynosy Nue.resources.dll -------------------------------------------------------------------------------- /languages/ko/Bloatynosy Nue.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/languages/ko/Bloatynosy Nue.resources.dll -------------------------------------------------------------------------------- /languages/ko/Bloatynosy.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/languages/ko/Bloatynosy.resources.dll -------------------------------------------------------------------------------- /plugins/AppInstaller.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Install Winget Apps (Chrome, Firefox, 7zip, VLC)", 3 | "PlugInfo": "This feature installs essential applications (here Chrome, Firefox, 7zip, VLC) using the Windows Package Manager (winget).", 4 | "PlugCheck": [], 5 | "PlugCategory": "Software Installation", 6 | "PlugDefaultState": false, 7 | "PlugDo": [ 8 | "winget install -e --id Google.Chrome", 9 | "winget install -e --id Mozilla.Firefox", 10 | "winget install -e --id 7zip.7zip", 11 | "winget install -e --id VLC.VLC" 12 | ], 13 | "PlugUndo": [ 14 | "winget uninstall -e --id Google.Chrome", 15 | "winget uninstall -e --id Mozilla.Firefox", 16 | "winget uninstall -e --id 7zip.7zip", 17 | "winget uninstall -e --id VLC.VLC" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /plugins/AppMatrix.json: -------------------------------------------------------------------------------- 1 | { 2 | "filters": [ 3 | { 4 | "name": "Most Annoying Bloatware", 5 | "criteria": [ 6 | "Copilot", 7 | "Candy", 8 | "Instagram", 9 | "Twitter", 10 | "TikTok", 11 | "Xbox", 12 | "Spotify", 13 | "YourPhone", 14 | "BubbleWitch", 15 | "Solitaire", 16 | "Minecraft", 17 | "FeedbackHub", 18 | "Skype", 19 | "News", 20 | "OneNote", 21 | "Tips", 22 | "3DViewer", 23 | "Paint3D", 24 | "MixedReality", 25 | "Maps", 26 | "Weather", 27 | "Groove", 28 | "Movies", 29 | "Cortana", 30 | "Teams", 31 | "People", 32 | "Xbox Live", 33 | "GetHelp", 34 | "Mail", 35 | "Calendar", 36 | "ContactSupport", 37 | "GamePass", 38 | "ToDo", 39 | "Hulu", 40 | "Picsart", 41 | "Adobe", 42 | "Clipchamp", 43 | "DevHome", 44 | "XboxGameBar", 45 | "MicrosoftStore", 46 | "Microsoft Solitaire Collection", 47 | "Microsoft News", 48 | "OneDrive", 49 | "SkypePreview", 50 | "PhoneLink", 51 | "GetOffice", 52 | "PowerBI", 53 | "OneDrive", 54 | "BingWeather", 55 | "BingNews", 56 | "MixedRealityPortal", 57 | "Zune", 58 | "BingMaps", 59 | "Cortana", 60 | "StickyNotes" 61 | ] 62 | }, 63 | { 64 | "name": "Microsoft Apps", 65 | "criteria": [ 66 | "Microsoft", 67 | "OneDrive" 68 | ] 69 | }, 70 | { 71 | "name": "Social Media Apps", 72 | "criteria": [ 73 | "Facebook", 74 | "Instagram", 75 | "Twitter", 76 | "Snapchat", 77 | "TikTok", 78 | "LinkedIn" 79 | ] 80 | }, 81 | { 82 | "name": "Games", 83 | "criteria": [ 84 | "Solitaire", 85 | "Minecraft", 86 | "Roblox", 87 | "Forza", 88 | "SeaOfThieves" 89 | ] 90 | }, 91 | { 92 | "name": "Video Streaming Apps", 93 | "criteria": [ 94 | "Netflix", 95 | "Hulu", 96 | "PrimeVideo", 97 | "Disney", 98 | "YouTube", 99 | "AppleTV" 100 | ] 101 | }, 102 | { 103 | "name": "Productivity Tools", 104 | "criteria": [ 105 | "Office", 106 | "Teams", 107 | "Evernote", 108 | "Trello", 109 | "OneNote", 110 | "Notion" 111 | ] 112 | }, 113 | { 114 | "name": "News and Media Apps", 115 | "criteria": [ 116 | "News", 117 | "CNN", 118 | "BBC", 119 | "Fox", 120 | "NYTimes", 121 | "Reddit" 122 | ] 123 | }, 124 | { 125 | "name": "Shopping Apps", 126 | "criteria": [ 127 | "Amazon", 128 | "eBay", 129 | "Walmart", 130 | "AliExpress", 131 | "Wish", 132 | "Etsy" 133 | ] 134 | } 135 | ] 136 | } 137 | -------------------------------------------------------------------------------- /plugins/Block New Outlook.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Block New Outlook Preinstall on Windows 11", 3 | "PlugInfo": "This plugin removes the pre-installed Outlook app on Windows 11 builds after 23H2 and blocks future installations.", 4 | "PlugCheck": [], 5 | "PlugCategory": "Tweaks (Plugins)", 6 | "PlugDo": [ 7 | "Get-AppxPackage -Name Microsoft.OutlookForWindows | Remove-AppxPackage", 8 | "reg delete \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\WindowsUpdate\\Orchestrator\\UScheduler_Oobe\\OutlookUpdate\" /f" 9 | ], 10 | "PlugUndo": [ 11 | "PowerShell -Command \"Write-Output 'There is no undo operation for removing pre-installed Outlook.'\"" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /plugins/ChrisTitusApp.ps1: -------------------------------------------------------------------------------- 1 | irm christitus.com/win | iex -------------------------------------------------------------------------------- /plugins/Clear Icon Cache.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Clear Icon Cache", 3 | "PlugInfo": "This feature clears the icon cache in Windows to resolve issues with icons displaying incorrectly.", 4 | "PlugCheck": [], 5 | "PlugCategory": "Tweaks (Plugins)", 6 | "PlugDo": [ 7 | "ie4uinit.exe -show", 8 | "taskkill /IM explorer.exe /F", 9 | "DEL /A /Q \"%localappdata%\\IconCache.db\"", 10 | "DEL /A /F /Q \"%localappdata%\\Microsoft\\Windows\\Explorer\\iconcache*\"", 11 | "Start explorer.exe" 12 | ], 13 | "PlugUndo": [ 14 | "powershell -Command \"Write-Output 'There is no undo operation for clearing the icon cache.'\"" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /plugins/Create Restore Point.ps1: -------------------------------------------------------------------------------- 1 | # Run as Admin 2 | if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) 3 | { 4 | Write-Warning "You need to run this script as an Administrator!" 5 | exit 6 | } 7 | 8 | # Load Windows Forms assembly for MessageBox 9 | Add-Type -AssemblyName System.Windows.Forms 10 | 11 | # Define the restore point description and type 12 | $description = "Bloatynosy NueEx Restore Point" 13 | $restorePointType = 12 # MODIFY_SETTINGS = 12 14 | 15 | # Function to create restore point with progress reporting 16 | function Create-RestorePoint { 17 | Write-Host "Starting to create restore point..." -ForegroundColor Yellow 18 | 19 | # Simulate progress 20 | for ($i = 0; $i -le 100; $i += 10) { 21 | Write-Progress -Activity "Creating Restore Point" -Status "$i% Complete" -PercentComplete $i 22 | Start-Sleep -Milliseconds 300 # Simulate some work being done 23 | } 24 | 25 | # WMI query to create the restore point 26 | $restorePoint = Get-WmiObject -List Win32_SystemRestore | ForEach-Object { 27 | $_.CreateRestorePoint($description, $restorePointType, 100) 28 | } 29 | 30 | Write-Host "Restore point created successfully." -ForegroundColor Green 31 | 32 | # Show completion message 33 | [System.Windows.Forms.MessageBox]::Show("Restore point has been created successfully!", "Completion", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) 34 | } 35 | 36 | # Execute the restore point creation 37 | Create-RestorePoint 38 | -------------------------------------------------------------------------------- /plugins/File Extensions Visibility.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Hide Hidden File Extensions", 3 | "PlugInfo": "This feature shows or hides hidden file extensions in Windows Explorer.", 4 | "PlugCategory": "Tweaks (Plugins)", 5 | "PlugCheck": [ 6 | "reg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v HideFileExt" 7 | ], 8 | "PlugDo": [ 9 | "reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v HideFileExt /t REG_DWORD /d 1 /f", 10 | "reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v ShowSuperHidden /t REG_DWORD /d 0 /f", 11 | "taskkill /f /im explorer.exe", 12 | "start explorer.exe" 13 | ], 14 | "PlugUndo": [ 15 | "reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v HideFileExt /t REG_DWORD /d 0 /f", 16 | "reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v ShowSuperHidden /t REG_DWORD /d 1 /f", 17 | "taskkill /f /im explorer.exe", 18 | "start explorer.exe" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /plugins/Force Windows Update to Windows 11 24H2.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Force Windows Update to Windows 11 24H2 (HW-Ready Systems Only)", 3 | "PlugInfo": "1. This script unlocks the direct path to Windows 11 24H2 via Windows Update—no Installation Assistant or Media Creation Tool needed!\n2. Tailored for systems meeting official hardware requirements.\n3. After running, a restart will be required. Then, simply head to Windows Update and let the magic happen.", 4 | "PlugCategory": "Scripts (optional)", 5 | "PlugCheck": [ 6 | "reg query \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /v ProductVersion" 7 | ], 8 | "PlugDo": [ 9 | "reg add \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /f", 10 | "reg add \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /v ProductVersion /t REG_SZ /d \"Windows 11\" /f", 11 | "reg add \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /v TargetReleaseVersionInfo /t REG_SZ /d \"24H2\" /f", 12 | "reg add \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /v TargetReleaseVersion /t REG_DWORD /d 1 /f", 13 | "powershell -command \"Add-Type -AssemblyName PresentationFramework; [System.Windows.MessageBox]::Show('Registry updated for Windows 11 24H2! Restart your PC, then head to Windows Update to grab your upgrade.', 'Restart Needed', 'OK', 'Information')\"", 14 | "shutdown /r /t 10" 15 | ], 16 | "PlugUndo": [ 17 | "reg delete \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /v ProductVersion /f", 18 | "reg delete \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /v TargetReleaseVersionInfo /f", 19 | "reg delete \"HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\" /v TargetReleaseVersion /f" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /plugins/Inplace Upgrade to 24H2 via Registry.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Inplace Upgrade to 24H2 via Registry", 3 | "PlugInfo": "1. Apply script\n2. Download Windows 11 version 24H2 ISO (via Microsoft site or Fido script) and mount the image.\n3. Click setup.exe and follow the on-screen instructions. \n\nSource: https://github.com/pbatard/rufus/issues/2568#issuecomment-2387934171\nOfficial Documentation: https://support.microsoft.com/en-us/windows/ways-to-install-windows-11-e0edbbfb-cfc5-4011-868b-2ce77ac7c70e", 4 | "PlugCategory": "Scripts (optional)", 5 | "PlugCheck": [ 6 | "reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\HwReqChk\" /v HwReqChkVars" 7 | ], 8 | "PlugDo": [ 9 | "reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\HwReqChk\" /f", 10 | "reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\HwReqChk\" /v HwReqChkVars /t REG_MULTI_SZ /d \"SQ_SecureBootCapable=TRUE\\0SQ_SecureBootEnabled=TRUE\\0SQ_TpmVersion=2\\0SQ_RamMB=8192\" /f", 11 | "reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\CompatMarkers\" /f", 12 | "reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Shared\" /f", 13 | "reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\TargetVersionUpgradeExperienceIndicators\" /f", 14 | "reg add \"HKLM\\SYSTEM\\Setup\\MoSetup\" /f /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1" 15 | ], 16 | "PlugUndo": [ 17 | "reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\HwReqChk\" /f", 18 | "reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\CompatMarkers\" /f", 19 | "reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Shared\" /f", 20 | "reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\TargetVersionUpgradeExperienceIndicators\" /f", 21 | "reg delete \"HKLM\\SYSTEM\\Setup\\MoSetup\" /f /v AllowUpgradesWithUnsupportedTPMOrCPU" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /plugins/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/plugins/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /plugins/Remove Windows AI.ps1: -------------------------------------------------------------------------------- 1 | iwr https://raw.githubusercontent.com/zoicware/RemoveWindowsAI/main/RemoveAi.ps1 | iex -------------------------------------------------------------------------------- /plugins/Restart Explorer.ps1: -------------------------------------------------------------------------------- 1 | # Function to show a message box 2 | function Show-MessageBox { 3 | param ( 4 | [string]$message, 5 | [string]$title = "Information" 6 | ) 7 | Add-Type -AssemblyName PresentationFramework 8 | [System.Windows.MessageBox]::Show($message, $title) 9 | } 10 | 11 | # Stop Windows Explorer 12 | Stop-Process -Name explorer -Force 13 | 14 | # Start Windows Explorer 15 | Start-Process explorer 16 | 17 | # Show message box 18 | Show-MessageBox -message "Windows Explorer has been restarted successfully." -title "Bloatynosy NueEx" 19 | -------------------------------------------------------------------------------- /plugins/Restore all built-in apps.ps1: -------------------------------------------------------------------------------- 1 | # Get all installed Windows apps for all users 2 | $allApps = Get-AppxPackage -AllUsers 3 | 4 | # Counter for tracking progress 5 | $totalApps = $allApps.Count 6 | $currentAppIndex = 1 7 | $reinstalledCount = 0 8 | 9 | # Loop through each app and reinstall 10 | foreach ($app in $allApps) { 11 | # Display current status 12 | Write-Host "[$currentAppIndex / $totalApps] Reinstalling $($app.Name)..." -ForegroundColor Yellow 13 | 14 | # Try to reinstall the app 15 | try { 16 | Add-AppxPackage -Register "$($app.InstallLocation)\appxmanifest.xml" -DisableDevelopmentMode -ErrorAction Stop 17 | Write-Host "[$currentAppIndex / $totalApps] $($app.Name) reinstalled successfully." -ForegroundColor Green 18 | $reinstalledCount++ 19 | } catch { 20 | Write-Host "[$currentAppIndex / $totalApps] Error occurred while reinstalling $($app.Name): $_" -ForegroundColor Red 21 | } 22 | 23 | # Increment the counter 24 | $currentAppIndex++ 25 | } 26 | 27 | # Display final status 28 | if ($reinstalledCount -eq $totalApps) { 29 | Write-Host "All apps reinstalled successfully." -ForegroundColor Green 30 | Write-Host "Flyby11 has reinstalled everything possible." -ForegroundColor Cyan 31 | } 32 | -------------------------------------------------------------------------------- /plugins/Snap Assist Flyout.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Enable Snap Assist Flyout", 3 | "PlugInfo": "This will enable Snap Asssist Flyout in Windows 11", 4 | "PlugCategory": "Tweaks (Plugins)", 5 | "PlugCheck": [ 6 | "reg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v EnableSnapAssistFlyout" 7 | ], 8 | "PlugDo": [ 9 | "reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v EnableSnapAssistFlyout /t REG_DWORD /d 1 /f" 10 | ], 11 | "PlugUndo": [ 12 | "reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced /v EnableSnapAssistFlyout /t REG_DWORD /d 0 /f" 13 | ] 14 | } -------------------------------------------------------------------------------- /plugins/Uninstall OneDrive.ps1: -------------------------------------------------------------------------------- 1 | Import-Module -DisableNameChecking $PSScriptRoot\..\lib\force-mkdir.psm1 2 | Import-Module -DisableNameChecking $PSScriptRoot\..\lib\take-own.psm1 3 | 4 | Write-Output "Kill OneDrive process" 5 | taskkill.exe /F /IM "OneDrive.exe" 6 | taskkill.exe /F /IM "explorer.exe" 7 | 8 | Write-Output "Remove OneDrive" 9 | if (Test-Path "$env:systemroot\System32\OneDriveSetup.exe") { 10 | & "$env:systemroot\System32\OneDriveSetup.exe" /uninstall 11 | } 12 | if (Test-Path "$env:systemroot\SysWOW64\OneDriveSetup.exe") { 13 | & "$env:systemroot\SysWOW64\OneDriveSetup.exe" /uninstall 14 | } 15 | 16 | Write-Output "Removing OneDrive leftovers" 17 | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:localappdata\Microsoft\OneDrive" 18 | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:programdata\Microsoft OneDrive" 19 | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:systemdrive\OneDriveTemp" 20 | # check if directory is empty before removing: 21 | If ((Get-ChildItem "$env:userprofile\OneDrive" -Recurse | Measure-Object).Count -eq 0) { 22 | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "$env:userprofile\OneDrive" 23 | } 24 | 25 | Write-Output "Disable OneDrive via Group Policies" 26 | force-mkdir "HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\OneDrive" 27 | Set-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\OneDrive" "DisableFileSyncNGSC" 1 28 | 29 | Write-Output "Remove Onedrive from explorer sidebar" 30 | New-PSDrive -PSProvider "Registry" -Root "HKEY_CLASSES_ROOT" -Name "HKCR" 31 | mkdir -Force "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" 32 | Set-ItemProperty "HKCR:\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" "System.IsPinnedToNameSpaceTree" 0 33 | mkdir -Force "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" 34 | Set-ItemProperty "HKCR:\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" "System.IsPinnedToNameSpaceTree" 0 35 | Remove-PSDrive "HKCR" 36 | 37 | # Thank you Matthew Israelsson 38 | Write-Output "Removing run hook for new users" 39 | reg load "hku\Default" "C:\Users\Default\NTUSER.DAT" 40 | reg delete "HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "OneDriveSetup" /f 41 | reg unload "hku\Default" 42 | 43 | Write-Output "Removing startmenu entry" 44 | Remove-Item -Force -ErrorAction SilentlyContinue "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk" 45 | 46 | Write-Output "Removing scheduled task" 47 | Get-ScheduledTask -TaskPath '\' -TaskName 'OneDrive*' -ea SilentlyContinue | Unregister-ScheduledTask -Confirm:$false 48 | 49 | Write-Output "Restarting explorer" 50 | Start-Process "explorer.exe" 51 | 52 | Write-Output "Waiting for explorer to complete loading" 53 | Start-Sleep 10 54 | 55 | Write-Output "Removing additional OneDrive leftovers" 56 | foreach ($item in (Get-ChildItem "$env:WinDir\WinSxS\*onedrive*")) { 57 | Takeown-Folder $item.FullName 58 | Remove-Item -Recurse -Force $item.FullName 59 | } 60 | Write-Output "Bloatynosy NueEx can confirm the uninstallation of the OneDrive app." 61 | -------------------------------------------------------------------------------- /plugins/Use light theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Use light theme", 3 | "PlugInfo": "Check for light mode, uncheck for dark mode", 4 | "PlugCategory": "Tweaks (Plugins)", 5 | "PlugCheck": [ 6 | "reg query HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v AppsUseLightTheme", 7 | "reg query HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v SystemUsesLightTheme" 8 | ], 9 | "PlugDo": [ 10 | "reg add HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v AppsUseLightTheme /t REG_DWORD /d 1 /f", 11 | "reg add HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 1 /f" 12 | ], 13 | "PlugUndo": [ 14 | "reg add HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f", 15 | "reg add HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 0 /f" 16 | ] 17 | } -------------------------------------------------------------------------------- /plugins/User Account Control.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Enable User Account Control (UAC)", 3 | "PlugInfo": "Check to enable User Account Control (UAC), uncheck to disable UAC. Please only disable this setting if you are absolutely sure you have complete control over your system!! Otherwise, it could open a major security hole in your system.", 4 | "PlugCategory": "Security (Plugins)", 5 | "PlugCheck": [ 6 | "reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA" 7 | ], 8 | "PlugDo": [ 9 | "powershell -Command \"Add-Type -AssemblyName PresentationCore,PresentationFramework; $result = [System.Windows.MessageBox]::Show('Your system will restart in 30 seconds to apply changes. Do you want to proceed?', 'Warning', 'YesNo', 'Warning'); if ($result -eq 'Yes') { Start-Sleep -Seconds 30; reg add HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 1 /f; shutdown /r /t 0 }\"" 10 | ], 11 | "PlugUndo": [ 12 | "powershell -Command \"Add-Type -AssemblyName PresentationCore,PresentationFramework; $result = [System.Windows.MessageBox]::Show('Your system will restart in 30 seconds to apply changes. Do you want to proceed?', 'Warning', 'YesNo', 'Warning'); if ($result -eq 'Yes') { Start-Sleep -Seconds 30; reg add HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f; shutdown /r /t 0 }\"" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /plugins/Windows 11 24H2 Inplace Upgrade (Server Setup).ps1: -------------------------------------------------------------------------------- 1 | # Inplace Upgrade via Server Setup. (Current release: Windows 11 2024 Update l Version 24H2) 2 | # This method leverages the Windows Server variant of the Windows setup, which skips most hardware compatibility checks. It allows Windows 11 to be installed on unsupported PCs, bypassing the usual system requirements. Importantly, while the setup runs in server mode, it installs the standard Windows 11 (not the server version). 3 | 4 | 5 | # Function to open a file selection dialog and return the selected file path 6 | function Select-ISOFile { 7 | Add-Type -AssemblyName System.Windows.Forms 8 | $fileDialog = New-Object System.Windows.Forms.OpenFileDialog 9 | $fileDialog.Filter = "ISO Files (*.iso)|*.iso" 10 | $fileDialog.Title = "Select an ISO File" 11 | $fileDialog.InitialDirectory = [Environment]::GetFolderPath("Desktop") # Start at Desktop 12 | 13 | if ($fileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { 14 | return $fileDialog.FileName 15 | } else { 16 | return $null 17 | } 18 | } 19 | 20 | # Prompt user to select an ISO file 21 | $isoFilePath = Select-ISOFile 22 | 23 | if (-not $isoFilePath -or -not (Test-Path $isoFilePath)) { 24 | Write-Host "No valid ISO file selected. Exiting." -ForegroundColor Red 25 | exit 26 | } 27 | 28 | Write-Host "Selected ISO file: $isoFilePath" -ForegroundColor Green 29 | Write-Host "Mounting the ISO..." -ForegroundColor Blue 30 | 31 | # Mount the ISO file 32 | try { 33 | Mount-DiskImage -ImagePath $isoFilePath 34 | Write-Host "ISO mounted successfully." -ForegroundColor Green 35 | } catch { 36 | Write-Host "Failed to mount the ISO. Error: $_" -ForegroundColor Red 37 | exit 38 | } 39 | 40 | # Retrieve the drive letter of the mounted ISO 41 | $mountedVolume = Get-Volume | Where-Object { $_.DriveType -eq 'CD-ROM' -and $_.FileSystemLabel -ne $null } | Select-Object -First 1 42 | 43 | if (-not $mountedVolume) { 44 | Write-Host "Failed to find mounted drive. Exiting." -ForegroundColor Red 45 | exit 46 | } 47 | 48 | $driveLetter = $mountedVolume.DriveLetter + ":" 49 | Write-Host "Mounted drive letter: $driveLetter" -ForegroundColor Green 50 | 51 | # Check for the Sources folder 52 | $sourcesFolderPath = Join-Path -Path $driveLetter -ChildPath "sources" 53 | if (-not (Test-Path $sourcesFolderPath)) { 54 | Write-Host "Sources folder not found at $sourcesFolderPath. Exiting." -ForegroundColor Red 55 | exit 56 | } 57 | 58 | Write-Host "Sources folder found at $sourcesFolderPath" -ForegroundColor Green 59 | 60 | # Create the path to the setup file 61 | $setupFile = Join-Path -Path $sourcesFolderPath -ChildPath "setupprep.exe" 62 | 63 | # Ensure $setupFile is a valid string 64 | if (-not (Test-Path $setupFile)) { 65 | Write-Host "setupprep.exe not found in Sources folder. Exiting." -ForegroundColor Red 66 | exit 67 | } 68 | 69 | Write-Host "Launching Windows setup. Path: $setupFile" -ForegroundColor Blue 70 | 71 | # Launch the setup process 72 | try { 73 | Start-Process -FilePath $setupFile -ArgumentList "/product server" -NoNewWindow 74 | Write-Host "Windows setup launched successfully. Follow the instructions on the screen." -ForegroundColor Green 75 | } catch { 76 | Write-Host "Error launching Windows setup: $_" -ForegroundColor Red 77 | } 78 | -------------------------------------------------------------------------------- /plugins/Windows Old Remover.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Windows Old Remover", 3 | "PlugInfo": "The Windows Old Remover plugin allows users to easily remove the 'Windows.old' folder, which contains files from a previous Windows installation. After upgrading to a new version of Windows, the 'Windows.old' folder may occupy significant disk space. This plugin utilizes the DISM command to safely delete this folder, freeing up valuable storage on your system. Please note that once this folder is deleted, you will no longer be able to revert to the previous Windows version through the Recovery options.\n\n**Error Handling**: If you encounter 'Error 1168' during the removal process, it means the 'Windows.old' folder has already been deleted or is not available for rollback. Ensure you have backups before proceeding!", 4 | "PlugCheck": [], 5 | "PlugCategory": "System (Plugins)", 6 | "PlugDo": [ 7 | "cmd.exe /c DISM /Online /Remove-OSUninstall" 8 | ], 9 | "PlugUndo": [ 10 | "powershell -Command \"Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('No undo is available for this deletion. To restore files, use a backup solution.', 'Info', [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)\"" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /plugins/Windows Rollback Timer.json: -------------------------------------------------------------------------------- 1 | { 2 | "PlugID": "Windows Rollback Timer", 3 | "PlugInfo": "This plugin checks and sets the uninstall window for reverting to a previous Windows version after an upgrade. The time frame can be configured up to 60 days. After a Windows upgrade (e.g., via Windows Update to version 1803), a copy of the previous Windows version is stored in the 'Windows.old' folder. This allows users to return to the prior version through the 'Recovery' option under 'Update & Security' in Windows Settings. By default, this rollback option is available for only 10 days, provided the 'Windows.old' folder hasn’t been deleted. However, this time frame can be extended up to 60 days using this plugin. \n\n**Error Handling**: If 'Error 1168' appears when attempting to set the rollback period, this indicates that the 'Windows.old' folder has been deleted, making a rollback impossible.", 4 | "PlugCheck": [], 5 | "PlugCategory": "System (Plugins)", 6 | "PlugDo": [ 7 | "cmd.exe /c DISM /Online /Get-OSUninstallWindow", 8 | "cmd.exe /c DISM /Online /Set-OSUninstallWindow /Value:60" 9 | ], 10 | "PlugUndo": [ 11 | "powershell -Command \"Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('No undo is available for this rollback time setting. To change it, please use DISM with a new value.', 'Info', [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)\"" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /plugins/plugins_manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "ChrisTitusApp.ps1": "Chris Titus Tech's Windows Utility - Install Programs, Tweaks, Fixes, and Updates. Dev: https://github.com/ChrisTitusTech/winutil", 3 | "Clear Icon Cache.json": "Clears the Windows icon cache to fix display issues or refresh icons.", 4 | "Create Restore Point.ps1": "Creates a system restore point to safeguard your current system state.", 5 | "File Extensions Visibility.json": "Toggles the visibility of file extensions in Windows Explorer.", 6 | "Remove default apps.ps1": "Uninstalls default Windows applications to declutter your system.", 7 | "Remove Windows AI.ps1": "Removes Windows AI features, such as Copilot, to optimize performance. Dev: https://raw.githubusercontent.com/zoicware/RemoveWindowsAI/main/RemoveAi.ps1 ", 8 | "Restart Explorer.ps1": "Restarts the Windows Explorer process to refresh the desktop and taskbar.", 9 | "Restore all built-in apps.ps1": "Reinstalls all default Windows apps that have been removed.", 10 | "Snap Assist Flyout.json": "Enables or disables the Snap Assist flyout feature for window management.", 11 | "Uninstall OneDrive.ps1": "Completely uninstalls OneDrive from your system.", 12 | "Use light theme.json": "Switches the Windows interface to the light theme.", 13 | "User Account Control.json": "Adjusts User Account Control (UAC) settings for security and convenience.", 14 | "Windows Rollback Timer.json": "This plugin adjusts the time window available to revert to a previous version of Windows after an upgrade.", 15 | "Windows Old Remover.json": "This plugin will remove the ability to roll back a PC to a previous installation of Windows.", 16 | "Force Windows Update to Windows 11 24H2.json": "Forces Windows Update to initiate the upgrade to Windows 11 version 24H2.", 17 | "Inplace Upgrade to 24H2 via Registry.json": "Sets registry keys to enable an in-place upgrade to Windows 11 version 24H2.", 18 | "Windows 11 24H2 Inplace Upgrade (Server Setup).ps1": "Upgrades to Windows 11 version 24H2 while bypassing hardware compatibility checks. This method leverages the Windows Server variant of the Windows setup, which skips most hardware compatibility checks. It allows Windows 11 to be installed on unsupported PCs, bypassing the usual system requirements. Importantly, while the setup runs in server mode, it installs the standard Windows 11 (not the server version).", 19 | "AppMatrix.json": "Intelligent Bloatware Filters, curated with the power of AI. Compatible starting with Bloatynosy version 1.0.6.", 20 | "AppInstaller.json": "Install Chrome, Firefox, 7zip, VLC with winget", 21 | "Block New Outlook.json": "This plugin removes the pre-installed Outlook app on Windows 11 builds after 23H2 and blocks future installations." 22 | } 23 | -------------------------------------------------------------------------------- /src/Bloatynosy/App.config: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <configuration> 3 | <startup> 4 | <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/> 5 | </startup> 6 | <runtime> 7 | <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 8 | <dependentAssembly> 9 | <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 10 | <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/> 11 | </dependentAssembly> 12 | </assemblyBinding> 13 | </runtime> 14 | </configuration> 15 | -------------------------------------------------------------------------------- /src/Bloatynosy/AppIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/AppIcon.ico -------------------------------------------------------------------------------- /src/Bloatynosy/AppIconPNG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/AppIconPNG.png -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/AI/CopilotTaskbar.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.AI 7 | { 8 | internal class CopilotTaskbar : FeatureBase 9 | { 10 | public CopilotTaskbar(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | 15 | private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\WindowsCopilot"; 16 | private const string valueName = "TurnOffWindowsCopilot"; 17 | private const int desiredValue = 1; 18 | 19 | public override string GetRegistryKey() 20 | { 21 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 22 | } 23 | 24 | public override string ID() 25 | { 26 | return BloatynosyNue.Locales.Strings._aiCopilotTaskbar; 27 | } 28 | 29 | public override string Info() 30 | { 31 | return BloatynosyNue.Locales.Strings._aiCopilotTaskbar_desc; 32 | } 33 | 34 | public override bool CheckFeature() 35 | { 36 | return Utils.IntEquals(keyName, valueName, 1); 37 | } 38 | 39 | public override bool DoFeature() 40 | { 41 | try 42 | { 43 | Registry.SetValue(keyName, valueName, desiredValue, RegistryValueKind.DWord); 44 | return true; 45 | } 46 | catch (Exception ex) 47 | { 48 | logger.Log("Code red in " + ex.Message, Color.Red); 49 | } 50 | 51 | return false; 52 | } 53 | 54 | public override bool UndoFeature() 55 | { 56 | try 57 | { 58 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 59 | return true; 60 | } 61 | catch (Exception ex) 62 | { 63 | logger.Log("Code red in " + ex.Message, Color.Red); 64 | } 65 | 66 | return false; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/AI/RecallMachine.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.AI 7 | { 8 | internal class RecallMachine : FeatureBase 9 | { 10 | public RecallMachine(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | 15 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsAI"; 16 | private const string valueName = "DisableAIDataAnalysis"; 17 | private const int desiredValue = 0; 18 | 19 | public override string GetRegistryKey() 20 | { 21 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 22 | } 23 | 24 | public override string ID() 25 | { 26 | return BloatynosyNue.Locales.Strings._aiRecallMachine; 27 | } 28 | 29 | public override string Info() 30 | { 31 | return BloatynosyNue.Locales.Strings._aiRecallMachine_desc; 32 | } 33 | 34 | public override bool CheckFeature() 35 | { 36 | // Check if reg key exists 37 | object value = Registry.GetValue(keyName, valueName, null); 38 | if (value == null) 39 | { 40 | // Key does not exist, turn off feature 41 | return false; 42 | } 43 | 44 | // Key exists, check if value is desired value 45 | return (int)value != desiredValue; 46 | } 47 | 48 | public override bool DoFeature() 49 | { 50 | try 51 | { 52 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 53 | logger.Log("You've even disabled system-wide Snapshots for all users now.", Color.Green); 54 | return true; 55 | } 56 | catch (Exception ex) 57 | { 58 | logger.Log("Code red in " + ex.Message, Color.Red); 59 | } 60 | 61 | return false; 62 | } 63 | 64 | public override bool UndoFeature() 65 | { 66 | try 67 | { 68 | Registry.SetValue(keyName, valueName, desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 69 | return true; 70 | } 71 | catch (Exception ex) 72 | { 73 | logger.Log("Code red in " + ex.Message, Color.Red); 74 | } 75 | 76 | return false; 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/AI/RecallUser.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.AI 7 | { 8 | internal class RecallUser : FeatureBase 9 | { 10 | public RecallUser(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | 15 | private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\WindowsAI"; 16 | private const string valueName = "DisableAIDataAnalysis"; 17 | private const int desiredValue = 0; 18 | 19 | public override string GetRegistryKey() 20 | { 21 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 22 | } 23 | 24 | public override string ID() 25 | { 26 | return BloatynosyNue.Locales.Strings._aiRecallUser; 27 | } 28 | 29 | public override string Info() 30 | { 31 | return BloatynosyNue.Locales.Strings._aiRecallUser_desc; 32 | } 33 | 34 | public override bool CheckFeature() 35 | { 36 | // Check if reg key exists 37 | object value = Registry.GetValue(keyName, valueName, null); 38 | if (value == null) 39 | { 40 | // Key does not exist, turn off feature 41 | return false; 42 | } 43 | 44 | // Key exists, check if value is desired value 45 | return (int)value != desiredValue; 46 | } 47 | 48 | public override bool DoFeature() 49 | { 50 | try 51 | { 52 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 53 | logger.Log("You've got snapshots disabled.", Color.Green); 54 | return true; 55 | } 56 | catch (Exception ex) 57 | { 58 | logger.Log("Code red in " + ex.Message, Color.Red); 59 | } 60 | 61 | return false; 62 | } 63 | 64 | public override bool UndoFeature() 65 | { 66 | try 67 | { 68 | Registry.SetValue(keyName, valueName, desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 69 | return true; 70 | } 71 | catch (Exception ex) 72 | { 73 | logger.Log("Code red in " + ex.Message, Color.Red); 74 | } 75 | 76 | return false; 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/FileExplorerAds.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | internal class FileExplorerAds : FeatureBase 9 | { 10 | public FileExplorerAds(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const string valueName = "ShowSyncProviderNotifications"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._adsFileExplorerAds; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._adsFileExplorerAds_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return (Utils.IntEquals(keyName, valueName, desiredValue)); 36 | } 37 | 38 | public override bool DoFeature() 39 | { 40 | try 41 | { 42 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 43 | return true; 44 | } 45 | catch (Exception ex) 46 | { 47 | logger.Log("Code red in " + ex.Message, Color.Red); 48 | } 49 | 50 | return false; 51 | } 52 | 53 | public override bool UndoFeature() 54 | { 55 | try 56 | { 57 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 58 | return true; 59 | } 60 | catch (Exception ex) 61 | { 62 | logger.Log("Code red in " + ex.Message, Color.Red); 63 | } 64 | 65 | return false; 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/FinishSetupAds.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | using System.Runtime.Remoting.Messaging; 6 | 7 | namespace Settings.Ads 8 | { 9 | public class FinishSetupAds : FeatureBase 10 | { 11 | public FinishSetupAds(Logger logger) : base(logger) 12 | { 13 | } 14 | 15 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement"; 16 | private const string valueName = "ScoobeSystemSettingEnabled"; 17 | private const int desiredValue = 0; 18 | 19 | public override string ID() 20 | { return BloatynosyNue.Locales.Strings._adsFinishSetupAds; } 21 | 22 | public override string Info() 23 | { return BloatynosyNue.Locales.Strings._adsFinishSetupAds_desc; } 24 | 25 | public override string GetRegistryKey() 26 | { 27 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 28 | } 29 | 30 | public override bool CheckFeature() 31 | { 32 | return Utils.IntEquals(keyName, valueName, 0); 33 | } 34 | 35 | public override bool DoFeature() 36 | { 37 | try 38 | { 39 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 40 | 41 | return true; 42 | } 43 | catch (Exception ex) 44 | { 45 | logger.Log("Code red in " + ex.Message, Color.Red); 46 | } 47 | 48 | return false; 49 | } 50 | 51 | public override bool UndoFeature() 52 | { 53 | try 54 | { 55 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 56 | 57 | return true; 58 | } 59 | catch (Exception ex) 60 | { 61 | logger.Log("Code red in " + ex.Message, Color.Red); 62 | } 63 | 64 | return false; 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/LockScreenAds.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | internal class LockScreenAds : FeatureBase 9 | { 10 | public LockScreenAds(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const string valueName = "RotatingLockScreenOverlayEnabled"; 16 | private const string valueName2 = "SubscribedContent-338387Enabled"; 17 | private const int desiredValue = 0; 18 | 19 | public override string ID() { return BloatynosyNue.Locales.Strings._adsLockScreenAds; } 20 | 21 | public override string Info() { return BloatynosyNue.Locales.Strings._adsLockScreenAds_desc; } 22 | 23 | public override string GetRegistryKey() 24 | { 25 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 26 | } 27 | 28 | public override bool CheckFeature() 29 | { 30 | return (Utils.IntEquals(keyName, valueName, desiredValue) && 31 | Utils.IntEquals(keyName, valueName2, desiredValue) 32 | ); 33 | } 34 | 35 | public override bool DoFeature() 36 | { 37 | try 38 | { 39 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 40 | Registry.SetValue(keyName, valueName2, 0, Microsoft.Win32.RegistryValueKind.DWord); 41 | 42 | return true; 43 | } 44 | catch (Exception ex) 45 | { 46 | logger.Log("Code red in " + ex.Message, Color.Red); 47 | } 48 | 49 | return false; 50 | } 51 | 52 | public override bool UndoFeature() 53 | { 54 | try 55 | { 56 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 57 | Registry.SetValue(keyName, valueName2, 1, Microsoft.Win32.RegistryValueKind.DWord); 58 | 59 | return true; 60 | } 61 | catch (Exception ex) 62 | { 63 | logger.Log("Code red in " + ex.Message, Color.Red); 64 | } 65 | 66 | return false; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/PersonalizedAds.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | public class PersonalizedAds : FeatureBase 9 | { 10 | public PersonalizedAds(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo"; 15 | private const string valueName = "Enabled"; 16 | private const int desiredValue = 0; 17 | 18 | public override string ID() { return BloatynosyNue.Locales.Strings._adsPersonalizedAds; } 19 | 20 | public override string Info() { return BloatynosyNue.Locales.Strings._adsPersonalizedAds_desc; } 21 | 22 | public override string GetRegistryKey() 23 | { 24 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 25 | } 26 | 27 | public override bool CheckFeature() 28 | { 29 | return Utils.IntEquals(keyName, valueName, 0); 30 | } 31 | 32 | public override bool DoFeature() 33 | { 34 | try 35 | { 36 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 37 | 38 | return true; 39 | } 40 | catch (Exception ex) 41 | { 42 | logger.Log("Code red in " + ex.Message, Color.Red); 43 | } 44 | 45 | return false; 46 | } 47 | 48 | public override bool UndoFeature() 49 | { 50 | try 51 | { 52 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 53 | 54 | return true; 55 | } 56 | catch (Exception ex) 57 | { 58 | logger.Log("Code red in " + ex.Message, Color.Red); 59 | } 60 | 61 | return false; 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/SettingsAds.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | internal class SettingsAds : FeatureBase 9 | { 10 | public SettingsAds(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const string valueName = "SubscribedContent-338393Enabled"; 16 | private const string valueName2 = "SubscribedContent-353694Enabled"; 17 | private const string valueName3 = "SubscribedContent-353696Enabled"; 18 | 19 | private const int desiredValue = 0; 20 | 21 | public override string ID() { return BloatynosyNue.Locales.Strings._adsSettingsAds; } 22 | 23 | public override string Info() { return BloatynosyNue.Locales.Strings._adsSettingsAds_desc; } 24 | 25 | public override string GetRegistryKey() 26 | { 27 | return quot;{keyName} | Value: {valueName} + {valueName2} + {valueName3} | Desired Value: {desiredValue}"; 28 | } 29 | 30 | public override bool CheckFeature() 31 | { 32 | return (Utils.IntEquals(keyName, valueName, desiredValue) && 33 | Utils.IntEquals(keyName, valueName2, desiredValue) && 34 | Utils.IntEquals(keyName, valueName3, desiredValue) 35 | ); 36 | } 37 | 38 | public override bool DoFeature() 39 | { 40 | try 41 | { 42 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 43 | Registry.SetValue(keyName, valueName2, 0, Microsoft.Win32.RegistryValueKind.DWord); 44 | Registry.SetValue(keyName, valueName3, 0, Microsoft.Win32.RegistryValueKind.DWord); 45 | 46 | return true; 47 | } 48 | catch (Exception ex) 49 | { 50 | logger.Log("Code red in " + ex.Message, Color.Red); 51 | } 52 | 53 | return false; 54 | } 55 | 56 | public override bool UndoFeature() 57 | { 58 | try 59 | { 60 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 61 | Registry.SetValue(keyName, valueName2, 1, Microsoft.Win32.RegistryValueKind.DWord); 62 | Registry.SetValue(keyName, valueName3, 1, Microsoft.Win32.RegistryValueKind.DWord); 63 | 64 | return true; 65 | } 66 | catch (Exception ex) 67 | { 68 | logger.Log("Code red in " + ex.Message, Color.Red); 69 | } 70 | 71 | return false; 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/StartmenuAds.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | internal class StartmenuAds : FeatureBase 9 | { 10 | public StartmenuAds(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const string valueName = "Start_IrisRecommendations"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._adsStartmenuAds; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._adsStartmenuAds_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/TailoredExperiences.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | internal class TailoredExperiences : FeatureBase 9 | { 10 | public TailoredExperiences(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy"; 15 | private const string valueName = "TailoredExperiencesWithDiagnosticDataEnabled"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._adsTailoredExperiences; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._adsTailoredExperiences_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/TipsAndSuggestions.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | internal class TipsAndSuggestions : FeatureBase 9 | { 10 | public TipsAndSuggestions(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const string valueName = "SubscribedContent-338389Enabled"; 16 | private const int desiredValue = 0; 17 | 18 | public override string ID() 19 | { return BloatynosyNue.Locales.Strings._adsTipsAndSuggestions; } 20 | 21 | public override string Info() 22 | { return BloatynosyNue.Locales.Strings._adsTipsAndSuggestions_desc; } 23 | 24 | public override string GetRegistryKey() 25 | { 26 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 27 | } 28 | 29 | public override bool CheckFeature() 30 | { 31 | return (Utils.IntEquals(keyName, valueName, desiredValue) 32 | ); 33 | } 34 | 35 | public override bool DoFeature() 36 | { 37 | try 38 | { 39 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 40 | 41 | return true; 42 | } 43 | catch (Exception ex) 44 | { 45 | logger.Log("Code red in " + ex.Message, Color.Red); 46 | } 47 | 48 | return false; 49 | } 50 | 51 | public override bool UndoFeature() 52 | { 53 | try 54 | { 55 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 56 | 57 | return true; 58 | } 59 | catch (Exception ex) 60 | { 61 | logger.Log("Code red in " + ex.Message, Color.Red); 62 | } 63 | 64 | return false; 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Ads/WelcomeExperienceAds.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Ads 7 | { 8 | public class WelcomeExperienceAds : FeatureBase 9 | { 10 | public WelcomeExperienceAds(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const string valueName = "SubscribedContent-310093Enabled"; 16 | private const int desiredValue = 0; 17 | 18 | public override string ID() 19 | { return BloatynosyNue.Locales.Strings._adsWelcomeExperienceAds; } 20 | 21 | public override string Info() 22 | { return BloatynosyNue.Locales.Strings._adsWelcomeExperienceAds_desc; } 23 | 24 | public override string GetRegistryKey() 25 | { 26 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 27 | } 28 | 29 | public override bool CheckFeature() 30 | { 31 | return Utils.IntEquals(keyName, valueName, 0); 32 | } 33 | 34 | public override bool DoFeature() 35 | { 36 | try 37 | { 38 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 39 | 40 | return true; 41 | } 42 | catch (Exception ex) 43 | { 44 | logger.Log("Code red in " + ex.Message, Color.Red); 45 | } 46 | 47 | return false; 48 | } 49 | 50 | public override bool UndoFeature() 51 | { 52 | try 53 | { 54 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 55 | 56 | return true; 57 | } 58 | catch (Exception ex) 59 | { 60 | logger.Log("Code red in " + ex.Message, Color.Red); 61 | } 62 | 63 | return false; 64 | } 65 | } 66 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/FeatureBase.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | 3 | namespace BloatynosyNue 4 | { 5 | public abstract class FeatureBase 6 | { 7 | protected readonly Logger logger; 8 | 9 | public Logger Logger => logger; 10 | 11 | protected FeatureBase(Logger logger) 12 | { 13 | this.logger = logger; 14 | } 15 | 16 | public abstract string ID(); 17 | 18 | public abstract string Info(); 19 | 20 | public abstract bool CheckFeature(); 21 | 22 | public abstract bool DoFeature(); 23 | 24 | public abstract bool UndoFeature(); 25 | 26 | public abstract string GetRegistryKey(); 27 | 28 | public string GetCategory() 29 | { 30 | // Extracts the category from the namespace (e.g., "Ads" from "Settings.Ads") 31 | return GetType().Namespace?.Split('.').Last() ?? "Unknown"; 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/FeatureNode.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace BloatynosyNue 4 | { 5 | internal class FeatureNode : TreeNode 6 | { 7 | public FeatureBase Feature { get; private set; } 8 | 9 | public FeatureNode(FeatureBase feature) 10 | { 11 | Feature = feature; 12 | Text = Feature.ID(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Gaming/GameDVR.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Gaming 7 | { 8 | internal class GameDVR : FeatureBase 9 | { 10 | public GameDVR(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\System\GameConfigStore"; 15 | 16 | // 0 = Enabled, 2 = Disabled 17 | private const string keyName2 = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\ApplicationManagement\AllowGameDVR"; 18 | 19 | private const string valueName = "GameDVR_Enabled"; 20 | private const string valueName2 = "GameDVR_FSEBehaviorMode"; 21 | private const string valueName3 = "value"; 22 | 23 | public override string GetRegistryKey() 24 | { 25 | return quot;{keyName} |Value: {valueName} | {valueName2} | {keyName2} | {valueName3} "; 26 | } 27 | 28 | public override string ID() 29 | { 30 | return BloatynosyNue.Locales.Strings._gamingGameDVR; 31 | } 32 | 33 | public override string Info() 34 | { 35 | return BloatynosyNue.Locales.Strings._gamingGameDVR_desc; 36 | } 37 | 38 | public override bool CheckFeature() 39 | { 40 | return Utils.IntEquals(keyName, valueName, 0) && 41 | Utils.IntEquals(keyName, valueName2, 2) && 42 | Utils.IntEquals(keyName2, valueName3, 0); 43 | } 44 | 45 | public override bool DoFeature() 46 | { 47 | try 48 | { 49 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 50 | Registry.SetValue(keyName, valueName2, 2, RegistryValueKind.DWord); 51 | Registry.SetValue(keyName2, valueName3, 0, RegistryValueKind.DWord); 52 | 53 | return true; 54 | } 55 | catch (Exception ex) 56 | { 57 | logger.Log("Code red in " + ex.Message, Color.Red); 58 | } 59 | 60 | return false; 61 | } 62 | 63 | public override bool UndoFeature() 64 | { 65 | try 66 | { 67 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 68 | Registry.SetValue(keyName, valueName2, 0, RegistryValueKind.DWord); 69 | Registry.SetValue(keyName2, valueName3, 1, RegistryValueKind.DWord); 70 | 71 | return true; 72 | } 73 | catch (Exception ex) 74 | { 75 | logger.Log("Code red in " + ex.Message, Color.Red); 76 | } 77 | 78 | return false; 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Gaming/PowerThrotteling.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Gaming 7 | { 8 | internal class PowerThrottling : FeatureBase 9 | { 10 | public PowerThrottling(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling"; 15 | private const string valueName = "PowerThrottlingOff"; 16 | private const int desiredValue = 1; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._gamingPowerThrottling; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._gamingPowerThrottling_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return Utils.IntEquals(keyName, valueName, desiredValue); 36 | } 37 | 38 | public override bool DoFeature() 39 | { 40 | try 41 | { 42 | Registry.SetValue(keyName, valueName, desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 43 | 44 | return true; 45 | } 46 | catch (Exception ex) 47 | { 48 | logger.Log("Code red in " + ex.Message, Color.Red); 49 | } 50 | 51 | return false; 52 | } 53 | 54 | public override bool UndoFeature() 55 | { 56 | try 57 | { 58 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 59 | 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Gaming/VisualFX.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | using System.Windows.Forms; 6 | 7 | namespace Settings.Gaming 8 | { 9 | internal class VisualFX: FeatureBase 10 | { 11 | public VisualFX(Logger logger) : base(logger) 12 | { 13 | } 14 | 15 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects"; 16 | private const string valueName = "VisualFXSetting"; 17 | private const int desiredValue = 2; 18 | 19 | public override string GetRegistryKey() 20 | { 21 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 22 | } 23 | 24 | public override string ID() 25 | { 26 | return BloatynosyNue.Locales.Strings._gamingVisualFX; 27 | } 28 | 29 | public override string Info() 30 | { 31 | return BloatynosyNue.Locales.Strings._gamingVisualFX_desc; 32 | } 33 | 34 | public override bool CheckFeature() 35 | { 36 | return Utils.IntEquals(keyName, valueName, 0); 37 | } 38 | 39 | public override bool DoFeature() 40 | { 41 | try 42 | { 43 | Registry.SetValue(keyName, valueName,0, Microsoft.Win32.RegistryValueKind.DWord); 44 | 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 2, Microsoft.Win32.RegistryValueKind.DWord); 60 | 61 | return true; 62 | } 63 | catch (Exception ex) 64 | { 65 | logger.Log("Code red in " + ex.Message, Color.Red); 66 | } 67 | 68 | return false; 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Privacy/ActivityHistory.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Privacy 7 | { 8 | internal class ActivityHistory : FeatureBase 9 | { 10 | public ActivityHistory(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy"; 15 | private const string valueName = "ActivityHistoryEnabled"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._privacyActivityHistory; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._privacyActivityHistory_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 60 | 61 | return true; 62 | } 63 | catch (Exception ex) 64 | { 65 | logger.Log("Code red in " + ex.Message, Color.Red); 66 | } 67 | 68 | return false; 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Privacy/LocationTracking.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Privacy 7 | { 8 | internal class LocationTracking : FeatureBase 9 | { 10 | public LocationTracking(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\LocationAndSensors"; 15 | private const string valueName = "LocationEnabled"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._privacyLocationTracking; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._privacyLocationTracking_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return Utils.IntEquals(keyName, valueName,desiredValue); 36 | } 37 | 38 | public override bool DoFeature() 39 | { 40 | try 41 | { 42 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 43 | return true; 44 | } 45 | catch (Exception ex) 46 | { 47 | logger.Log("Code red in " + ex.Message, Color.Red); 48 | } 49 | 50 | return false; 51 | } 52 | 53 | public override bool UndoFeature() 54 | { 55 | try 56 | { 57 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 58 | 59 | return true; 60 | } 61 | catch (Exception ex) 62 | { 63 | logger.Log("Code red in " + ex.Message, Color.Red); 64 | } 65 | 66 | return false; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Privacy/PrivacyExperience.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Privacy 7 | { 8 | public class PrivacyExperience : FeatureBase 9 | { 10 | public PrivacyExperience(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OOBE"; 15 | private const string valueName = "DisablePrivacyExperience"; 16 | private const int desiredValue = 0; 17 | 18 | public override string ID() { return BloatynosyNue.Locales.Strings._privacyPrivacyExperience; } 19 | 20 | public override string Info() { return BloatynosyNue.Locales.Strings._privacyPrivacyExperience_desc; } 21 | 22 | public override string GetRegistryKey() 23 | { 24 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 25 | } 26 | 27 | public override bool CheckFeature() 28 | { 29 | return !Utils.IntEquals(keyName, valueName, desiredValue); 30 | } 31 | 32 | public override bool DoFeature() 33 | { 34 | try 35 | { 36 | Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord); 37 | 38 | return true; 39 | } 40 | catch (Exception ex) 41 | { 42 | logger.Log("Code red in " + ex.Message, Color.Red); 43 | } 44 | 45 | return false; 46 | } 47 | 48 | public override bool UndoFeature() 49 | { 50 | try 51 | { 52 | Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord); 53 | 54 | return true; 55 | } 56 | catch (Exception ex) 57 | { 58 | logger.Log("Code red in " + ex.Message, Color.Red); 59 | } 60 | 61 | return false; 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/Privacy/Telemetry.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Privacy 7 | { 8 | public class Telemetry : FeatureBase 9 | { 10 | public Telemetry(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string dataCollection = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DataCollection"; 15 | private const string diagTrack = @"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\DiagTrack"; 16 | 17 | public override string ID() { return BloatynosyNue.Locales.Strings._privacyTelemetry; } 18 | 19 | public override string Info() { return BloatynosyNue.Locales.Strings._privacyTelemetry_desc; } 20 | 21 | public override string GetRegistryKey() 22 | { 23 | return quot;{dataCollection} | {diagTrack}"; 24 | } 25 | 26 | public override bool CheckFeature() 27 | { 28 | return ( 29 | Utils.IntEquals(dataCollection, "AllowTelemetry", 0) && 30 | Utils.IntEquals(diagTrack, "Start", 2) 31 | 32 | ); 33 | } 34 | 35 | public override bool DoFeature() 36 | { 37 | try 38 | { 39 | Registry.SetValue(dataCollection, "AllowTelemetry", 0, RegistryValueKind.DWord); 40 | Registry.SetValue(diagTrack, "Start", 2, RegistryValueKind.DWord); 41 | 42 | return true; 43 | } 44 | catch (Exception ex) 45 | { 46 | logger.Log("Code red in " + ex.Message, Color.Red); 47 | } 48 | 49 | return false; 50 | } 51 | 52 | public override bool UndoFeature() 53 | { 54 | try 55 | { 56 | Registry.SetValue(dataCollection, "AllowTelemetry", 1, RegistryValueKind.DWord); 57 | Registry.SetValue(diagTrack, "Start", 4, RegistryValueKind.DWord); 58 | 59 | return true; 60 | } 61 | catch (Exception ex) 62 | { 63 | logger.Log("Code red in " + ex.Message, Color.Red); 64 | } 65 | 66 | return false; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/UI/FullContextMenus.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Personalization 7 | { 8 | internal class FullContextMenus : FeatureBase 9 | { 10 | public FullContextMenus(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"; 15 | 16 | public override string GetRegistryKey() 17 | { 18 | return quot;{keyName}"; 19 | } 20 | 21 | public override string ID() 22 | { 23 | return BloatynosyNue.Locales.Strings._uiFullContextMenus; 24 | } 25 | 26 | public override string Info() 27 | { 28 | return BloatynosyNue.Locales.Strings._uiFullContextMenus_desc; 29 | } 30 | 31 | public override bool CheckFeature() 32 | { 33 | try 34 | { 35 | object value = Registry.GetValue(keyName, "", null); 36 | return value != null; // Return true if value is not null 37 | } 38 | catch (Exception ex) 39 | { 40 | logger.Log("Error occurred while checking: " + ex.Message, Color.Red); 41 | return false; 42 | } 43 | } 44 | 45 | public override bool DoFeature() 46 | { 47 | try 48 | { 49 | Registry.SetValue(keyName, "", "", RegistryValueKind.String); 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Error occurred while enabling: " + ex.Message, Color.Red); 55 | return false; 56 | } 57 | } 58 | 59 | public override bool UndoFeature() 60 | { 61 | try 62 | { 63 | Registry.CurrentUser.DeleteSubKeyTree(@"Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}", false); 64 | return true; 65 | } 66 | catch (Exception ex) 67 | { 68 | logger.Log("Error occurred while disabling: " + ex.Message, Color.Red); 69 | return false; 70 | } 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/UI/LockScreen.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Personalization 7 | { 8 | internal class LockScreen : FeatureBase 9 | { 10 | public LockScreen(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization"; 15 | private const string valueName = "NoLockScreen"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._uiLockScreen; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return "This feature will disable the personalized lock screen."; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return !( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | 41 | public override bool DoFeature() 42 | { 43 | try 44 | { 45 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 46 | return true; 47 | } 48 | catch (Exception ex) 49 | { 50 | logger.Log("Code red in " + ex.Message, Color.Red); 51 | } 52 | 53 | return false; 54 | } 55 | 56 | public override bool UndoFeature() 57 | { 58 | try 59 | { 60 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 61 | return true; 62 | } 63 | catch (Exception ex) 64 | { 65 | logger.Log("Code red in " + ex.Message, Color.Red); 66 | } 67 | 68 | return false; 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/UI/SearchboxTaskbarMode.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Personalization 7 | { 8 | internal class SearchboxTaskbarMode : FeatureBase 9 | { 10 | public SearchboxTaskbarMode(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search"; 15 | private const string valueName = "SearchboxTaskbarMode"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._uiSearchboxTaskbarMode; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._uiSearchboxTaskbarMode_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 2, RegistryValueKind.DWord); 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/UI/ShowOrHideMostUsedApps.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Personalization 7 | { 8 | internal class ShowOrHideMostUsedApps : FeatureBase 9 | { 10 | public ShowOrHideMostUsedApps(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer"; 15 | private const string valueName = "ShowOrHideMostUsedApps"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._uiShowOrHideMostUsedApps; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._uiShowOrHideMostUsedApps_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 2, RegistryValueKind.DWord); 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/UI/ShowTaskViewButton.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using BloatynosyNue; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Personalization 7 | { 8 | internal class ShowTaskViewButton : FeatureBase 9 | { 10 | public ShowTaskViewButton(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const string valueName = "ShowTaskViewButton"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._uiShowTaskViewButton; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._uiShowTaskViewButton_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/UI/StartLayout.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Personalization 7 | { 8 | internal class StartLayout : FeatureBase 9 | { 10 | public StartLayout(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const string valueName = "Start_Layout"; 16 | private const int desiredValue = 1; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._uiStartLayout; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._uiStartLayout_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Experience/UI/TaskbarAlignment.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Settings.Personalization 7 | { 8 | internal class TaskbarAlignment : FeatureBase 9 | { 10 | public TaskbarAlignment(Logger logger) : base(logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const string valueName = "TaskbarAl"; 16 | private const int desiredValue = 0; 17 | 18 | public override string GetRegistryKey() 19 | { 20 | return quot;{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; 21 | } 22 | 23 | public override string ID() 24 | { 25 | return BloatynosyNue.Locales.Strings._uiTaskbarAlignment; 26 | } 27 | 28 | public override string Info() 29 | { 30 | return BloatynosyNue.Locales.Strings._uiTaskbarAlignment_desc; 31 | } 32 | 33 | public override bool CheckFeature() 34 | { 35 | return ( 36 | Utils.IntEquals(keyName, valueName, desiredValue) 37 | ); 38 | } 39 | 40 | public override bool DoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public override bool UndoFeature() 56 | { 57 | try 58 | { 59 | Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); 60 | return true; 61 | } 62 | catch (Exception ex) 63 | { 64 | logger.Log("Code red in " + ex.Message, Color.Red); 65 | } 66 | 67 | return false; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Helper/Helper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Net.Http; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace BloatynosyNue.Helpers 8 | { 9 | public static class PluginHelper 10 | { 11 | // Check if the plugin environment is ready 12 | public static bool IsPluginEnvironmentReady() 13 | { 14 | return Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins")) && 15 | File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Newtonsoft.Json.dll")); 16 | } 17 | 18 | // Download required plugin files 19 | public static async Task DownloadPlugins() 20 | { 21 | string pluginFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins"); 22 | string downloadUrl = "https://github.com/builtbybel/Bloatynosy/raw/main/plugins/Newtonsoft.Json.dll"; 23 | string dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Newtonsoft.Json.dll"); 24 | 25 | try 26 | { 27 | // Create Plugin directory if it doesn't exist 28 | if (!Directory.Exists(pluginFolderPath)) 29 | { 30 | Directory.CreateDirectory(pluginFolderPath); 31 | } 32 | 33 | using (HttpClient client = new HttpClient()) 34 | { 35 | var response = await client.GetAsync(downloadUrl); 36 | response.EnsureSuccessStatusCode(); 37 | 38 | using (var fileStream = new FileStream(dllPath, FileMode.Create, FileAccess.Write, FileShare.None)) 39 | { 40 | await response.Content.CopyToAsync(fileStream); 41 | } 42 | } 43 | 44 | MessageBox.Show(Locales.Strings.formPlugins_status_Ready.Replace(@"\n", Environment.NewLine), "Plugin Setup", MessageBoxButtons.OK, MessageBoxIcon.Information); 45 | } 46 | catch (Exception ex) 47 | { 48 | MessageBox.Show(quot;Error: {ex.Message}\nPlease try again later.", "Download Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Helper/Logger.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue.Views; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System; 5 | 6 | public class Logger 7 | { 8 | private static LoggerView loggerViewInstance; 9 | private static readonly List<(string Message, Color Color)> logBuffer = new List<(string, Color)>(); 10 | 11 | // Set the LoggerView instance dynamically 12 | public static void SetLoggerView(LoggerView loggerView) 13 | { 14 | if (loggerView == null) 15 | { 16 | throw new ArgumentNullException(nameof(loggerView), "LoggerView cannot be null."); 17 | } 18 | 19 | loggerViewInstance = loggerView; 20 | 21 | // If there were logs buffered before the view was set, flush them now 22 | foreach (var log in logBuffer) 23 | { 24 | loggerViewInstance.AddLog(log.Message, log.Color); 25 | } 26 | 27 | // Clear the buffer after flushing 28 | logBuffer.Clear(); 29 | } 30 | 31 | // Log a message with color and timestamp 32 | public void Log(string message, Color color) 33 | { 34 | string timestampedMessage = quot;{DateTime.Now:HH:mm:ss} - {message}"; 35 | 36 | // Log to the LoggerView if it's open 37 | if (loggerViewInstance != null) 38 | { 39 | loggerViewInstance.AddLog(timestampedMessage, color); 40 | } 41 | else 42 | { 43 | // If LoggerView isn't open, buffer the log for future display 44 | logBuffer.Add((timestampedMessage, color)); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Bloatynosy/Helper/Utils.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Diagnostics; 4 | using System.Windows.Forms; 5 | 6 | namespace BloatynosyNue 7 | { 8 | internal class Utils 9 | { 10 | // Check registry int equal 11 | public static bool IntEquals(string keyName, string valueName, int expectedValue) 12 | { 13 | try 14 | { 15 | var value = Registry.GetValue(keyName, valueName, null); 16 | return (value != null && (int)value == expectedValue); 17 | } 18 | catch (Exception ex) 19 | 20 | { 21 | MessageBox.Show(keyName, ex.Message, MessageBoxButtons.OK); 22 | return false; 23 | } 24 | } 25 | 26 | // Check registry strings equal 27 | public static bool StringEquals(string keyName, string valueName, string expectedValue) 28 | { 29 | try 30 | { 31 | var value = Registry.GetValue(keyName, valueName, null); 32 | 33 | return (value != null && (string)value == expectedValue); 34 | } 35 | catch (Exception ex) 36 | { 37 | MessageBox.Show(keyName, ex.Message, MessageBoxButtons.OK); 38 | return false; 39 | } 40 | } 41 | 42 | public static bool KeyExists(string keyPath) 43 | { 44 | return Registry.GetValue(keyPath, null, null) != null; 45 | } 46 | 47 | public static bool IsProcessRunning(string processName) 48 | { 49 | Process[] processes = Process.GetProcessesByName(processName); 50 | return processes.Length > 0; 51 | } 52 | 53 | // Launch Urls in richText control 54 | public static void LaunchUri(string url) 55 | { 56 | if (IsHttpURL(url)) Process.Start(url); 57 | } 58 | 59 | // Check Urls in in richText control 60 | public static bool IsHttpURL(string url) 61 | { 62 | return 63 | ((!string.IsNullOrWhiteSpace(url)) && 64 | (url.ToLower().StartsWith("http"))); 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Helper/Views.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace Views 4 | { 5 | public static class SwitchView 6 | { 7 | public static Control PreviousView { get; private set; } 8 | public static Control DefaultView { get; set; } // Store the default view (panelMain) 9 | 10 | // Switch to a new view 11 | public static void SetView(Control newView, Panel targetPanel) 12 | { 13 | if (targetPanel.Controls.Count > 0) 14 | { 15 | if (PreviousView == null) 16 | { 17 | PreviousView = targetPanel.Controls[0]; // Save the current view as PreviousView 18 | } 19 | } 20 | 21 | newView.Dock = DockStyle.Fill; 22 | targetPanel.Controls.Clear(); 23 | targetPanel.Controls.Add(newView); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Locales/Strings.de.Designer.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/Locales/Strings.de.Designer.cs -------------------------------------------------------------------------------- /src/Bloatynosy/Locales/Strings.it.Designer.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/Locales/Strings.it.Designer.cs -------------------------------------------------------------------------------- /src/Bloatynosy/PSPluginHandler.cs: -------------------------------------------------------------------------------- 1 | using BloatynosyNue; 2 | using System; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | public class PSPluginHandler 10 | { 11 | public void LoadPowerShellPlugins(TreeView treeView) 12 | { 13 | var scriptDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins"); 14 | 15 | if (!Directory.Exists(scriptDirectory)) 16 | { 17 | MessageBox.Show("plugins directory does not exist."); 18 | return; 19 | } 20 | 21 | // Create a Dependencies category in the TreeView 22 | TreeNode dependencyCategory = new TreeNode("Plugins"); 23 | treeView.Nodes.Add(dependencyCategory); 24 | 25 | var scriptFiles = Directory.GetFiles(scriptDirectory, "*.ps1"); 26 | 27 | foreach (var file in scriptFiles) 28 | { 29 | var scriptName = Path.GetFileNameWithoutExtension(file); 30 | 31 | // Create a TreeNode for each ps script 32 | var scriptNode = new TreeNode 33 | { 34 | ToolTipText = file, 35 | Text = quot;{scriptName} [PS]", 36 | Tag = file // Store the file path as the Tag 37 | }; 38 | 39 | // Add the script node to the Dependecy category 40 | dependencyCategory.Nodes.Add(scriptNode); 41 | } 42 | } 43 | 44 | // Execute the selected PowerShell script 45 | public async Task ExecutePlugin(string pluginPath, Logger logger) 46 | { 47 | try 48 | { 49 | using (var process = new Process()) 50 | { 51 | process.StartInfo.FileName = "powershell.exe"; 52 | process.StartInfo.Arguments = quot;-NoProfile -ExecutionPolicy Bypass -File \"{pluginPath}\""; 53 | process.StartInfo.RedirectStandardOutput = true; 54 | process.StartInfo.RedirectStandardError = true; 55 | process.StartInfo.UseShellExecute = false; 56 | process.StartInfo.CreateNoWindow = true; 57 | 58 | var outputBuilder = new StringBuilder(); 59 | var errorBuilder = new StringBuilder(); 60 | 61 | // Handle output from PowerShell script 62 | process.OutputDataReceived += (sender, e) => 63 | { 64 | if (!string.IsNullOrEmpty(e.Data)) 65 | { 66 | outputBuilder.AppendLine(e.Data); 67 | logger.Log(quot;PowerShell script output: {e.Data}", System.Drawing.Color.Black); 68 | } 69 | }; 70 | 71 | // Handle error from PowerShell script 72 | process.ErrorDataReceived += (sender, e) => 73 | { 74 | if (!string.IsNullOrEmpty(e.Data)) 75 | { 76 | errorBuilder.AppendLine(e.Data); 77 | logger.Log(quot;PowerShell script error: {e.Data}", System.Drawing.Color.Crimson); 78 | } 79 | }; 80 | 81 | process.Start(); 82 | process.BeginOutputReadLine(); 83 | process.BeginErrorReadLine(); 84 | 85 | await Task.Run(() => 86 | { 87 | process.WaitForExit(); 88 | }); 89 | 90 | logger.Log(quot;PowerShell script executed successfully: {pluginPath}", System.Drawing.Color.Green); 91 | } 92 | } 93 | catch (Exception ex) 94 | { 95 | logger.Log(quot;Error executing PowerShell script: {pluginPath}. Exception: {ex.Message}", System.Drawing.Color.Crimson); 96 | } 97 | } 98 | } -------------------------------------------------------------------------------- /src/Bloatynosy/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Reflection; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace BloatynosyNue 9 | { 10 | internal static class Program 11 | { 12 | 13 | /// <summary> 14 | /// Der Haupteinstiegspunkt für die Anwendung. 15 | /// </summary> 16 | [STAThread] 17 | private static void Main() 18 | { 19 | Application.EnableVisualStyles(); 20 | Application.SetCompatibleTextRenderingDefault(false); 21 | Application.Run(new MainForm()); 22 | } 23 | 24 | 25 | /// <summary> 26 | /// Retrieves the version of Bloatynosy 27 | /// </summary> 28 | /// <returns>The application version in the format "major.minor.build"</returns> 29 | public static string GetAppVersion() 30 | { 31 | // Get the version of the current executing assembly 32 | Version version = Assembly.GetExecutingAssembly().GetName().Version; 33 | 34 | // Return the version in the format "major.minor.build" 35 | return quot;{version.Major}.{version.Minor}.{version.Build}.{version.Revision}"; 36 | } 37 | 38 | } 39 | } -------------------------------------------------------------------------------- /src/Bloatynosy/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("BloatynosyNue")] 9 | [assembly: AssemblyDescription("Bloatynosy Nue")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Builtbybel")] 12 | [assembly: AssemblyProduct("BloatynosyNue")] 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("73427bec-fd4f-41fb-a985-66f0f36338c2")] 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.20.522")] 33 | [assembly: AssemblyFileVersion("1.0.20.522")] 34 | -------------------------------------------------------------------------------- /src/Bloatynosy/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // <auto-generated> 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 | // </auto-generated> 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BloatynosyNue.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.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 | -------------------------------------------------------------------------------- /src/Bloatynosy/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | <?xml version='1.0' encoding='utf-8'?> 2 | <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> 3 | <Profiles> 4 | <Profile Name="(Default)" /> 5 | </Profiles> 6 | <Settings /> 7 | </SettingsFile> 8 | -------------------------------------------------------------------------------- /src/Bloatynosy/Resources/AppIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/Resources/AppIcon.png -------------------------------------------------------------------------------- /src/Bloatynosy/Resources/assetHeader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/Resources/assetHeader.png -------------------------------------------------------------------------------- /src/Bloatynosy/Resources/assetUAC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/Resources/assetUAC.png -------------------------------------------------------------------------------- /src/Bloatynosy/Resources/assetWaving.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/Resources/assetWaving.png -------------------------------------------------------------------------------- /src/Bloatynosy/Views/AppIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Bloatynosy/Views/AppIcon.png -------------------------------------------------------------------------------- /src/Bloatynosy/Views/LoggerView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Drawing; 4 | using System.Windows.Forms; 5 | 6 | namespace BloatynosyNue.Views 7 | { 8 | public partial class LoggerView : UserControl 9 | { 10 | public LoggerView() 11 | { 12 | InitializeComponent(); 13 | InitializeLocalizedStrings(); 14 | } 15 | 16 | private void InitializeLocalizedStrings() 17 | { 18 | // Set localized strings for UI elements 19 | this.Text = 20 | lblHeader.Text = BloatynosyNue.Locales.Strings.tt_btnLogger; 21 | } 22 | 23 | 24 | // Log to the RichTextBox 25 | public void AddLog(string message, Color color) 26 | { 27 | if (rtbLog.InvokeRequired) 28 | { 29 | // Invoke on the UI thread 30 | rtbLog.Invoke(new Action(() => AddLog(message, color))); 31 | } 32 | else 33 | { 34 | // Perform changes directly on the UI thread 35 | rtbLog.SelectionColor = color; 36 | rtbLog.AppendText(message + Environment.NewLine); 37 | rtbLog.ScrollToCaret(); 38 | } 39 | } 40 | 41 | 42 | private void HighlightSearchResults(string searchText) 43 | { 44 | rtbLog.SelectAll(); 45 | rtbLog.SelectionBackColor = Color.White; // Reset highlighting 46 | 47 | string logText = rtbLog.Text; 48 | int startIndex = 0; 49 | 50 | while ((startIndex = logText.IndexOf(searchText, startIndex, StringComparison.OrdinalIgnoreCase)) != -1) 51 | { 52 | rtbLog.Select(startIndex, searchText.Length); 53 | rtbLog.SelectionBackColor = Color.Black; // Highlighting 54 | rtbLog.SelectionColor = Color.Yellow; 55 | startIndex += searchText.Length; 56 | } 57 | 58 | rtbLog.DeselectAll(); 59 | } 60 | 61 | private void textBoxSearch_TextChanged(object sender, EventArgs e) 62 | { 63 | string searchText = textBoxSearch.Text; 64 | 65 | if (string.IsNullOrWhiteSpace(searchText)) 66 | { 67 | // MessageBox.Show("Enter search term", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information); 68 | return; 69 | } 70 | 71 | HighlightSearchResults(searchText); 72 | } 73 | 74 | private void textBoxSearch_Click(object sender, EventArgs e) 75 | { 76 | textBoxSearch.Text = ""; 77 | 78 | // Reset highlighting 79 | rtbLog.SelectAll(); 80 | rtbLog.SelectionBackColor = Color.FromArgb(243, 243, 243); 81 | rtbLog.SelectionColor = Color.Black; 82 | rtbLog.DeselectAll(); 83 | } 84 | 85 | // Event handler to open clicked links in the default browser 86 | private void rtbLog_LinkClicked(object sender, LinkClickedEventArgs e) 87 | { 88 | try 89 | { 90 | Process.Start(new ProcessStartInfo 91 | { 92 | FileName = e.LinkText, 93 | UseShellExecute = true 94 | }); 95 | } 96 | catch (Exception ex) 97 | { 98 | MessageBox.Show(quot;Failed to open link: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 99 | } 100 | } 101 | 102 | private void btnAppDev_Click(object sender, EventArgs e) 103 | { 104 | Process.Start("https://github.com/builtbybel/Bloatynosy"); 105 | } 106 | } 107 | } -------------------------------------------------------------------------------- /src/Bloatynosy/app.manifest: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> 3 | <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 4 | <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 5 | <security> 6 | <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 7 | <!-- UAC-Manifestoptionen 8 | Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern möchten, ersetzen Sie den 9 | Knoten "requestedExecutionLevel" wie folgt. 10 | 11 | <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 12 | <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 13 | <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 14 | 15 | Durch Angabe des Elements "requestedExecutionLevel" wird die Datei- und Registrierungsvirtualisierung deaktiviert. 16 | Entfernen Sie dieses Element, wenn diese Virtualisierung aus Gründen der Abwärtskompatibilität 17 | für die Anwendung erforderlich ist. 18 | --> 19 | <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 20 | </requestedPrivileges> 21 | </security> 22 | </trustInfo> 23 | 24 | <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 25 | <application> 26 | <!-- Eine Liste der Windows-Versionen, unter denen diese Anwendung getestet 27 | und für die sie entwickelt wurde. Wenn Sie die Auskommentierung der entsprechenden Elemente aufheben, 28 | wird von Windows automatisch die kompatibelste Umgebung ausgewählt. --> 29 | 30 | <!-- Windows Vista --> 31 | <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> 32 | 33 | <!-- Windows 7 --> 34 | <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> 35 | 36 | <!-- Windows 8 --> 37 | <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> 38 | 39 | <!-- Windows 8.1 --> 40 | <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> 41 | 42 | <!-- Windows 10 --> 43 | <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> 44 | 45 | </application> 46 | </compatibility> 47 | 48 | <!-- Gibt an, dass die Anwendung mit DPI-Werten kompatibel ist und von Windows nicht automatisch auf höhere 49 | DPI-Werte skaliert wird. WPF-Anwendungen (Windows Presentation Foundation) sind automatisch mit DPI-Werten kompatibel, eine Aktivierung 50 | ist nicht erforderlich. Für Windows Forms-Anwendungen für .NET Framework 4.6, die diese Einstellung aktivieren, muss 51 | auch die Einstellung "'EnableWindowsFormsHighDpiAutoResizing" in der Datei "app.config" auf TRUE festgelegt werden. 52 | 53 | Hierdurch können für die Anwendung lange Pfade verwendet werden. Weitere Informationen finden Sie unter https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation.--> 54 | 55 | <application xmlns="urn:schemas-microsoft-com:asm.v3"> 56 | <windowsSettings> 57 | <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> 58 | <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> 59 | </windowsSettings> 60 | </application> 61 | 62 | 63 | <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren --> 64 | <!-- 65 | <dependency> 66 | <dependentAssembly> 67 | <assemblyIdentity 68 | type="win32" 69 | name="Microsoft.Windows.Common-Controls" 70 | version="6.0.0.0" 71 | processorArchitecture="*" 72 | publicKeyToken="6595b64144ccf1df" 73 | language="*" 74 | /> 75 | </dependentAssembly> 76 | </dependency> 77 | --> 78 | 79 | </assembly> 80 | -------------------------------------------------------------------------------- /src/Bloatynosy/packages.config: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <packages> 3 | <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net481" /> 4 | </packages> -------------------------------------------------------------------------------- /src/BloatynosyNue.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.11.35327.3 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BloatynosyNue", "BloatynosyNue\BloatynosyNue.csproj", "{73427BEC-FD4F-41FB-A985-66F0F36338C2}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {73427BEC-FD4F-41FB-A985-66F0F36338C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {73427BEC-FD4F-41FB-A985-66F0F36338C2}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {73427BEC-FD4F-41FB-A985-66F0F36338C2}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {73427BEC-FD4F-41FB-A985-66F0F36338C2}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {C78E3EB9-497B-4DC2-8878-AB6E69EAEF46} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /src/Winpilot.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.8.34330.188 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Winpilot", "Winpilot\Winpilot.csproj", "{818AC686-C9FC-4092-8806-6E3994D9AF31}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {818AC686-C9FC-4092-8806-6E3994D9AF31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {818AC686-C9FC-4092-8806-6E3994D9AF31}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {818AC686-C9FC-4092-8806-6E3994D9AF31}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {818AC686-C9FC-4092-8806-6E3994D9AF31}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {E0BA52A7-AD9F-44C0-BD92-59C3BC170260} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /src/Winpilot/App.config: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8" ?> 2 | <configuration> 3 | <startup> 4 | <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /> 5 | </startup> 6 | </configuration> -------------------------------------------------------------------------------- /src/Winpilot/AppIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Winpilot/AppIcon.ico -------------------------------------------------------------------------------- /src/Winpilot/AppIconPNG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Winpilot/AppIconPNG.png -------------------------------------------------------------------------------- /src/Winpilot/Helpers/Logger.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Web.WebView2.WinForms; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Drawing; 5 | 6 | namespace Winpilot 7 | { 8 | public class Logger 9 | { 10 | private WebView2 webView; 11 | 12 | public Logger(WebView2 webView) 13 | { 14 | if (webView == null) 15 | { 16 | // Handle the case where webView is null (e.g., log an error) 17 | return; 18 | } 19 | 20 | this.webView = webView; 21 | } 22 | 23 | // Log method for a single string 24 | public void Log(string message, Color color) 25 | { 26 | if (webView.InvokeRequired) 27 | { 28 | webView.Invoke(new Action(() => Log(message, color))); 29 | return; 30 | } 31 | 32 | LogToWebView(message, color); 33 | } 34 | 35 | // Helper method to add log entry to WebView2 36 | public async void LogToWebView(string message, Color color) 37 | { 38 | // Clear log container before adding a new log 39 | await webView.ExecuteScriptAsync(@" 40 | var logContainer = document.getElementById('logContainer'); 41 | var assistedContainer = logContainer.querySelector('.assisted-container'); 42 | var helpParagraph = logContainer.querySelector('p'); 43 | logContainer.innerHTML = ''; 44 | logContainer.appendChild(helpParagraph); 45 | logContainer.appendChild(assistedContainer); 46 | "); 47 | 48 | string formattedMessage = quot;<div style='color:{ColorToHex(color)}'><strong>{message}</strong></div>"; 49 | 50 | // Replace URLs with clickable links 51 | formattedMessage = System.Text.RegularExpressions.Regex.Replace(formattedMessage, 52 | @"<strong>(.*?)(https?://\S+)(.*?)</strong>", 53 | match => 54 | { 55 | string beforeUrl = match.Groups[1].Value; // Capture text before URL 56 | string url = match.Groups[2].Value; // Capture URL 57 | string afterUrl = match.Groups[3].Value; // Capture text after URL 58 | return quot;<strong>{beforeUrl}<a href=\"{url}\" target=\"_blank\">{url}</a>{afterUrl}</strong>"; 59 | }); 60 | 61 | webView.CoreWebView2.PostWebMessageAsString(formattedMessage); 62 | 63 | // Some JS to append formatted message to logContainer 64 | await webView.ExecuteScriptAsync(quot;document.getElementById('logContainer').innerHTML += '{formattedMessage}';"); 65 | 66 | // Ensure log container is visible 67 | await webView.ExecuteScriptAsync("document.getElementById('logContainer').style.display = 'block';"); 68 | 69 | // Scroll down after adding new content to logContainer 70 | await webView.ExecuteScriptAsync("scrollToBottom();"); 71 | } 72 | 73 | // Some Helpers to convert Color to hexadecimal 74 | private string ColorToHex(Color color) 75 | { 76 | return quot;#{color.R:X2}{color.G:X2}{color.B:X2}"; 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /src/Winpilot/Helpers/Utils.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System.Windows.Forms; 3 | using System; 4 | using System.Diagnostics; 5 | 6 | namespace Winpilot 7 | { 8 | internal class Utils 9 | { 10 | // Check registry int equal 11 | public static bool IntEquals(string keyName, string valueName, int expectedValue) 12 | { 13 | try 14 | { 15 | var value = Registry.GetValue(keyName, valueName, null); 16 | return (value != null && (int)value == expectedValue); 17 | 18 | } 19 | catch (Exception ex) 20 | 21 | { 22 | MessageBox.Show(keyName, ex.Message, MessageBoxButtons.OK); 23 | return false; 24 | } 25 | } 26 | 27 | // Check registry strings equal 28 | public static bool StringEquals(string keyName, string valueName, string expectedValue) 29 | { 30 | try 31 | { 32 | var value = Registry.GetValue(keyName, valueName, null); 33 | 34 | return (value != null && (string)value == expectedValue); 35 | } 36 | catch (Exception ex) 37 | { 38 | MessageBox.Show(keyName, ex.Message, MessageBoxButtons.OK); 39 | return false; 40 | } 41 | } 42 | 43 | public static bool KeyExists(string keyPath) 44 | { 45 | return Registry.GetValue(keyPath, null, null) != null; 46 | } 47 | 48 | public static bool IsProcessRunning(string processName) 49 | { 50 | Process[] processes = Process.GetProcessesByName(processName); 51 | return processes.Length > 0; 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /src/Winpilot/Helpers/Views.cs: -------------------------------------------------------------------------------- 1 | using Winpilot; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | namespace Views 10 | { 11 | public static class SwitchView 12 | { 13 | public static MainForm mainForm; 14 | public static Control INavPage; 15 | 16 | public static void SetView(Control View) 17 | { 18 | var control = View as Control; 19 | 20 | control.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom); 21 | control.Dock = DockStyle.Fill; 22 | INavPage.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom); 23 | INavPage.Dock = DockStyle.Fill; 24 | 25 | mainForm.pnlForm.Controls.Clear(); 26 | mainForm.pnlForm.Controls.Add(View); 27 | } 28 | 29 | // Handle the back navigation 30 | public static void SetMainFormAsView() 31 | { 32 | var mainForm = Application.OpenForms.OfType<MainForm>().Single(); 33 | mainForm.pnlForm.Controls.Clear(); 34 | if (INavPage != null) mainForm.pnlForm.Controls.Add(INavPage); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Winpilot/Interop/AIFeaturesHandler.cs: -------------------------------------------------------------------------------- 1 | using Winpilot; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Interop 7 | { 8 | public class AIFeaturesHandler 9 | { 10 | private Logger logger; 11 | 12 | public AIFeaturesHandler(Logger logger) 13 | { 14 | this.logger = logger; 15 | } 16 | 17 | // Check if a Windows AI feature is enabled based on reg settings 18 | private bool IsWindowsAIFeatureEnabled(string registryPath, string valueName, int expectedValue) 19 | { 20 | try 21 | { 22 | using (RegistryKey key = Registry.CurrentUser.OpenSubKey(registryPath)) 23 | { 24 | if (key != null) 25 | { 26 | object value = key.GetValue(valueName); 27 | if (value != null && int.TryParse(value.ToString(), out int result)) 28 | { 29 | return result == expectedValue; 30 | } 31 | } 32 | } 33 | } 34 | catch (Exception ex) 35 | { 36 | logger.Log(quot;Error reading registry: {ex.Message}", Color.Red); 37 | } 38 | return false; 39 | } 40 | 41 | // Check if Copilot AI in Microsoft Edge browser is enabled 42 | public bool IsCopilotInEdgeEnabled() 43 | { 44 | return IsWindowsAIFeatureEnabled(@"Software\Policies\Microsoft\Edge", "HubsSidebarEnabled", 1); 45 | } 46 | 47 | // Check if Copilot AI in taskbar is enabled 48 | public bool IsCopilotInTaskbarEnabled() 49 | { 50 | return !IsWindowsAIFeatureEnabled(@"Software\Policies\Microsoft\Windows", "TurnOffWindowsCopilot", 1); 51 | } 52 | 53 | // Method to get the color based on AI feature status 54 | public Color GetColorForAIFeature(bool featureEnabled) 55 | { 56 | return featureEnabled ? Color.Red : Color.DarkGreen; 57 | } 58 | 59 | public void CheckAIFeatures() 60 | { 61 | bool copilotInEdgeEnabled = IsCopilotInEdgeEnabled(); 62 | logger.Log(copilotInEdgeEnabled ? "Copilot AI in Microsoft Edge browser is enabled." : "Copilot AI in Microsoft Edge browser is not enabled.", GetColorForAIFeature(copilotInEdgeEnabled)); 63 | 64 | bool copilotInTaskbarEnabled = IsCopilotInTaskbarEnabled(); 65 | logger.Log(copilotInTaskbarEnabled ? "Copilot AI in the taskbar is enabled." : "Copilot AI in the taskbar is not enabled.", GetColorForAIFeature(copilotInTaskbarEnabled)); 66 | 67 | 68 | logger.Log("We've also spotted AI integration in the Microsoft Paint and Notepad apps and assisted AI in Winpilot.", Color.Gray); 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /src/Winpilot/Interop/AppPackages.cs: -------------------------------------------------------------------------------- 1 | using Winpilot; 2 | using System; 3 | using System.Diagnostics; 4 | using System.Drawing; 5 | 6 | namespace Interop 7 | { 8 | public class AppPackages : InteropBase 9 | { 10 | private string appId; 11 | private string wingetId; 12 | 13 | // Default constructor without additional arguments 14 | public AppPackages(MainForm form, Logger logger) 15 | : base(form, logger) 16 | { 17 | // Default values...... 18 | this.appId = "defaultAppId"; 19 | this.wingetId = "defaultWingetId"; 20 | } 21 | 22 | // Constructor with additional arguments 23 | public AppPackages(MainForm form, Logger logger, string appId, string wingetId) 24 | : base(form, logger) 25 | { 26 | this.appId = appId; 27 | this.wingetId = wingetId; 28 | } 29 | 30 | public override void Execute() 31 | { 32 | try 33 | { 34 | logger.Log(quot;Installing {wingetId}...", Color.HotPink); 35 | var proc = new Process 36 | { 37 | StartInfo = new ProcessStartInfo 38 | { 39 | FileName = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Microsoft\\WindowsApps\\wt.exe", 40 | Arguments = quot;winget install --id {wingetId} --accept-source-agreements --accept-package-agreements", 41 | UseShellExecute = false, 42 | CreateNoWindow = false, 43 | } 44 | }; 45 | 46 | proc.Start(); 47 | proc.WaitForExit(); 48 | } 49 | catch (Exception ex) 50 | { 51 | logger.Log(quot;Error installing {appId} with winget: {ex.Message}", Color.Red); 52 | } 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/Winpilot/Interop/ClippyConversationHandler.cs: -------------------------------------------------------------------------------- 1 | // Obsolete: Remove Intelligent/ AI Actions 2 | 3 | using Newtonsoft.Json; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Drawing; 7 | using System.IO; 8 | using Winpilot; 9 | 10 | namespace Interop 11 | { 12 | public class ClippyConversationHandler : InteropBase 13 | { 14 | private readonly Random random = new Random(); 15 | private readonly List<string> clippySayings; 16 | private readonly List<string> aiSayings; 17 | 18 | public ClippyConversationHandler(MainForm form, Logger logger) : base(form, logger) 19 | { 20 | string jsonFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app", "clippySayings.json"); 21 | 22 | string jsonContent = File.ReadAllText(jsonFilePath); 23 | var jsonData = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(jsonContent); 24 | clippySayings = jsonData["clippySayings"]; 25 | aiSayings = jsonData["aiSayings"]; 26 | } 27 | 28 | // Clippy's Windows tips 29 | public override void Execute() 30 | { 31 | int index = random.Next(clippySayings.Count); 32 | string saying = clippySayings[index]; 33 | 34 | Logger.Log(quot;Clippy tip: {saying}", Color.Blue); 35 | } 36 | 37 | // Clippy's random fun sayings 38 | public void ShowPseudoAISayings() 39 | { 40 | int index = random.Next(aiSayings.Count); 41 | string saying = aiSayings[index]; 42 | 43 | Logger.Log(quot;{saying}", Color.Black); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/Winpilot/Interop/DownloadHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.IO; 5 | using System.Net; 6 | using System.Threading.Tasks; 7 | using Winpilot; 8 | 9 | namespace Interop 10 | { 11 | public class DownloadHandler 12 | { 13 | private Logger logger; 14 | 15 | public DownloadHandler(Logger logger) 16 | { 17 | this.logger = logger; 18 | } 19 | 20 | // Downloader (e.g. Localization files and optional for downloading files) 21 | public async Task DownloadFiles(Dictionary<string, string> downloadUri, string targetDirectory) 22 | { 23 | try 24 | { 25 | foreach (var kvp in downloadUri) 26 | { 27 | string fileName = Path.GetFileName(kvp.Value); 28 | string filePath = Path.Combine(targetDirectory, fileName); 29 | 30 | logger.Log(quot;Downloading {fileName}...", Color.Magenta); 31 | 32 | try 33 | { 34 | using (WebClient webClient = new WebClient()) 35 | { 36 | // Subscribe to the DownloadProgressChanged event 37 | webClient.DownloadProgressChanged += (sender, e) => 38 | { 39 | // Report progress in real-time 40 | int percentage = e.ProgressPercentage; 41 | long totalBytesToReceive = e.TotalBytesToReceive; 42 | long bytesReceived = e.BytesReceived; 43 | 44 | logger.Log(quot;{fileName} - {percentage}% completed ({bytesReceived}/{totalBytesToReceive} bytes)", Color.Blue); 45 | }; 46 | 47 | // Download file asynchronously! 48 | await webClient.DownloadFileTaskAsync(new Uri(kvp.Value), filePath); 49 | } 50 | 51 | // Done 52 | logger.Log(quot;{fileName} downloaded successfully.", Color.Green); 53 | } 54 | catch (Exception ex) 55 | { 56 | logger.Log(quot;Error downloading {fileName}: {ex.Message}", Color.Red); 57 | } 58 | } 59 | 60 | // All done 61 | // logger.Log("Downloads completed.", Color.Magenta); 62 | } 63 | catch (Exception ex) 64 | { 65 | logger.Log(quot;Error in Downloader: {ex.Message}", Color.Red); 66 | } 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/Winpilot/Interop/ThemeSettings.cs: -------------------------------------------------------------------------------- 1 | using Winpilot; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Diagnostics; 5 | using System.Drawing; 6 | using System.Threading; 7 | 8 | namespace Interop 9 | { 10 | public class ThemeSettings : InteropBase 11 | { 12 | public ThemeSettings(MainForm form, Logger logger) : base(form, logger) 13 | { 14 | } 15 | 16 | private const string RegistryKeyPath = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"; 17 | private const string RegistryValueName = "AppsUseLightTheme"; 18 | 19 | public void ToggleThemeMode() 20 | { 21 | try 22 | { 23 | // Get current registry value 24 | int currentValue = (int)Registry.GetValue(RegistryKeyPath, RegistryValueName, -1); 25 | 26 | // Toggle theme mode 27 | int newValue = (currentValue == 0) ? 1 : 0; 28 | 29 | // Set new value 30 | Registry.SetValue(RegistryKeyPath, RegistryValueName, newValue, RegistryValueKind.DWord); 31 | 32 | Logger.Log(newValue == 0 ? "Dark mode enabled." : "Light mode enabled.", Color.Black); 33 | 34 | // Im delaying here restart to allow changes to take effect 35 | Thread.Sleep(1000); 36 | 37 | RestartExplorer(); 38 | } 39 | catch (Exception ex) 40 | { 41 | Logger.Log(quot;Error toggling theme mode: {ex.Message}", Color.Red); 42 | } 43 | } 44 | 45 | public override void Execute() 46 | { 47 | ToggleThemeMode(); 48 | } 49 | 50 | private void RestartExplorer() 51 | { 52 | try 53 | { 54 | foreach (var process in Process.GetProcessesByName("explorer")) 55 | { 56 | process.Kill(); 57 | } 58 | 59 | Process.Start("explorer.exe"); 60 | } 61 | catch (Exception ex) 62 | { 63 | Logger.Log(quot;Error restarting explorer.exe: {ex.Message}", Color.Red); 64 | } 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/Winpilot/Interop/WallpaperSettings.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Drawing; 6 | using System.IO; 7 | using System.Linq; 8 | using System.Runtime.InteropServices; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows.Forms; 12 | 13 | namespace Interop 14 | { 15 | public class WallpaperSettings : InteropBase 16 | { 17 | public WallpaperSettings(MainForm form, Logger logger) : base(form, logger) 18 | { 19 | } 20 | 21 | private const int SPI_SETDESKWALLPAPER = 20; 22 | private const int SPIF_UPDATEINIFILE = 0x01; 23 | private const int SPIF_SENDWININICHANGE = 0x02; 24 | 25 | [DllImport("user32.dll", CharSet = CharSet.Auto)] 26 | private static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni); 27 | 28 | private string wallpaperPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Microsoft\Windows\Themes\TranscodedWallpaper"; 29 | 30 | public override void Execute() 31 | { 32 | if (File.Exists(wallpaperPath)) 33 | { 34 | OpenFileDialog openFileDialog = new OpenFileDialog(); 35 | openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); 36 | 37 | if (openFileDialog.ShowDialog() == DialogResult.OK) 38 | { 39 | RegistryKey keyName = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true); 40 | keyName.SetValue(@"WallpaperStyle", 2.ToString()); 41 | keyName.SetValue(@"TileWallpaper", 0.ToString()); 42 | 43 | SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, openFileDialog.FileName, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); 44 | } 45 | } 46 | else 47 | { 48 | logger.Log("Wallpaper file not found: " + wallpaperPath, Color.Red); 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /src/Winpilot/InteropBase.cs: -------------------------------------------------------------------------------- 1 | namespace Winpilot 2 | { 3 | public abstract class InteropBase 4 | { 5 | protected readonly MainForm _form; 6 | protected readonly Logger logger; 7 | 8 | public Logger Logger => logger; 9 | 10 | public InteropBase(MainForm form, Logger logger) 11 | { 12 | _form = form; 13 | this.logger = logger; 14 | } 15 | 16 | public abstract void Execute(); 17 | } 18 | } -------------------------------------------------------------------------------- /src/Winpilot/MainForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Winpilot 2 | { 3 | partial class MainForm 4 | { 5 | /// <summary> 6 | /// Erforderliche Designervariable. 7 | /// </summary> 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// <summary> 11 | /// Verwendete Ressourcen bereinigen. 12 | /// </summary> 13 | /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param> 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 Windows Form-Designer generierter Code 24 | 25 | /// <summary> 26 | /// Erforderliche Methode für die Designerunterstützung. 27 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. 28 | /// </summary> 29 | private void InitializeComponent() 30 | { 31 | this.pnlForm = new System.Windows.Forms.Panel(); 32 | this.pnlMain = new System.Windows.Forms.Panel(); 33 | this.pnlForm.SuspendLayout(); 34 | this.SuspendLayout(); 35 | // 36 | // pnlForm 37 | // 38 | this.pnlForm.Controls.Add(this.pnlMain); 39 | this.pnlForm.Dock = System.Windows.Forms.DockStyle.Fill; 40 | this.pnlForm.Location = new System.Drawing.Point(0, 0); 41 | this.pnlForm.Name = "pnlForm"; 42 | this.pnlForm.Size = new System.Drawing.Size(483, 661); 43 | this.pnlForm.TabIndex = 2; 44 | // 45 | // pnlMain 46 | // 47 | this.pnlMain.Dock = System.Windows.Forms.DockStyle.Fill; 48 | this.pnlMain.Location = new System.Drawing.Point(0, 0); 49 | this.pnlMain.Name = "pnlMain"; 50 | this.pnlMain.Size = new System.Drawing.Size(483, 661); 51 | this.pnlMain.TabIndex = 0; 52 | // 53 | // MainForm 54 | // 55 | this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); 56 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; 57 | this.ClientSize = new System.Drawing.Size(483, 661); 58 | this.Controls.Add(this.pnlForm); 59 | this.Name = "MainForm"; 60 | this.ShowIcon = false; 61 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 62 | this.Text = "Winpilot"; 63 | this.Shown += new System.EventHandler(this.MainForm_Shown); 64 | this.pnlForm.ResumeLayout(false); 65 | this.ResumeLayout(false); 66 | 67 | } 68 | 69 | #endregion 70 | 71 | private Microsoft.Web.WebView2.WinForms.WebView2 webView; 72 | private System.Windows.Forms.Panel pnlMain; 73 | public System.Windows.Forms.Panel pnlForm; 74 | } 75 | } 76 | 77 | -------------------------------------------------------------------------------- /src/Winpilot/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace Winpilot 5 | { 6 | internal static class Program 7 | { 8 | /// <summary> 9 | /// Get app version 10 | /// </summary> 11 | internal static string GetCurrentVersionTostring() => new Version(Application.ProductVersion).ToString(3); 12 | 13 | /// <summary> 14 | /// The main entry point for the application. 15 | /// </summary> 16 | [STAThread] 17 | private static void Main() 18 | { 19 | Application.EnableVisualStyles(); 20 | Application.SetCompatibleTextRenderingDefault(false); 21 | Application.Run(new MainForm()); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /src/Winpilot/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("Winpilot")] 9 | [assembly: AssemblyDescription("Your everyday Windows companion")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Builtbybel")] 12 | [assembly: AssemblyProduct("Winpilot")] 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("44cafceb-0f6d-487f-9f5f-63f230dbb069")] 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("2024.7.1")] 36 | [assembly: AssemblyFileVersion("2024.7.1")] 37 | -------------------------------------------------------------------------------- /src/Winpilot/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // <auto-generated> 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 | // </auto-generated> 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Winpilot.Properties { 12 | using System; 13 | 14 | 15 | /// <summary> 16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. 17 | /// </summary> 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 | /// <summary> 36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. 37 | /// </summary> 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("Winpilot.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// <summary> 50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle 51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. 52 | /// </summary> 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 | -------------------------------------------------------------------------------- /src/Winpilot/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // <auto-generated> 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 | // </auto-generated> 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Winpilot.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.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 | -------------------------------------------------------------------------------- /src/Winpilot/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | <?xml version='1.0' encoding='utf-8'?> 2 | <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> 3 | <Profiles> 4 | <Profile Name="(Default)" /> 5 | </Profiles> 6 | <Settings /> 7 | </SettingsFile> 8 | -------------------------------------------------------------------------------- /src/Winpilot/Views/SettingsPageView.cs: -------------------------------------------------------------------------------- 1 | using Winpilot; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Data; 6 | using System.Diagnostics; 7 | using System.Drawing; 8 | using System.IO; 9 | using System.Linq; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | using System.Windows.Forms; 13 | 14 | namespace Views 15 | { 16 | public partial class SettingsPageView : UserControl 17 | { 18 | public SettingsPageView() 19 | { 20 | InitializeComponent(); 21 | } 22 | 23 | private void SettingsPageView_Load(object sender, EventArgs e) 24 | { 25 | btnBack.Text = "\uE72B"; 26 | linkFollow.Text = "\uE8E1 GitHub"; 27 | lblVersion.Text = "Version " + Program.GetCurrentVersionTostring() + " Stargate"; 28 | } 29 | 30 | private void linkAppInfos_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 31 | => Process.Start("https://www.builtbybel.com/blog/bloatynosy-is-now-winpilot"); 32 | 33 | private void linkFollow_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 34 | => Process.Start("https://github.com/builtbybel/Winpilot"); 35 | 36 | private void linkCreditsAppIcon_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 37 | => Process.Start("https://github.com/FireCubeStudios/Clippy/tree/master/Clippy/Assets/Clippy"); 38 | 39 | private void btnBack_Click(object sender, EventArgs e) 40 | => Views.SwitchView.SetMainFormAsView(); 41 | 42 | private void linkLicensesClippit_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 43 | => Process.Start("https://github.com/FireCubeStudios/Clippy/tree/master/Clippy/Assets/Clippy"); 44 | } 45 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/AI/CopilotMSEdge.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using Winpilot; 5 | 6 | namespace Walks 7 | { 8 | public class CopilotMSEdge : WalksBase 9 | { 10 | public CopilotMSEdge(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Edge"; 15 | 16 | public override string ID() => "Copilot in Edge"; 17 | 18 | public override bool CheckFeature() 19 | { 20 | return Utils.IntEquals(keyName, "HubsSidebarEnabled", 1); 21 | } 22 | 23 | public override bool DoFeature() 24 | { 25 | try 26 | { 27 | Registry.SetValue(keyName, "HubsSidebarEnabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 28 | 29 | return true; 30 | } 31 | catch (Exception ex) 32 | { 33 | logger.Log("Code red in " + ex.Message, Color.Red); 34 | } 35 | 36 | return false; 37 | } 38 | 39 | public override bool UndoFeature() 40 | { 41 | try 42 | { 43 | Registry.SetValue(keyName, "HubsSidebarEnabled", 0, Microsoft.Win32.RegistryValueKind.DWord); 44 | 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/AI/CopilotTaskbar.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using Winpilot; 5 | 6 | namespace Walks 7 | { 8 | public class CopilotTaskbar : WalksBase 9 | { 10 | public CopilotTaskbar(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows"; 15 | 16 | public override string ID() => "Copilot in Taskbar"; 17 | 18 | public override bool CheckFeature() 19 | { 20 | return Utils.IntEquals(keyName, "TurnOffWindowsCopilot", 0); 21 | } 22 | 23 | public override bool DoFeature() 24 | { 25 | try 26 | { 27 | Registry.SetValue(keyName, "TurnOffWindowsCopilot", 0, Microsoft.Win32.RegistryValueKind.DWord); 28 | 29 | return true; 30 | } 31 | catch (Exception ex) 32 | { 33 | logger.Log("Code red in " + ex.Message, Color.Red); 34 | } 35 | 36 | return false; 37 | } 38 | 39 | public override bool UndoFeature() 40 | { 41 | try 42 | { 43 | Registry.SetValue(keyName, "TurnOffWindowsCopilot", 1, Microsoft.Win32.RegistryValueKind.DWord); 44 | 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/FileExplorerAds.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class FileExplorerAds : WalksBase 9 | { 10 | public FileExplorerAds(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() 18 | { 19 | return "File Explorer Ads"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "ShowSyncProviderNotifications", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "ShowSyncProviderNotifications", 1, RegistryValueKind.DWord); 34 | return true; 35 | 36 | } 37 | catch (Exception ex) 38 | { 39 | logger.Log("Code red in " + ex.Message, Color.Red); 40 | } 41 | 42 | return false; 43 | } 44 | 45 | public override bool UndoFeature() 46 | { 47 | try 48 | { 49 | Registry.SetValue(keyName, "ShowSyncProviderNotifications", desiredValue, RegistryValueKind.DWord); 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/FinishSetupAds.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using Winpilot; 5 | 6 | namespace Walks 7 | { 8 | public class FinishSetupAds : WalksBase 9 | { 10 | public FinishSetupAds(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() => "Finish Setup Ads"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !Utils.IntEquals(keyName, "ScoobeSystemSettingEnabled", 0); 22 | } 23 | 24 | public override bool DoFeature() 25 | { 26 | try 27 | { 28 | Registry.SetValue(keyName, "ScoobeSystemSettingEnabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 29 | 30 | return true; 31 | } 32 | catch (Exception ex) 33 | { 34 | logger.Log("Code red in " + ex.Message, Color.Red); 35 | } 36 | 37 | return false; 38 | } 39 | 40 | public override bool UndoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, "ScoobeSystemSettingEnabled", 0, Microsoft.Win32.RegistryValueKind.DWord); 45 | 46 | return true; 47 | } 48 | catch (Exception ex) 49 | { 50 | logger.Log("Code red in " + ex.Message, Color.Red); 51 | } 52 | 53 | return false; 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/LockScreenAds.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using Winpilot; 5 | 6 | namespace Walks 7 | { 8 | internal class LockScreenAds : WalksBase 9 | { 10 | public LockScreenAds(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() => "Lock Screen Tips and Ads"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !(Utils.IntEquals(keyName, "RotatingLockScreenOverlayEnabled", desiredValue) && 22 | Utils.IntEquals(keyName, "SubscribedContent-338387Enabled", desiredValue) 23 | ); 24 | } 25 | 26 | 27 | public override bool DoFeature() 28 | { 29 | try 30 | { 31 | Registry.SetValue(keyName, "RotatingLockScreenOverlayEnabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 32 | Registry.SetValue(keyName, "SubscribedContent-338387Enabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 33 | 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | Registry.SetValue(keyName, "RotatingLockScreenOverlayEnabled", desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 49 | Registry.SetValue(keyName, "SubscribedContent-338387Enabled", desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 50 | 51 | return true; 52 | } 53 | catch (Exception ex) 54 | { 55 | logger.Log("Code red in " + ex.Message, Color.Red); 56 | } 57 | 58 | return false; 59 | } 60 | } 61 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/PersonalizedAds.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class PersonalizedAds: WalksBase 9 | { 10 | public PersonalizedAds(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() => "Personalized Ads"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !Utils.IntEquals(keyName, "Enabled", 0); 22 | } 23 | 24 | public override bool DoFeature() 25 | { 26 | try 27 | { 28 | Registry.SetValue(keyName, "Enabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 29 | 30 | return true; 31 | } 32 | catch (Exception ex) 33 | { 34 | logger.Log("Code red in " + ex.Message, Color.Red); 35 | } 36 | 37 | return false; 38 | } 39 | 40 | public override bool UndoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, "Enabled", 0, Microsoft.Win32.RegistryValueKind.DWord); 45 | 46 | return true; 47 | } 48 | catch (Exception ex) 49 | { 50 | logger.Log("Code red in " + ex.Message, Color.Red); 51 | } 52 | 53 | return false; 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/SettingsAds.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using Winpilot; 5 | 6 | namespace Walks 7 | { 8 | internal class SettingsAds : WalksBase 9 | { 10 | public SettingsAds(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() => "Settings Ads"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !(Utils.IntEquals(keyName, "SubscribedContent-338393Enabled", desiredValue) && 22 | Utils.IntEquals(keyName, "SubscribedContent-353694Enabled", desiredValue) && 23 | Utils.IntEquals(keyName, "SubscribedContent-353696Enabled", desiredValue) 24 | ); 25 | } 26 | 27 | 28 | public override bool DoFeature() 29 | { 30 | try 31 | { 32 | Registry.SetValue(keyName, "SubscribedContent-338393Enabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 33 | Registry.SetValue(keyName, "SubscribedContent-353694Enabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 34 | Registry.SetValue(keyName, "SubscribedContent-353696Enabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 35 | 36 | return true; 37 | } 38 | catch (Exception ex) 39 | { 40 | logger.Log("Code red in " + ex.Message, Color.Red); 41 | } 42 | 43 | return false; 44 | } 45 | 46 | public override bool UndoFeature() 47 | { 48 | try 49 | { 50 | Registry.SetValue(keyName, "SubscribedContent-338393Enabled", desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 51 | Registry.SetValue(keyName, "SubscribedContent-353694Enabled", desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 52 | Registry.SetValue(keyName, "SubscribedContent-353696Enabled", desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 53 | 54 | return true; 55 | } 56 | catch (Exception ex) 57 | { 58 | logger.Log("Code red in " + ex.Message, Color.Red); 59 | } 60 | 61 | return false; 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/StartmenuAds.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class StartmenuAds : WalksBase 9 | { 10 | public StartmenuAds(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() 18 | { 19 | return "Start menu Ads"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "Start_IrisRecommendations", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "Start_IrisRecommendations",1, RegistryValueKind.DWord); 34 | return true; 35 | 36 | } 37 | catch (Exception ex) 38 | { 39 | logger.Log("Code red in " + ex.Message, Color.Red); 40 | } 41 | 42 | return false; 43 | } 44 | 45 | public override bool UndoFeature() 46 | { 47 | try 48 | { 49 | Registry.SetValue(keyName, "Start_IrisRecommendations", desiredValue, RegistryValueKind.DWord); 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/TailoredExperiences.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class TailoredExperiences : WalksBase 9 | { 10 | public TailoredExperiences(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() 18 | { 19 | return "Tailored experiences"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "TailoredExperiencesWithDiagnosticDataEnabled", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "TailoredExperiencesWithDiagnosticDataEnabled", 1, RegistryValueKind.DWord); 34 | return true; 35 | 36 | } 37 | catch (Exception ex) 38 | { 39 | logger.Log("Code red in " + ex.Message, Color.Red); 40 | } 41 | 42 | return false; 43 | } 44 | 45 | public override bool UndoFeature() 46 | { 47 | try 48 | { 49 | Registry.SetValue(keyName, "TailoredExperiencesWithDiagnosticDataEnabled", desiredValue, RegistryValueKind.DWord); 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/TipsAndSuggestions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using Winpilot; 5 | 6 | namespace Walks 7 | { 8 | internal class TipsAndSuggestions : WalksBase 9 | { 10 | public TipsAndSuggestions(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() => "General Tips and Ads"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !(Utils.IntEquals(keyName, "SubscribedContent-338389Enabled", desiredValue) 22 | ); 23 | } 24 | 25 | public override bool DoFeature() 26 | { 27 | try 28 | { 29 | Registry.SetValue(keyName, "SubscribedContent-338389Enabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 30 | 31 | return true; 32 | } 33 | catch (Exception ex) 34 | { 35 | logger.Log("Code red in " + ex.Message, Color.Red); 36 | } 37 | 38 | return false; 39 | } 40 | 41 | public override bool UndoFeature() 42 | { 43 | try 44 | { 45 | Registry.SetValue(keyName, "SubscribedContent-338389Enabled", desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 46 | 47 | return true; 48 | } 49 | catch (Exception ex) 50 | { 51 | logger.Log("Code red in " + ex.Message, Color.Red); 52 | } 53 | 54 | return false; 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Ads/WelcomeExperienceAds.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class WelcomeExperienceAds : WalksBase 9 | { 10 | public WelcomeExperienceAds(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() => "Welcome Experience Ads"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !Utils.IntEquals(keyName, "SubscribedContent-310093Enabled", 0); 22 | } 23 | 24 | public override bool DoFeature() 25 | { 26 | try 27 | { 28 | Registry.SetValue(keyName, "SubscribedContent-310093Enabled", 1, Microsoft.Win32.RegistryValueKind.DWord); 29 | 30 | return true; 31 | } 32 | catch (Exception ex) 33 | { 34 | logger.Log("Code red in " + ex.Message, Color.Red); 35 | } 36 | 37 | return false; 38 | } 39 | 40 | public override bool UndoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, "SubscribedContent-310093Enabled", 0, Microsoft.Win32.RegistryValueKind.DWord); 45 | 46 | return true; 47 | } 48 | catch (Exception ex) 49 | { 50 | logger.Log("Code red in " + ex.Message, Color.Red); 51 | } 52 | 53 | return false; 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Gaming/GameDVR.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class GameDVR: WalksBase 9 | { 10 | public GameDVR(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | private const string keyName = @"HKEY_CURRENT_USER\System\GameConfigStore"; 14 | private const string keyName2 = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\ApplicationManagement\AllowGameDVR"; 15 | 16 | public override string ID() => "GameDVR"; 17 | 18 | 19 | public override bool CheckFeature() 20 | { 21 | return Utils.IntEquals(keyName, "GameDVR_Enabled", 1) && 22 | Utils.IntEquals(keyName, "GameDVR_FSEBehaviorMode", 0) && 23 | Utils.IntEquals(keyName2, "value", 1); 24 | } 25 | 26 | public override bool DoFeature() 27 | { 28 | try 29 | { 30 | Registry.SetValue(keyName, "GameDVR_Enabled", 1, RegistryValueKind.DWord); 31 | Registry.SetValue(keyName, "GameDVR_FSEBehaviorMode",0 , RegistryValueKind.DWord); 32 | Registry.SetValue(keyName2, "value", 1, RegistryValueKind.DWord); 33 | 34 | 35 | return true; 36 | } 37 | catch (Exception ex) 38 | { 39 | logger.Log("Code red in " + ex.Message, Color.Red); 40 | } 41 | 42 | return false; 43 | } 44 | 45 | public override bool UndoFeature() 46 | { 47 | try 48 | { 49 | Registry.SetValue(keyName, "GameDVR_Enabled", 0, RegistryValueKind.DWord); 50 | Registry.SetValue(keyName, "GameDVR_FSEBehaviorMode", 2, RegistryValueKind.DWord); 51 | Registry.SetValue(keyName2, "value", 0, RegistryValueKind.DWord); 52 | 53 | return true; 54 | } 55 | catch (Exception ex) 56 | { 57 | logger.Log("Code red in " + ex.Message, Color.Red); 58 | } 59 | 60 | return false; 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Gaming/PowerThrottling.cs: -------------------------------------------------------------------------------- 1 | using Winpilot; 2 | using Microsoft.Win32; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class PowerThrottling : WalksBase 9 | { 10 | public PowerThrottling(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling"; 15 | 16 | public override string ID() => "PowerThrottling"; 17 | 18 | public override bool CheckFeature() 19 | { 20 | return !Utils.IntEquals(keyName, "PowerThrottlingOff", 1); 21 | } 22 | 23 | public override bool DoFeature() 24 | { 25 | try 26 | { 27 | Registry.SetValue(keyName, "PowerThrottlingOff", 0, Microsoft.Win32.RegistryValueKind.DWord); 28 | 29 | return true; 30 | } 31 | catch (Exception ex) 32 | { 33 | logger.Log("Code red in " + ex.Message, Color.Red); 34 | } 35 | 36 | return false; 37 | } 38 | 39 | public override bool UndoFeature() 40 | { 41 | try 42 | { 43 | Registry.SetValue(keyName, "PowerThrottlingOff", 1, Microsoft.Win32.RegistryValueKind.DWord); 44 | 45 | return true; 46 | } 47 | catch (Exception ex) 48 | { 49 | logger.Log("Code red in " + ex.Message, Color.Red); 50 | } 51 | 52 | return false; 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Gaming/VisualFX.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class VisualFX: WalksBase 9 | { 10 | public VisualFX(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects"; 15 | private const int desiredValue = 2; 16 | 17 | public override string ID() => "VisualFX"; 18 | 19 | 20 | public override bool CheckFeature() 21 | { 22 | return Utils.IntEquals(keyName, "VisualFXSetting", desiredValue); 23 | } 24 | 25 | public override bool DoFeature() 26 | { 27 | try 28 | { 29 | Registry.SetValue(keyName, "VisualFXSetting", 2, RegistryValueKind.DWord); 30 | 31 | return true; 32 | } 33 | catch (Exception ex) 34 | { 35 | logger.Log("Code red in " + ex.Message, Color.Red); 36 | } 37 | 38 | return false; 39 | } 40 | 41 | public override bool UndoFeature() 42 | { 43 | try 44 | { 45 | Registry.SetValue(keyName, "VisualFXSetting", 0, RegistryValueKind.DWord); 46 | 47 | return true; 48 | } 49 | catch (Exception ex) 50 | { 51 | logger.Log("Code red in " + ex.Message, Color.Red); 52 | } 53 | 54 | return false; 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Privacy/BackgroundApps.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class BackgroundApps : WalksBase 9 | { 10 | public BackgroundApps(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications"; 15 | private const int desiredValue = 1; 16 | 17 | public override string ID() 18 | { 19 | return "Running apps in background"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "GlobalUserDisabled", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "GlobalUserDisabled", 0, RegistryValueKind.DWord); 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | Registry.SetValue(keyName, "GlobalUserDisabled", desiredValue, RegistryValueKind.DWord); 49 | 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Privacy/DiagnosticData.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class DiagnosticData : WalksBase 9 | { 10 | public DiagnosticData(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy"; 15 | 16 | public override string ID() 17 | { 18 | return "Diagnostic data"; 19 | } 20 | 21 | public override bool CheckFeature() 22 | { 23 | return !( 24 | Utils.IntEquals(keyName, "TailoredExperiencesWithDiagnosticDataEnabled", 0) 25 | ); 26 | } 27 | 28 | public override bool DoFeature() 29 | { 30 | try 31 | { 32 | Registry.SetValue(keyName, "TailoredExperiencesWithDiagnosticDataEnabled", 1, RegistryValueKind.DWord); 33 | 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | return false; 41 | } 42 | 43 | public override bool UndoFeature() 44 | { 45 | try 46 | { 47 | Registry.SetValue(keyName, "TailoredExperiencesWithDiagnosticDataEnabled", 0, RegistryValueKind.DWord); 48 | 49 | return true; 50 | } 51 | catch (Exception ex) 52 | { 53 | logger.Log("Code red in " + ex.Message, Color.Red); 54 | } 55 | 56 | return false; 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Privacy/FindMyDevice.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class FindMyDevice : WalksBase 9 | { 10 | public FindMyDevice(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location"; 15 | private const string desiredValue = @"Deny"; 16 | 17 | public override string ID() 18 | { 19 | return "Find my device"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.StringEquals(keyName, "Value", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "Value", "Allow", RegistryValueKind.String); 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | Registry.SetValue(keyName, "Value", desiredValue, RegistryValueKind.String); 49 | 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Privacy/PrivacyExperience.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class PrivacyExperience : WalksBase 9 | { 10 | public PrivacyExperience(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OOBE"; 15 | private const int desiredValue = 1; 16 | 17 | public override string ID() => "Privacy Settings Experience at sign-in"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !Utils.IntEquals(keyName, "DisablePrivacyExperience", desiredValue); 22 | } 23 | 24 | public override bool DoFeature() 25 | { 26 | try 27 | { 28 | Registry.SetValue(keyName, "DisablePrivacyExperience", 0, Microsoft.Win32.RegistryValueKind.DWord); 29 | 30 | return true; 31 | } 32 | catch (Exception ex) 33 | { 34 | logger.Log("Code red in " + ex.Message, Color.Red); 35 | } 36 | 37 | return false; 38 | } 39 | 40 | public override bool UndoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, "DisablePrivacyExperience", 1, Microsoft.Win32.RegistryValueKind.DWord); 45 | 46 | return true; 47 | } 48 | catch (Exception ex) 49 | { 50 | logger.Log("Code red in " + ex.Message, Color.Red); 51 | } 52 | 53 | return false; 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Privacy/Telemetry.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class Telemetry : WalksBase 9 | { 10 | public Telemetry(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string dataCollection = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DataCollection"; 15 | private const string diagTrack = @"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\DiagTrack"; 16 | private const string dmwappushservice = @"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\dmwappushservice"; 17 | 18 | public override string ID() => "Send optional diagnostic data"; 19 | 20 | public override bool CheckFeature() 21 | { 22 | return ( 23 | Utils.IntEquals(dataCollection, "AllowTelemetry", 3) && 24 | Utils.IntEquals(dataCollection, "MaxTelemetryAllowed", 3) && 25 | Utils.IntEquals(diagTrack, "Start", 4) && 26 | Utils.IntEquals(dmwappushservice, "Start", 4) 27 | 28 | ); 29 | } 30 | 31 | public override bool DoFeature() 32 | { 33 | try 34 | { 35 | Registry.SetValue(dataCollection, "AllowTelemetry", 3, RegistryValueKind.DWord); 36 | Registry.SetValue(dataCollection, "MaxTelemetryAllowed", 3, RegistryValueKind.DWord); 37 | Registry.SetValue(diagTrack, "Start", 4, RegistryValueKind.DWord); 38 | Registry.SetValue(dmwappushservice, "Start", 4, RegistryValueKind.DWord); 39 | 40 | return true; 41 | } 42 | catch (Exception ex) 43 | { 44 | logger.Log("Code red in " + ex.Message, Color.Red); 45 | } 46 | 47 | return false; 48 | } 49 | 50 | public override bool UndoFeature() 51 | { 52 | try 53 | { 54 | Registry.SetValue(dataCollection, "AllowTelemetry", 1, RegistryValueKind.DWord); 55 | Registry.SetValue(dataCollection, "MaxTelemetryAllowed", 1, RegistryValueKind.DWord); 56 | Registry.SetValue(diagTrack, "Start", 2, RegistryValueKind.DWord); 57 | Registry.SetValue(dmwappushservice, "Start", 2, RegistryValueKind.DWord); 58 | 59 | return true; 60 | } 61 | catch (Exception ex) 62 | { 63 | logger.Log("Code red in " + ex.Message, Color.Red); 64 | } 65 | 66 | return false; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/System/FaxPrinter.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | using System.Management.Automation; 6 | 7 | namespace Walks 8 | { 9 | internal class FaxPrinter : WalksBase 10 | { 11 | public FaxPrinter(MainForm form, Logger logger) : base(form, logger) 12 | { 13 | } 14 | 15 | public override string ID() 16 | { 17 | return "Uninstall Fax Printer"; 18 | } 19 | 20 | public override bool CheckFeature() 21 | { 22 | return false; 23 | } 24 | 25 | public override bool DoFeature() 26 | { 27 | string script = "Remove-Printer -Name \"Fax\""; 28 | 29 | PowerShell powerShell = PowerShell.Create(); 30 | 31 | powerShell.AddScript(script); 32 | powerShell.Invoke(); 33 | 34 | if (powerShell.Streams.Error.Count > 0) 35 | { 36 | return false; 37 | } 38 | return true; 39 | } 40 | 41 | public override bool UndoFeature() 42 | { 43 | return true; 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/System/FullContextMenus.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using Winpilot; 5 | 6 | namespace Walks 7 | { 8 | internal class FullContextMenus : WalksBase 9 | { 10 | public FullContextMenus(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"; 15 | 16 | public override string ID() 17 | { 18 | return "Full context menus"; 19 | } 20 | 21 | public override bool CheckFeature() 22 | { 23 | try 24 | { 25 | object value = Registry.GetValue(keyName, "", null); 26 | return value != null; // Return true if value is not null 27 | } 28 | catch (Exception ex) 29 | { 30 | logger.Log("Error occurred while checking: " + ex.Message, Color.Red); 31 | return false; 32 | } 33 | } 34 | 35 | public override bool DoFeature() 36 | { 37 | try 38 | { 39 | Registry.SetValue(keyName, "", "", RegistryValueKind.String); 40 | return true; 41 | } 42 | catch (Exception ex) 43 | { 44 | logger.Log("Error occurred while enabling: " + ex.Message, Color.Red); 45 | return false; 46 | } 47 | } 48 | 49 | public override bool UndoFeature() 50 | { 51 | try 52 | { 53 | Registry.CurrentUser.DeleteSubKeyTree(@"Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}", false); 54 | return true; 55 | } 56 | catch (Exception ex) 57 | { 58 | logger.Log("Error occurred while disabling: " + ex.Message, Color.Red); 59 | return false; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/Winpilot/Walks/System/LockScreen.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class LockScreen : WalksBase 9 | { 10 | public LockScreen(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization"; 15 | private const int desiredValue = 1; 16 | 17 | public override string ID() 18 | { 19 | return "Lock screen"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "NoLockScreen", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "NoLockScreen", 0, RegistryValueKind.DWord); 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | Registry.SetValue(keyName, "NoLockScreen", desiredValue, RegistryValueKind.DWord); 49 | 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/System/VerboseMessages.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | public class VerboseMessages : WalksBase 9 | { 10 | public VerboseMessages(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() => "Display highly detailed status messages"; 18 | 19 | public override bool CheckFeature() 20 | { 21 | return !Utils.IntEquals(keyName, "verbosestatus", desiredValue); 22 | } 23 | 24 | public override bool DoFeature() 25 | { 26 | try 27 | { 28 | Registry.SetValue(keyName, "verbosestatus", 1, RegistryValueKind.DWord); 29 | 30 | return true; 31 | } 32 | catch (Exception ex) 33 | { 34 | logger.Log("Code red in " + ex.Message, Color.Red); 35 | } 36 | 37 | return false; 38 | } 39 | 40 | public override bool UndoFeature() 41 | { 42 | try 43 | { 44 | Registry.SetValue(keyName, "verbosestatus", desiredValue, Microsoft.Win32.RegistryValueKind.DWord); 45 | 46 | return true; 47 | } 48 | catch (Exception ex) 49 | { 50 | logger.Log("Code red in " + ex.Message, Color.Red); 51 | } 52 | 53 | return false; 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/System/XPSWriter.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | using System.Management.Automation; 6 | using System.Threading.Tasks; 7 | 8 | namespace Walks 9 | { 10 | internal class XPSWriter : WalksBase 11 | { 12 | public XPSWriter(MainForm form, Logger logger) : base(form, logger) 13 | { 14 | } 15 | 16 | public override string ID() 17 | { 18 | return "Uninstall XPS Writer"; 19 | } 20 | 21 | public override bool CheckFeature() 22 | { 23 | string script = "Get-WindowsOptionalFeature -Online -FeatureName \"Printing-XPSServices-Features\""; 24 | 25 | PowerShell powerShell = PowerShell.Create(); 26 | powerShell.AddScript(script); 27 | 28 | var results = powerShell.Invoke(); 29 | 30 | foreach (var item in results) 31 | { 32 | var Status = item.Members["State"].Value; 33 | 34 | if (Status.ToString() == "Enabled") 35 | { 36 | // logger.Log("XPS Documents Writer is installed.", Color.Green); 37 | return false; 38 | } 39 | } 40 | // logger.Log("XPS Documents Writer not found.", Color.Red); 41 | 42 | return true; 43 | } 44 | 45 | public override bool DoFeature() 46 | { 47 | logger.Log("I am uninstalling XPS Documents Writer. Please wait.", Color.Magenta); 48 | 49 | string script = "Disable-WindowsOptionalFeature -Online -FeatureName \"Printing-XPSServices-Features\" -NoRestart -WarningAction SilentlyContinue | Out-Null"; 50 | PowerShell powerShell = PowerShell.Create(); 51 | powerShell.AddScript(script); 52 | 53 | Task.Run(() => 54 | { 55 | var results = powerShell.Invoke(); 56 | 57 | if (powerShell.Streams.Error.Count > 0) 58 | { 59 | logger.Log("= XPS Documents Writer not found.", Color.Red); 60 | } 61 | else 62 | { 63 | logger.Log("XPS Documents Writer has been successfully removed.", Color.Green); 64 | } 65 | }); 66 | 67 | return true; 68 | } 69 | 70 | 71 | public override bool UndoFeature() 72 | { 73 | logger.Log("I am diving back into this sh*t show, reinstalling 'XPS Documents Writer' once more, man. Hang tight!", Color.Magenta); 74 | 75 | string script = "Enable-WindowsOptionalFeature -Online -FeatureName \"Printing-XPSServices-Features\" -NoRestart -WarningAction SilentlyContinue | Out-Null"; 76 | PowerShell powerShell = PowerShell.Create(); 77 | powerShell.AddScript(script); 78 | 79 | Task.Run(() => 80 | { 81 | var results = powerShell.Invoke(); 82 | 83 | if (powerShell.Streams.Error.Count > 0) 84 | { 85 | logger.Log("XPS Documents Writer could not be installed.", Color.Red); 86 | } 87 | else 88 | { 89 | logger.Log("XPS Documents Writer has been successfully installed.", Color.Green); 90 | } 91 | }); 92 | 93 | return true; 94 | } 95 | 96 | } 97 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Taskbar/BingSearch.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class BingSearch : WalksBase 9 | { 10 | public BingSearch(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() 18 | { 19 | return "Bing Cloud content search"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "DisableSearchBoxSuggestions", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "DisableSearchBoxSuggestions", 1, RegistryValueKind.DWord); 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | Registry.SetValue(keyName, "DisableSearchBoxSuggestions", desiredValue, RegistryValueKind.DWord); 49 | 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Taskbar/MostUsedApps.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class MostUsedApps : WalksBase 9 | { 10 | public MostUsedApps(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer"; 15 | private const int desiredValue = 2; 16 | 17 | public override string ID() 18 | { 19 | return "Most used apps in start menu"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return ( 25 | Utils.IntEquals(keyName, "ShowOrHideMostUsedApps", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "ShowOrHideMostUsedApps", 2, RegistryValueKind.DWord); 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | var RegKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Policies\Microsoft\Windows\Explorer", true); 49 | RegKey.DeleteValue("ShowOrHideMostUsedApps"); 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Taskbar/StartmenuLayout.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class StartmenuLayout : WalksBase 9 | { 10 | public StartmenuLayout(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() 18 | { 19 | return "Pin more Apps on Start menu"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return ( 25 | Utils.IntEquals(keyName, "Start_Layout", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "Start_Layout", 0, RegistryValueKind.DWord); 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | Registry.SetValue(keyName, "Start_Layout", 1, RegistryValueKind.DWord); 49 | return true; 50 | } 51 | catch (Exception ex) 52 | { 53 | logger.Log("Code red in " + ex.Message, Color.Red); 54 | } 55 | 56 | return false; 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Taskbar/TaskView.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class TaskView : WalksBase 9 | { 10 | public TaskView(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() 18 | { 19 | return "Task view button on taskbar"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "ShowTaskViewButton", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "ShowTaskViewButton", 1, RegistryValueKind.DWord); 34 | return true; 35 | 36 | } 37 | catch (Exception ex) 38 | { 39 | logger.Log("Code red in " + ex.Message, Color.Red); 40 | } 41 | 42 | return false; 43 | } 44 | 45 | public override bool UndoFeature() 46 | { 47 | try 48 | { 49 | Registry.SetValue(keyName, "ShowTaskViewButton", desiredValue, RegistryValueKind.DWord); 50 | return true; 51 | } 52 | catch (Exception ex) 53 | { 54 | logger.Log("Code red in " + ex.Message, Color.Red); 55 | } 56 | 57 | return false; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/Winpilot/Walks/Taskbar/TaskbarChat.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using Winpilot; 3 | using System; 4 | using System.Drawing; 5 | 6 | namespace Walks 7 | { 8 | internal class TaskbarChat : WalksBase 9 | { 10 | public TaskbarChat(MainForm form, Logger logger) : base(form, logger) 11 | { 12 | } 13 | 14 | private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; 15 | private const int desiredValue = 0; 16 | 17 | public override string ID() 18 | { 19 | return "Chat icon on taskbar"; 20 | } 21 | 22 | public override bool CheckFeature() 23 | { 24 | return !( 25 | Utils.IntEquals(keyName, "TaskbarMn", desiredValue) 26 | ); 27 | } 28 | 29 | public override bool DoFeature() 30 | { 31 | try 32 | { 33 | Registry.SetValue(keyName, "TaskbarMn", 1, RegistryValueKind.DWord); 34 | return true; 35 | } 36 | catch (Exception ex) 37 | { 38 | logger.Log("Code red in " + ex.Message, Color.Red); 39 | } 40 | 41 | return false; 42 | } 43 | 44 | public override bool UndoFeature() 45 | { 46 | try 47 | { 48 | Registry.SetValue(keyName, "TaskbarMn", 0, RegistryValueKind.DWord); 49 | return true; 50 | } 51 | catch (Exception ex) 52 | { 53 | logger.Log("Code red in " + ex.Message, Color.Red); 54 | } 55 | 56 | return false; 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /src/Winpilot/WalksBase.cs: -------------------------------------------------------------------------------- 1 | namespace Winpilot 2 | { 3 | // CoTweaker Base class 4 | public abstract class WalksBase 5 | { 6 | protected readonly MainForm _form; 7 | protected readonly Logger logger; 8 | 9 | public Logger Logger => logger; 10 | 11 | /* better short 12 | public Logger Logger 13 | { 14 | get { return logger; } 15 | } */ 16 | 17 | protected WalksBase(MainForm form, Logger logger) 18 | { 19 | _form = form; 20 | this.logger = logger; 21 | } 22 | 23 | public abstract string ID(); 24 | 25 | public abstract bool CheckFeature(); 26 | 27 | public abstract bool DoFeature(); 28 | 29 | public abstract bool UndoFeature(); 30 | } 31 | } -------------------------------------------------------------------------------- /src/Winpilot/app-backend/appxData.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "BingNews", 4 | "description": "News app from Microsoft", 5 | "removeCommand": "Get-AppxPackage *BingNews* | Remove-AppxPackage" 6 | }, 7 | { 8 | "name": "ZuneVideo", 9 | "description": "Video app from Microsoft", 10 | "removeCommand": "Get-AppxPackage *ZuneVideo* | Remove-AppxPackage" 11 | }, 12 | { 13 | "name": "MicrosoftOfficeHub", 14 | "description": "This is preinstalled Microsoft crapware.", 15 | "removeCommand": "Get-AppxPackage *MicrosoftOfficeHub* | Remove-AppxPackage" 16 | }, 17 | { 18 | "name": "GetHelp", 19 | "description": "The Get Help app empowers customers to self-help with troubleshooters, instant answers, Microsoft support articles, and more, before contacting assisted support.", 20 | "removeCommand": "Get-AppxPackage *GetHelp* | Remove-AppxPackage" 21 | }, 22 | { 23 | "name": "WhatsApp", 24 | "description": "WhatsApp has a UWP app for Windows 11, and while it’s not a web wrapper, it doesn’t have as many features as its mobile counterpart. If you dont use it, remove it.", 25 | "removeCommand": "Get-AppxPackage *WhatsApp* | Remove-AppxPackage" 26 | }, 27 | { 28 | "name": "Netflix", 29 | "description": "Netflix is a popular streaming service that grants users the key to a vast library of TV shows, movies, and documentaries. This is the official Windows 11 app.", 30 | "removeCommand": "Get-AppxPackage *Netflix* | Remove-AppxPackage" 31 | }, 32 | { 33 | "name": "Instagram", 34 | "description": "Instagram app on Microsoft Store is basically a PWA.", 35 | "removeCommand": "Get-AppxPackage *Instagram* | Remove-AppxPackage" 36 | }, 37 | { 38 | "name": "OneDrive", 39 | "description": "Official Microsoft crapware again.", 40 | "removeCommand": "Get-AppxPackage *OneDriveSync* | Remove-AppxPackage" 41 | }, 42 | { 43 | "name": "Microsoft MixedReality.Portal", 44 | "description": "Official Microsoft crapware.", 45 | "removeCommand": "Get-AppxPackage *Microsoft.MixedReality* | Remove-AppxPackage" 46 | }, 47 | { 48 | "name": "Microsoft Print3D", 49 | "description": "Official Microsoft crapware again.", 50 | "removeCommand": "Get-AppxPackage *Microsoft.Print3D* | Remove-AppxPackage" 51 | }, 52 | { 53 | "name": "Microsoft People", 54 | "description": "Official Microsoft crapware again.", 55 | "removeCommand": "Get-AppxPackage *Microsoft.People* | Remove-AppxPackage" 56 | }, 57 | { 58 | "name": "BytedancePte.Ltd.TikTok", 59 | "description": "The app is a PWA, which is available not only for Windows 11, but also for Windows 10.", 60 | "removeCommand": "Get-AppxPackage *TikTok* | Remove-AppxPackage" 61 | }, 62 | { 63 | "name": "Clipchamp.Clipchamp", 64 | "description": "Clipchamp is a web-based application. It's also not entirely free!", 65 | "removeCommand": "Get-AppxPackage *Clipchamp* | Remove-AppxPackage" 66 | }, 67 | { 68 | "name": "Microsoft.SkypeApp", 69 | "description": "The official Microsoft Skype app", 70 | "removeCommand": "Get-AppxPackage *Skype* | Remove-AppxPackage" 71 | }, 72 | { 73 | "name": "Spotify", 74 | "description": "Spotify’s Desktop app is basically Chromium instance.", 75 | "removeCommand": "Get-AppxPackage *Spotify* | Remove-AppxPackage" 76 | }, 77 | { 78 | "name": "9E2F88E3.TWITTER", 79 | "description": "Nothing more than a frontend for the X website. You really don't need it.", 80 | "removeCommand": "Get-AppxPackage *Twitter* | Remove-AppxPackage" 81 | } 82 | ] -------------------------------------------------------------------------------- /src/Winpilot/app-backend/chatbotClippy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Winpilot/app-backend/chatbotClippy.png -------------------------------------------------------------------------------- /src/Winpilot/app-backend/chatbotPaperclip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/builtbybel/Bloatynosy/48d27896be3557e1878094b86362514b8ab6cbca/src/Winpilot/app-backend/chatbotPaperclip.png -------------------------------------------------------------------------------- /src/Winpilot/app.manifest: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> 3 | <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 4 | <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 5 | <security> 6 | <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 7 | <!-- UAC-Manifestoptionen 8 | Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern möchten, ersetzen Sie den 9 | Knoten "requestedExecutionLevel" wie folgt. 10 | 11 | <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 12 | <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 13 | <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 14 | 15 | Durch Angabe des Elements "requestedExecutionLevel" wird die Datei- und Registrierungsvirtualisierung deaktiviert. 16 | Entfernen Sie dieses Element, wenn diese Virtualisierung aus Gründen der Abwärtskompatibilität 17 | für die Anwendung erforderlich ist. 18 | --> 19 | <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 20 | </requestedPrivileges> 21 | </security> 22 | </trustInfo> 23 | 24 | <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 25 | <application> 26 | <!-- Eine Liste der Windows-Versionen, unter denen diese Anwendung getestet 27 | und für die sie entwickelt wurde. Wenn Sie die Auskommentierung der entsprechenden Elemente aufheben, 28 | wird von Windows automatisch die kompatibelste Umgebung ausgewählt. --> 29 | 30 | <!-- Windows Vista --> 31 | <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> 32 | 33 | <!-- Windows 7 --> 34 | <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> 35 | 36 | <!-- Windows 8 --> 37 | <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> 38 | 39 | <!-- Windows 8.1 --> 40 | <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> 41 | 42 | <!-- Windows 10 --> 43 | <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> 44 | 45 | </application> 46 | </compatibility> 47 | 48 | <!-- Gibt an, dass die Anwendung mit DPI-Werten kompatibel ist und von Windows nicht automatisch auf höhere 49 | DPI-Werte skaliert wird. WPF-Anwendungen (Windows Presentation Foundation) sind automatisch mit DPI-Werten kompatibel, eine Aktivierung 50 | ist nicht erforderlich. Für Windows Forms-Anwendungen für .NET Framework 4.6, die diese Einstellung aktivieren, muss 51 | auch die Einstellung "'EnableWindowsFormsHighDpiAutoResizing" in der Datei "app.config" auf TRUE festgelegt werden. 52 | 53 | Hierdurch können für die Anwendung lange Pfade verwendet werden. Weitere Informationen finden Sie unter https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation.--> 54 | 55 | <application xmlns="urn:schemas-microsoft-com:asm.v3"> 56 | <windowsSettings> 57 | <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> 58 | <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> 59 | </windowsSettings> 60 | </application> 61 | 62 | 63 | <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren --> 64 | <!-- 65 | <dependency> 66 | <dependentAssembly> 67 | <assemblyIdentity 68 | type="win32" 69 | name="Microsoft.Windows.Common-Controls" 70 | version="6.0.0.0" 71 | processorArchitecture="*" 72 | publicKeyToken="6595b64144ccf1df" 73 | language="*" 74 | /> 75 | </dependentAssembly> 76 | </dependency> 77 | --> 78 | 79 | </assembly> 80 | -------------------------------------------------------------------------------- /src/Winpilot/packages.config: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <packages> 3 | <package id="Microsoft.Web.WebView2" version="1.0.2277.86" targetFramework="net48" /> 4 | <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" /> 5 | </packages> --------------------------------------------------------------------------------