Compare commits

..

No commits in common. "main" and "25.09.05" have entirely different histories.

45 changed files with 1462 additions and 613 deletions

View File

@ -87,7 +87,7 @@ graph TD
### Testing your changes ### Testing your changes
* To test to see if your changes work as intended run following commands in a powershell terminal as admin: * To test to see if your changes work as intended run following commands in a powershell teminal as admin:
* Change the directory where you are running the commands to the forked project. * Change the directory where you are running the commands to the forked project.
* `cd {path to the folder with the compile.ps1}` * `cd {path to the folder with the compile.ps1}`

View File

@ -1,4 +1,4 @@
<!--Before you make this PR have you followed the docs here? - https://winutil.christitus.com/contributing/ --> <!--Before you make this PR have you followed the docs here? - https://christitustech.github.io/winutil/contribute/ -->
## Type of Change ## Type of Change
- [ ] New feature - [ ] New feature

View File

@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v6 uses: actions/checkout@v4
- name: Check if PR was merged - name: Check if PR was merged
if: github.event.pull_request.merged == true if: github.event.pull_request.merged == true

View File

@ -13,7 +13,7 @@ jobs:
runs-on: windows-latest runs-on: windows-latest
steps: steps:
- name: Checkout Sources - name: Checkout Sources
uses: actions/checkout@v6 uses: actions/checkout@v4
- name: Compile and Syntaxcheck winutil.ps1 - name: Compile and Syntaxcheck winutil.ps1
shell: pwsh shell: pwsh

View File

@ -14,7 +14,7 @@ jobs:
CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }} CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
steps: steps:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v6 uses: actions/checkout@v4
- name: Compile project - name: Compile project
shell: pwsh shell: pwsh

View File

@ -11,7 +11,7 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v6 uses: actions/checkout@v4
- name: Check if winutil.ps1 exists - name: Check if winutil.ps1 exists
id: check_existence id: check_existence

View File

@ -11,7 +11,7 @@ jobs:
if: (github.event_name == 'schedule' && github.repository == 'ChrisTitusTech/winutil') || (github.event_name != 'schedule') if: (github.event_name == 'schedule' && github.repository == 'ChrisTitusTech/winutil') || (github.event_name != 'schedule')
steps: steps:
- name: Checkout 🛎️ - name: Checkout 🛎️
uses: actions/checkout@v6 uses: actions/checkout@v4
- name: Generate Sponsors 💖 - name: Generate Sponsors 💖
uses: JamesIves/github-sponsors-readme-action@v1 uses: JamesIves/github-sponsors-readme-action@v1

View File

@ -8,7 +8,7 @@ jobs:
name: PS Script Analyzer name: PS Script Analyzer
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- name: lint - name: lint
uses: devblackops/github-action-psscriptanalyzer@master uses: devblackops/github-action-psscriptanalyzer@master
with: with:
@ -22,7 +22,7 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v6 uses: actions/checkout@v4
- name: Install Pester - name: Install Pester
run: | run: |

View File

@ -51,24 +51,7 @@ Update-Progress "Pre-req: Running Preprocessor..." 0
$preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1" $preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1"
. $preprocessingFilePath . $preprocessingFilePath
$excludedFiles = @() $excludedFiles = @('.\.git\', '.\.gitignore', '.\.gitattributes', '.\.github\CODEOWNERS', '.\LICENSE', "$preprocessingFilePath", '*.png', '*.exe','.\.preprocessor_hashes.json')
# Add directories only if they exist
if (Test-Path '.\.git\') { $excludedFiles += '.\.git\' }
if (Test-Path '.\binary\') { $excludedFiles += '.\binary\' }
# Add files that should always be excluded
$excludedFiles += @(
'.\.gitignore',
'.\.gitattributes',
'.\.github\CODEOWNERS',
'.\LICENSE',
"$preprocessingFilePath",
'*.png',
'*.exe',
'.\.preprocessor_hashes.json'
)
$msg = "Pre-req: Code Formatting" $msg = "Pre-req: Code Formatting"
Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg

View File

@ -35,7 +35,7 @@ irm "https://christitus.com/win" | iex
irm "https://christitus.com/windev" | iex irm "https://christitus.com/windev" | iex
``` ```
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/) or [Create Issue](https://github.com/ChrisTitusTech/winutil/issues) If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/)
## 🎓 Documentation ## 🎓 Documentation
@ -79,7 +79,7 @@ You'll see a new file named `winutil.ps1`, which's created by `Compile.ps1` scri
These are the sponsors that help keep this project alive with monthly contributions. These are the sponsors that help keep this project alive with monthly contributions.
<!-- sponsors --><a href="https://github.com/markamos"><img src="https:&#x2F;&#x2F;github.com&#x2F;markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https:&#x2F;&#x2F;github.com&#x2F;dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https:&#x2F;&#x2F;github.com&#x2F;mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https:&#x2F;&#x2F;github.com&#x2F;jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https:&#x2F;&#x2F;github.com&#x2F;robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https:&#x2F;&#x2F;github.com&#x2F;KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https:&#x2F;&#x2F;github.com&#x2F;paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https:&#x2F;&#x2F;github.com&#x2F;djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https:&#x2F;&#x2F;github.com&#x2F;anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https:&#x2F;&#x2F;github.com&#x2F;FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https:&#x2F;&#x2F;github.com&#x2F;DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/realmuddy"><img src="https:&#x2F;&#x2F;github.com&#x2F;realmuddy.png" width="60px" alt="User avatar: Phillip Waters" /></a><a href="https://github.com/quaszi"><img src="https:&#x2F;&#x2F;github.com&#x2F;quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https:&#x2F;&#x2F;github.com&#x2F;DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https:&#x2F;&#x2F;github.com&#x2F;KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/IsaacThoman"><img src="https:&#x2F;&#x2F;github.com&#x2F;IsaacThoman.png" width="60px" alt="User avatar: Isaac Thoman" /></a><!-- sponsors --> <!-- sponsors --><a href="https://github.com/TriHydera"><img src="https:&#x2F;&#x2F;github.com&#x2F;TriHydera.png" width="60px" alt="User avatar: TriHydera" /></a><a href="https://github.com/DelDongo"><img src="https:&#x2F;&#x2F;github.com&#x2F;DelDongo.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/markamos"><img src="https:&#x2F;&#x2F;github.com&#x2F;markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https:&#x2F;&#x2F;github.com&#x2F;dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https:&#x2F;&#x2F;github.com&#x2F;mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https:&#x2F;&#x2F;github.com&#x2F;jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https:&#x2F;&#x2F;github.com&#x2F;robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https:&#x2F;&#x2F;github.com&#x2F;KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https:&#x2F;&#x2F;github.com&#x2F;paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https:&#x2F;&#x2F;github.com&#x2F;djones369.png" width="60px" alt="User avatar: Dave J. - WhamGeek" /></a><a href="https://github.com/anthonymendez"><img src="https:&#x2F;&#x2F;github.com&#x2F;anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https:&#x2F;&#x2F;github.com&#x2F;FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https:&#x2F;&#x2F;github.com&#x2F;DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/realmuddy"><img src="https:&#x2F;&#x2F;github.com&#x2F;realmuddy.png" width="60px" alt="User avatar: Phillip Waters" /></a><a href="https://github.com/quaszi"><img src="https:&#x2F;&#x2F;github.com&#x2F;quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https:&#x2F;&#x2F;github.com&#x2F;DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https:&#x2F;&#x2F;github.com&#x2F;KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/danhively"><img src="https:&#x2F;&#x2F;github.com&#x2F;danhively.png" width="60px" alt="User avatar: Dan Hively" /></a><!-- sponsors -->
## 🏅 Thanks to all Contributors ## 🏅 Thanks to all Contributors
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻. Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.

View File

@ -143,15 +143,6 @@
"link": "https://github.com/sharkdp/bat", "link": "https://github.com/sharkdp/bat",
"winget": "sharkdp.bat" "winget": "sharkdp.bat"
}, },
"beeper": {
"category": "Communications",
"choco": "na",
"content": "Beeper",
"description": "All your chats in one app",
"link": "https://www.beeper.com/",
"winget": "Beeper.Beeper"
},
"bitwarden": { "bitwarden": {
"category": "Utilities", "category": "Utilities",
"choco": "bitwarden", "choco": "bitwarden",
@ -388,18 +379,10 @@
"category": "Microsoft Tools", "category": "Microsoft Tools",
"choco": "na", "choco": "na",
"content": "DISMTools", "content": "DISMTools",
"description": "DISMTools is a fast, customizable GUI for the DISM utility, supporting Windows images from Windows 7 onward. It handles installations on any drive, offers project support, and lets users tweak settings like color modes, language, and DISM versions; powered by both native DISM and a managed DISM API.", "description": "DISMTools is a front-end for DISM that lets you manage your Windows Imaging (WIM) files and a whole lot more.",
"link": "https://github.com/CodingWonders/DISMTools", "link": "https://github.com/CodingWonders/DISMTools",
"winget": "CodingWondersSoftware.DISMTools.Stable" "winget": "CodingWondersSoftware.DISMTools.Stable"
}, },
"ntlite": {
"category": "Microsoft Tools",
"choco": "ntlite-free",
"content": "NTLite",
"description": "Integrate updates, drivers, automate Windows and application setup, speedup Windows deployment process and have it all set for the next time.",
"link": "https://ntlite.com",
"winget": "Nlitesoft.NTLite"
},
"ditto": { "ditto": {
"category": "Utilities", "category": "Utilities",
"choco": "ditto", "choco": "ditto",
@ -520,14 +503,6 @@
"link": "https://emulationstation.org/", "link": "https://emulationstation.org/",
"winget": "Emulationstation.Emulationstation" "winget": "Emulationstation.Emulationstation"
}, },
"enteauth": {
"category": "Utilities",
"choco": "ente-auth",
"content": "Ente Auth",
"description": "Ente Auth is a free, cross-platform, end-to-end encrypted authenticator app.",
"link": "https://ente.io/auth/",
"winget": "ente-io.auth-desktop"
},
"epicgames": { "epicgames": {
"category": "Games", "category": "Games",
"choco": "epicgameslauncher", "choco": "epicgameslauncher",
@ -1000,14 +975,6 @@
"link": "https://aws.amazon.com/corretto", "link": "https://aws.amazon.com/corretto",
"winget": "Amazon.Corretto.21.JDK" "winget": "Amazon.Corretto.21.JDK"
}, },
"java25": {
"category": "Development",
"choco": "corretto25jdk",
"content": "Amazon Corretto 25 (LTS)",
"description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).",
"link": "https://aws.amazon.com/corretto",
"winget": "Amazon.Corretto.25.JDK"
},
"jdownloader": { "jdownloader": {
"category": "Utilities", "category": "Utilities",
"choco": "jdownloader", "choco": "jdownloader",
@ -1196,7 +1163,7 @@
"category": "Communications", "category": "Communications",
"choco": "element-desktop", "choco": "element-desktop",
"content": "Element", "content": "Element",
"description": "Element is a client for Matrix; an open network for secure, decentralized communication.", "description": "Element is a client for Matrixan open network for secure, decentralized communication.",
"link": "https://element.io/", "link": "https://element.io/",
"winget": "Element.Element" "winget": "Element.Element"
}, },
@ -1542,7 +1509,7 @@
"content": "OpenRGB", "content": "OpenRGB",
"description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.", "description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.",
"link": "https://openrgb.org/", "link": "https://openrgb.org/",
"winget": "OpenRGB.OpenRGB" "winget": "CalcProgrammer1.OpenRGB"
}, },
"openscad": { "openscad": {
"category": "Multimedia Tools", "category": "Multimedia Tools",
@ -1728,13 +1695,13 @@
"link": "https://bitsum.com/", "link": "https://bitsum.com/",
"winget": "BitSum.ProcessLasso" "winget": "BitSum.ProcessLasso"
}, },
"protonauth": { "spotify": {
"category": "Utilities", "category": "Multimedia Tools",
"choco": "protonauth", "choco": "spotify",
"content": "Proton Authenticator", "content": "Spotify",
"description": "2FA app from Proton to securely sync and backup 2FA codes.", "description": "Spotify is a digital music service that gives you access to millions of songs, podcasts, and videos from artists all over the world.",
"link": "https://proton.me/authenticator", "link": "https://www.spotify.com/",
"winget": "Proton.ProtonAuthenticator" "winget": "Spotify.Spotify"
}, },
"processmonitor": { "processmonitor": {
"category": "Microsoft Tools", "category": "Microsoft Tools",
@ -1918,7 +1885,7 @@
"content": "Session", "content": "Session",
"description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.", "description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.",
"link": "https://getsession.org/", "link": "https://getsession.org/",
"winget": "Session.Session" "winget": "Oxen.Session"
}, },
"sharex": { "sharex": {
"category": "Multimedia Tools", "category": "Multimedia Tools",
@ -2724,7 +2691,7 @@
"category": "Utilities", "category": "Utilities",
"choco": "ultravnc", "choco": "ultravnc",
"content": "UltraVNC", "content": "UltraVNC",
"description": "UltraVNC is a powerful, easy to use and free - remote pc access software - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.", "description": "UltraVNC is a powerful, easy to use and free - remote pc access softwares - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.",
"link": "https://uvnc.com/", "link": "https://uvnc.com/",
"winget": "uvncbvba.UltraVnc" "winget": "uvncbvba.UltraVnc"
}, },
@ -2935,13 +2902,5 @@
"description": "The modern, privacy-focused, performance-driven browser built on Firefox", "description": "The modern, privacy-focused, performance-driven browser built on Firefox",
"link": "https://zen-browser.app/", "link": "https://zen-browser.app/",
"winget": "Zen-Team.Zen-Browser" "winget": "Zen-Team.Zen-Browser"
},
"Zed": {
"category": "Development",
"choco": "na",
"content": "Zed",
"description": "Zed is a modern, high-performance code editor designed from the ground up for speed and collaboration.",
"link": "https://zed.dev/",
"winget": "Zed.Zed"
} }
} }

View File

@ -46,5 +46,23 @@
"Secondary": "94.140.15.16", "Secondary": "94.140.15.16",
"Primary6": "2a10:50c0::bad1:ff", "Primary6": "2a10:50c0::bad1:ff",
"Secondary6": "2a10:50c0::bad2:ff" "Secondary6": "2a10:50c0::bad2:ff"
},
"dns0.eu_Open":{
"Primary": "193.110.81.254",
"Secondary": "185.253.5.254",
"Primary6": "2a0f:fc80::ffff",
"Secondary6": "2a0f:fc81::ffff"
},
"dns0.eu_ZERO":{
"Primary": "193.110.81.9",
"Secondary": "185.253.5.9",
"Primary6": "2a0f:fc80::9",
"Secondary6": "2a0f:fc81::9"
},
"dns0.eu_KIDS":{
"Primary": "193.110.81.1",
"Secondary": "185.253.5.1",
"Primary6": "2a0f:fc80::1",
"Secondary6": "2a0f:fc81::1"
} }
} }

View File

@ -81,6 +81,42 @@
], ],
"link": "https://winutil.christitus.com/dev/features/features/nfs" "link": "https://winutil.christitus.com/dev/features/features/nfs"
}, },
"WPFFeatureEnableSearchSuggestions": {
"Content": "Enable Search Box Web Suggestions in Registry(explorer restart)",
"Description": "Enables web suggestions when searching using Windows Search.",
"category": "Features",
"panel": "1",
"Order": "a015_",
"feature": [],
"InvokeScript": [
"
If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null
}
New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 0 -Force
Stop-Process -name explorer -force
"
],
"link": "https://winutil.christitus.com/dev/features/features/enablesearchsuggestions"
},
"WPFFeatureDisableSearchSuggestions": {
"Content": "Disable Search Box Web Suggestions in Registry(explorer restart)",
"Description": "Disables web suggestions when searching using Windows Search.",
"category": "Features",
"panel": "1",
"Order": "a016_",
"feature": [],
"InvokeScript": [
"
If (!(Test-Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer')) {
New-Item -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Force | Out-Null
}
New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer' -Name 'DisableSearchBoxSuggestions' -Type DWord -Value 1 -Force
Stop-Process -name explorer -force
"
],
"link": "https://winutil.christitus.com/dev/features/features/disablesearchsuggestions"
},
"WPFFeatureRegBackup": { "WPFFeatureRegBackup": {
"Content": "Enable Daily Registry Backup Task 12.30am", "Content": "Enable Daily Registry Backup Task 12.30am",
"Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.", "Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.",
@ -254,14 +290,6 @@
"ButtonWidth": "300", "ButtonWidth": "300",
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/region" "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/region"
}, },
"WPFPanelRestore": {
"Content": "Windows Restore",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/restore"
},
"WPFPanelSound": { "WPFPanelSound": {
"Content": "Sound Settings", "Content": "Sound Settings",
"category": "Legacy Windows Panels", "category": "Legacy Windows Panels",
@ -270,6 +298,7 @@
"ButtonWidth": "300", "ButtonWidth": "300",
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/user" "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/user"
}, },
"WPFPanelSystem": { "WPFPanelSystem": {
"Content": "System Properties", "Content": "System Properties",
"category": "Legacy Windows Panels", "category": "Legacy Windows Panels",

View File

@ -1,12 +1,15 @@
{ {
"Standard": [ "Standard": [
"WPFTweaksActivity", "WPFTweaksAH",
"WPFTweaksConsumerFeatures", "WPFTweaksConsumerFeatures",
"WPFTweaksDisableExplorerAutoDiscovery", "WPFTweaksDisableExplorerAutoDiscovery",
"WPFTweaksDVR", "WPFTweaksDVR",
"WPFTweaksLocation", "WPFTweaksHome",
"WPFTweaksLoc",
"WPFTweaksServices", "WPFTweaksServices",
"WPFTweaksStorage",
"WPFTweaksTele", "WPFTweaksTele",
"WPFTweaksWifi",
"WPFTweaksDiskCleanup", "WPFTweaksDiskCleanup",
"WPFTweaksDeleteTempFiles", "WPFTweaksDeleteTempFiles",
"WPFTweaksEndTaskOnTaskbar", "WPFTweaksEndTaskOnTaskbar",
@ -16,6 +19,7 @@
"Minimal": [ "Minimal": [
"WPFTweaksConsumerFeatures", "WPFTweaksConsumerFeatures",
"WPFTweaksDisableExplorerAutoDiscovery", "WPFTweaksDisableExplorerAutoDiscovery",
"WPFTweaksHome",
"WPFTweaksServices", "WPFTweaksServices",
"WPFTweaksTele" "WPFTweaksTele"
] ]

View File

@ -3,7 +3,7 @@
"AppEntryWidth": "130", "AppEntryWidth": "130",
"AppEntryFontSize": "11", "AppEntryFontSize": "11",
"AppEntryMargin": "1,1,1,1", "AppEntryMargin": "1,1,1,1",
"AppEntryBorderThickness": "0", "AppEntryBorderTickness": "0",
"CustomDialogFontSize": "12", "CustomDialogFontSize": "12",
"CustomDialogFontSizeHeader": "14", "CustomDialogFontSizeHeader": "14",
"CustomDialogLogoSize": "25", "CustomDialogLogoSize": "25",

File diff suppressed because it is too large Load Diff

View File

@ -60,7 +60,6 @@ public class PowerManagement {
$WPBT = $sync.MicroWinWPBT.IsChecked $WPBT = $sync.MicroWinWPBT.IsChecked
$unsupported = $sync.MicroWinUnsupported.IsChecked $unsupported = $sync.MicroWinUnsupported.IsChecked
$skipFla = $sync.MicroWinNoFLA.IsChecked
$importVirtIO = $sync.MicrowinCopyVirtIO.IsChecked $importVirtIO = $sync.MicrowinCopyVirtIO.IsChecked
@ -182,15 +181,6 @@ public class PowerManagement {
reg unload HKLM\zSYSTEM reg unload HKLM\zSYSTEM
} }
if ($skipFla) {
Write-Host "Skipping first logon animation..."
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /f
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /ve /t REG_SZ /d "Stop First Logon Animation Process" /f
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /v StubPath /t REG_EXPAND_SZ /d '""%WINDIR%\System32\cmd.exe"" /C ""taskkill /f /im firstlogonanim.exe""' /f
reg unload HKLM\zSOFTWARE
}
if ($unsupported) { if ($unsupported) {
Write-Host "Bypassing system requirements (locally)" Write-Host "Bypassing system requirements (locally)"
reg add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f reg add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f

View File

@ -4,7 +4,7 @@ function Invoke-MicrowinGetIso {
Function to get the path to Iso file for MicroWin, unpack that isom=, read basic information and populate the UI Options Function to get the path to Iso file for MicroWin, unpack that isom=, read basic information and populate the UI Options
#> #>
Write-Debug "Invoking WPFGetIso" Write-Host "Invoking WPFGetIso"
if($sync.ProcessRunning) { if($sync.ProcessRunning) {
$msg = "GetIso process is currently running." $msg = "GetIso process is currently running."
@ -73,11 +73,10 @@ function Invoke-MicrowinGetIso {
} }
Invoke-MicrowinBusyInfo -action "wip" -message "Downloading Windows ISO... (This may take a long time)" -interactive $false Invoke-MicrowinBusyInfo -action "wip" -message "Downloading Windows ISO... (This may take a long time)" -interactive $false
& $fidopath -Win 'Windows 11' -Rel Latest -Arch "x64" -Lang $lang & $fidopath -Win 'Windows 11' -Rel $sync["ISORelease"].SelectedItem -Arch "x64" -Lang $lang -Ed "Windows 11 Home/Pro/Edu"
if (-not $?) if (-not $?)
{ {
Write-Host "Could not download the ISO file. Look at the output of the console for more information." Write-Host "Could not download the ISO file. Look at the output of the console for more information."
Write-Host "If you get an error about scripts is disabled on this system please close WinUtil and run - 'Set-ExecutionPolicy -ExecutionPolicy Unrestricted' and select 'A' and retry using MicroWin again."
$msg = "The ISO file could not be downloaded" $msg = "The ISO file could not be downloaded"
Invoke-MicrowinBusyInfo -action "warning" -message $msg Invoke-MicrowinBusyInfo -action "warning" -message $msg
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
@ -132,7 +131,7 @@ function Invoke-MicrowinGetIso {
if (!$downloadFromGitHub) { if (!$downloadFromGitHub) {
# only show the message to people who did check the box to download from github, if you check the box # only show the message to people who did check the box to download from github, if you check the box
# you consent to downloading it, no need to show extra dialogs # you consent to downloading it, no need to show extra dialogs
[System.Windows.MessageBox]::Show("oscdimg.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.") [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.")
# the step below needs choco to download oscdimg # the step below needs choco to download oscdimg
# Install Choco if not already present # Install Choco if not already present
Install-WinUtilChoco Install-WinUtilChoco
@ -149,7 +148,7 @@ function Invoke-MicrowinGetIso {
[System.Windows.MessageBox]::Show($msg) [System.Windows.MessageBox]::Show($msg)
return return
} else { } else {
[System.Windows.MessageBox]::Show("oscdimg.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.") [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.")
Invoke-MicrowinBusyInfo -action "wip" -message "Downloading oscdimg.exe..." -interactive $false Invoke-MicrowinBusyInfo -action "wip" -message "Downloading oscdimg.exe..." -interactive $false
Microwin-GetOscdimg -oscdimgPath $oscdimgPath Microwin-GetOscdimg -oscdimgPath $oscdimgPath
$oscdImgFound = Test-Path $oscdimgPath -PathType Leaf $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
@ -200,7 +199,7 @@ function Invoke-MicrowinGetIso {
$msg = "Failed to mount the image. Error: $($_.Exception.Message)" $msg = "Failed to mount the image. Error: $($_.Exception.Message)"
Write-Error $msg Write-Error $msg
Write-Error "This is NOT winutil's problem, your ISO might be corrupt, or there is a problem on the system" Write-Error "This is NOT winutil's problem, your ISO might be corrupt, or there is a problem on the system"
Write-Host "Please refer to this wiki for more details: https://winutil.christitus.com/knownissues/" -ForegroundColor Red Write-Host "Please refer to this wiki for more details: https://christitustech.github.io/winutil/KnownIssues/#troubleshoot-errors-during-microwin-usage" -ForegroundColor Red
Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning"
Invoke-MicrowinBusyInfo -action "warning" -message $msg Invoke-MicrowinBusyInfo -action "warning" -message $msg
return return

View File

@ -1,6 +1,6 @@
function Microwin-NewCheckInstall { function Microwin-NewCheckInstall {
# using here string to embed firstrun # using here string to embedd firstrun
$checkInstall = @' $checkInstall = @'
@echo off @echo off
if exist "%HOMEDRIVE%\windows\cpu.txt" ( if exist "%HOMEDRIVE%\windows\cpu.txt" (

View File

@ -1,6 +1,6 @@
function Microwin-NewFirstRun { function Microwin-NewFirstRun {
# using here string to embed firstrun # using here string to embedd firstrun
$firstRun = @' $firstRun = @'
# Set the global error action preference to continue # Set the global error action preference to continue
$ErrorActionPreference = "Continue" $ErrorActionPreference = "Continue"
@ -34,9 +34,7 @@ function Microwin-NewFirstRun {
$taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar" $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
# Delete all files on the Taskbar # Delete all files on the Taskbar
if (Test-Path "$taskbarPath") { Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force
Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force
}
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges" Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges"
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges" Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges"
Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites" Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites"
@ -90,23 +88,6 @@ function Microwin-NewFirstRun {
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.AccountHealth" /f reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.AccountHealth" /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.AccountHealth" /v Enabled /t REG_DWORD /d 0 /f reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.AccountHealth" /v Enabled /t REG_DWORD /d 0 /f
# This will set List view in Start menu on Win11 25H2. This will not do anything in 24H2 and older
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v AllAppsViewMode /t REG_DWORD /d 2 /f
# This will disable the Recommendations in 25H2. This is much simpler than the method used in 24H2 that requires the Education Environment policy
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_IrisRecommendations /t REG_DWORD /d 0 /f
# Other Start Menu settings
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_AccountNotifications /t REG_DWORD /d 0 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowAllPinsList /t REG_DWORD /d 0 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowFrequentList /t REG_DWORD /d 0 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowRecentList /t REG_DWORD /d 0 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_TrackDocs /t REG_DWORD /d 0 /f
Clear-Host
Write-Host "The taskbar will take around a minute to show up, but you can start using your computer now. Try pressing the Windows key to open the Start menu, or Windows + E to launch File Explorer."
Start-Sleep -Seconds 10
if (Test-Path -Path "$env:HOMEDRIVE\winutil-config.json") if (Test-Path -Path "$env:HOMEDRIVE\winutil-config.json")
{ {
Write-Host "Configuration file detected. Applying..." Write-Host "Configuration file detected. Applying..."

View File

@ -41,7 +41,7 @@
$selectedAppRemoveButton.Add_MouseEnter({ $this.Foreground = "Red" }) $selectedAppRemoveButton.Add_MouseEnter({ $this.Foreground = "Red" })
$selectedAppRemoveButton.Add_MouseLeave({ $this.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") }) $selectedAppRemoveButton.Add_MouseLeave({ $this.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") })
$selectedAppRemoveButton.Add_Click({ $selectedAppRemoveButton.Add_Click({
$sync.($this.Tag).isChecked = $false # On click of the remove button, we only have to uncheck the corresponding checkbox. This will kick of all necessary changes to update the UI $sync.($this.Tag).isChecked = $false # On click of the remove button, we only have to uncheck the corresponding checkbox. This will kick of all neccessary changes to update the UI
}) })
[System.Windows.Controls.Grid]::SetColumn($selectedAppRemoveButton, 1) [System.Windows.Controls.Grid]::SetColumn($selectedAppRemoveButton, 1)
$selectedAppGrid.Children.Add($selectedAppRemoveButton) $selectedAppGrid.Children.Add($selectedAppRemoveButton)

View File

@ -13,7 +13,7 @@ function Get-LocalizedYesNo {
#> #>
# Run choice and capture its options as output # Run choice and capture its options as output
# The output shows the options for Yes and No as "[Y,N]?" in the (partially) localized format. # The output shows the options for Yes and No as "[Y,N]?" in the (partitially) localized format.
# eg. English: [Y,N]? # eg. English: [Y,N]?
# Dutch: [Y,N]? # Dutch: [Y,N]?
# German: [J,N]? # German: [J,N]?

View File

@ -1,7 +1,7 @@
function Initialize-InstallAppEntry { function Initialize-InstallAppEntry {
<# <#
.SYNOPSIS .SYNOPSIS
Creates the app entry to be placed on the install tab for a given app Creates the app entry to be placed on the isntall tab for a given app
Used to as part of the Install Tab UI generation Used to as part of the Install Tab UI generation
.PARAMETER TargetElement .PARAMETER TargetElement
The Element into which the Apps should be placed The Element into which the Apps should be placed

View File

@ -8,7 +8,7 @@
Also creates an overlay with a progress bar and text to indicate that an install or uninstall is in progress Also creates an overlay with a progress bar and text to indicate that an install or uninstall is in progress
.PARAMETER TargetElement .PARAMETER TargetElement
The element to which the AppArea should be added The element to which the AppArea shoud be added
#> #>
param($TargetElement) param($TargetElement)

View File

@ -24,9 +24,7 @@ function Initialize-InstallCategoryAppList {
$toggleButton = New-Object Windows.Controls.Label $toggleButton = New-Object Windows.Controls.Label
$toggleButton.Content = "$Category" $toggleButton.Content = "$Category"
$toggleButton.Tag = "CategoryToggleButton" $toggleButton.Tag = "CategoryToggleButton"
$toggleButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize") $sync.$Category = $Category
$toggleButton.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily")
$sync.$Category = $toggleButton
$null = $TargetElement.Items.Add($toggleButton) $null = $TargetElement.Items.Add($toggleButton)
} }

View File

@ -30,16 +30,24 @@ Function Install-WinUtilProgramWinget {
.PARAMETER wingetId .PARAMETER wingetId
The Id of the Program that Winget should Install/Uninstall The Id of the Program that Winget should Install/Uninstall
.PARAMETER scope
Determines the installation mode. Can be "user" or "machine" (For more info look at the winget documentation)
.PARAMETER credential
The PSCredential Object of the user that should be used to run winget
.NOTES .NOTES
Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed
#> #>
param ( param (
[string]$wingetId [string]$wingetId,
[string]$scope = "",
[PScredential]$credential = $null
) )
$commonArguments = "--id $wingetId --silent" $commonArguments = "--id $wingetId --silent"
$arguments = if ($Action -eq "Install") { $arguments = if ($Action -eq "Install") {
"install $commonArguments --accept-source-agreements --accept-package-agreements" "install $commonArguments --accept-source-agreements --accept-package-agreements $(if ($scope) {" --scope $scope"})"
} else { } else {
"uninstall $commonArguments" "uninstall $commonArguments"
} }
@ -52,6 +60,10 @@ Function Install-WinUtilProgramWinget {
NoNewWindow = $true NoNewWindow = $true
} }
if ($credential) {
$processParams.credential = $credential
}
return (Start-Process @processParams).ExitCode return (Start-Process @processParams).ExitCode
} }
@ -75,6 +87,28 @@ Function Install-WinUtilProgramWinget {
return $true return $true
} }
Write-Host "Attempt installation of $($Program) with User scope"
$status = Invoke-Winget -wingetId $Program -scope "user"
if ($status -eq 0) {
Write-Host "$($Program) installed successfully with User scope."
return $true
} elseif ($status -eq -1978335189) {
Write-Host "$($Program) No applicable update found"
return $true
}
$userAcknowledgment = [System.Windows.MessageBox]::Show("You need to input your password to install $($Program) with specific user credentials.", "User credential Prompt", [System.Windows.MessageBoxButton]::Ok)
if ($userAcknowledgment -eq 'Ok') {
$getcreds = Get-Credential $env:USERNAME
$status = Invoke-Winget -wingetId $Program -credential $getcreds
if ($status -eq 0) {
Write-Host "$($Program) installed successfully with User prompt."
return $true
}
} else {
Write-Host "Skipping installation with specific user credentials."
}
Write-Host "Failed to install $($Program)." Write-Host "Failed to install $($Program)."
return $false return $false
} }

View File

@ -21,6 +21,10 @@ function Invoke-WinUtilTweaks {
$KeepServiceStartup = $true $KeepServiceStartup = $true
) )
if ($Checkbox -contains "Toggle") {
$CheckBox = $sync.configs.tweaks.$CheckBox
}
Write-Debug "Tweaks: $($CheckBox)" Write-Debug "Tweaks: $($CheckBox)"
if($undo) { if($undo) {
$Values = @{ $Values = @{
@ -50,7 +54,7 @@ function Invoke-WinUtilTweaks {
$sync.configs.tweaks.$CheckBox.service | ForEach-Object { $sync.configs.tweaks.$CheckBox.service | ForEach-Object {
$changeservice = $true $changeservice = $true
# The check for !($undo) is required, without it the script will throw an error for accessing unavailable member, which's the 'OriginalService' Property # The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property
if($KeepServiceStartup -AND !($undo)) { if($KeepServiceStartup -AND !($undo)) {
try { try {
# Check if the service exists # Check if the service exists

View File

@ -6,35 +6,35 @@ function Set-PackageManagerPreference {
Reads from preference.ini if no argument sent. Reads from preference.ini if no argument sent.
.PARAMETER preferredPackageManager .PARAMETER preferedPackageManager
The PackageManager that was selected. The PackageManager that was selected.
#> #>
param( param(
[Parameter(Position=0, Mandatory=$false)] [Parameter(Position=0, Mandatory=$false)]
[PackageManagers]$preferredPackageManager [PackageManagers]$preferedPackageManager
) )
$preferencePath = "$env:LOCALAPPDATA\winutil\preferences.ini" $preferencePath = "$env:LOCALAPPDATA\winutil\preferences.ini"
$oldChocoPath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini" $oldChocoPath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini"
#Try loading from file if no argument given. #Try loading from file if no argument given.
if ($null -eq $preferredPackageManager) { if ($null -eq $preferedPackageManager) {
# Backwards compat for preferChocolatey.ini # Backwards compat for preferChocolatey.ini
if (Test-Path -Path $oldChocoPath) { if (Test-Path -Path $oldChocoPath) {
$preferredPackageManager = [PackageManagers]::Choco $preferedPackageManager = [PackageManagers]::Choco
Remove-Item -Path $oldChocoPath Remove-Item -Path $oldChocoPath
} }
elseif (Test-Path -Path $preferencePath) { elseif (Test-Path -Path $preferencePath) {
$potential = Get-Content -Path $preferencePath -TotalCount 1 $potential = Get-Content -Path $preferencePath -TotalCount 1
$preferredPackageManager = [PackageManagers]$potential $preferedPackageManager = [PackageManagers]$potential
} }
else { else {
Write-Debug "Creating new preference file, defaulting to winget." Write-Debug "Creating new preference file, defaulting to winget."
$preferredPackageManager = [PackageManagers]::Winget $preferedPackageManager = [PackageManagers]::Winget
} }
} }
$sync["ManagerPreference"] = [PackageManagers]::$preferredPackageManager $sync["ManagerPreference"] = [PackageManagers]::$preferedPackageManager
Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'" Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'"

View File

@ -4,7 +4,7 @@ function Set-WinUtilProgressbar{
This function is used to Update the Progress Bar displayed in the winutil GUI. This function is used to Update the Progress Bar displayed in the winutil GUI.
It will be automatically hidden if the user clicks something and no process is running It will be automatically hidden if the user clicks something and no process is running
.PARAMETER Label .PARAMETER Label
The Text to be overlaid onto the Progress Bar The Text to be overlayed onto the Progress Bar
.PARAMETER PERCENT .PARAMETER PERCENT
The percentage of the Progress Bar that should be filled (0-100) The percentage of the Progress Bar that should be filled (0-100)
#> #>

View File

@ -24,12 +24,8 @@ Function Set-WinUtilService {
# Check if the service exists # Check if the service exists
$service = Get-Service -Name $Name -ErrorAction Stop $service = Get-Service -Name $Name -ErrorAction Stop
# Service exists, proceed with changing properties -- while handling auto delayed start for PWSH 5 # Service exists, proceed with changing properties
if (($PSVersionTable.PSVersion.Major -lt 7) -and ($StartupType -eq "AutomaticDelayedStart")) { $service | Set-Service -StartupType $StartupType -ErrorAction Stop
sc.exe config $Name start=delayed-auto
} else {
$service | Set-Service -StartupType $StartupType -ErrorAction Stop
}
} catch [System.ServiceProcess.ServiceNotFoundException] { } catch [System.ServiceProcess.ServiceNotFoundException] {
Write-Warning "Service $Name was not found" Write-Warning "Service $Name was not found"
} catch { } catch {

View File

@ -1,26 +0,0 @@
function Test-WinUtilInternetConnection {
<#
.SYNOPSIS
Tests if the computer has internet connectivity
.OUTPUTS
Boolean - True if connected, False if offline
#>
try {
# Test multiple reliable endpoints
$testSites = @(
"8.8.8.8", # Google DNS
"1.1.1.1", # Cloudflare DNS
"208.67.222.222" # OpenDNS
)
foreach ($site in $testSites) {
if (Test-Connection -ComputerName $site -Count 1 -Quiet -ErrorAction SilentlyContinue) {
return $true
}
}
return $false
}
catch {
return $false
}
}

View File

@ -33,7 +33,7 @@ function Test-WinUtilPackageManager {
$wingetVersionFull = ($wingetInfo | Select-String -Pattern 'Package Manager v\d+\.\d+\.\d+').Matches.Value.Split(' ')[-1] $wingetVersionFull = ($wingetInfo | Select-String -Pattern 'Package Manager v\d+\.\d+\.\d+').Matches.Value.Split(' ')[-1]
} }
} catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] { } catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] {
Write-Warning "Winget was not found due to un-availability reasons" Write-Warning "Winget was not found due to un-availablity reasons"
$wingetExists = $false $wingetExists = $false
} catch { } catch {
Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)" Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)"
@ -41,7 +41,7 @@ function Test-WinUtilPackageManager {
} }
# If Winget is available, Parse it's Version and give proper information to Terminal Output. # If Winget is available, Parse it's Version and give proper information to Terminal Output.
# If it isn't available, the return of this function will be "not-installed", indicating that # If it isn't available, the return of this funtion will be "not-installed", indicating that
# Winget isn't installed/available on The System. # Winget isn't installed/available on The System.
if ($wingetExists) { if ($wingetExists) {
# Check if Preview Version # Check if Preview Version
@ -55,7 +55,7 @@ function Test-WinUtilPackageManager {
# Check if Winget's Version is too old. # Check if Winget's Version is too old.
$wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v')) $wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v'))
# Grabs the latest release of Winget from the GitHub API for version check process. # Grabs the latest release of Winget from the Github API for version check process.
$response = winget search -e Microsoft.AppInstaller --accept-source-agreements $response = winget search -e Microsoft.AppInstaller --accept-source-agreements
$wingetLatestVersion = ($response | Select-String -Pattern '\d+\.\d+\.\d+\.\d+').Matches.Value $wingetLatestVersion = ($response | Select-String -Pattern '\d+\.\d+\.\d+\.\d+').Matches.Value
Write-Host "Latest Search Version: $wingetLatestVersion" -ForegroundColor White Write-Host "Latest Search Version: $wingetLatestVersion" -ForegroundColor White

View File

@ -4,7 +4,7 @@ function Invoke-ScratchDialog {
<# <#
.SYNOPSIS .SYNOPSIS
Enable Editable Text box Alternate Scratch path Enable Editable Text box Alternate Scartch path
.PARAMETER Button .PARAMETER Button
#> #>

View File

@ -41,12 +41,11 @@ function Invoke-WPFButton {
"WPFPanelPower" {Invoke-WPFControlPanel -Panel $button} "WPFPanelPower" {Invoke-WPFControlPanel -Panel $button}
"WPFPanelPrinter" {Invoke-WPFControlPanel -Panel $button} "WPFPanelPrinter" {Invoke-WPFControlPanel -Panel $button}
"WPFPanelRegion" {Invoke-WPFControlPanel -Panel $button} "WPFPanelRegion" {Invoke-WPFControlPanel -Panel $button}
"WPFPanelRestore" {Invoke-WPFControlPanel -Panel $button}
"WPFPanelSound" {Invoke-WPFControlPanel -Panel $button} "WPFPanelSound" {Invoke-WPFControlPanel -Panel $button}
"WPFPanelSystem" {Invoke-WPFControlPanel -Panel $button} "WPFPanelSystem" {Invoke-WPFControlPanel -Panel $button}
"WPFPanelTimedate" {Invoke-WPFControlPanel -Panel $button} "WPFPanelTimedate" {Invoke-WPFControlPanel -Panel $button}
"WPFPanelUser" {Invoke-WPFControlPanel -Panel $button} "WPFPanelUser" {Invoke-WPFControlPanel -Panel $button}
"WPFUpdatesdefault" {Invoke-WPFUpdatesdefault} "WPFUpdatesdefault" {Invoke-WPFFixesUpdate}
"WPFFixesUpdate" {Invoke-WPFFixesUpdate} "WPFFixesUpdate" {Invoke-WPFFixesUpdate}
"WPFFixesWinget" {Invoke-WPFFixesWinget} "WPFFixesWinget" {Invoke-WPFFixesWinget}
"WPFRunAdobeCCCleanerTool" {Invoke-WPFRunAdobeCCCleanerTool} "WPFRunAdobeCCCleanerTool" {Invoke-WPFRunAdobeCCCleanerTool}

View File

@ -17,7 +17,6 @@ function Invoke-WPFControlPanel {
"WPFPanelPower" {powercfg.cpl} "WPFPanelPower" {powercfg.cpl}
"WPFPanelPrinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"} "WPFPanelPrinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"}
"WPFPanelRegion" {intl.cpl} "WPFPanelRegion" {intl.cpl}
"WPFPanelRestore" {rstrui.exe}
"WPFPanelSound" {mmsys.cpl} "WPFPanelSound" {mmsys.cpl}
"WPFPanelSystem" {sysdm.cpl} "WPFPanelSystem" {sysdm.cpl}
"WPFPanelTimedate" {timedate.cpl} "WPFPanelTimedate" {timedate.cpl}

View File

@ -33,6 +33,50 @@ function Invoke-WPFInstall {
try { try {
$sync.ProcessRunning = $true $sync.ProcessRunning = $true
if($packagesWinget.Count -gt 0 -and $packagesWinget -ne "0") { if($packagesWinget.Count -gt 0 -and $packagesWinget -ne "0") {
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
Add-Type -assembly System.Windows.Forms
$PrincipalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext('Machine')
$user = $env:USERNAME
Get-LocalUser | Where-Object Enabled -eq $true | ForEach-Object {
try {
$myPasswordIsBlank = $PrincipalContext.ValidateCredentials($user, $null)
} catch {
$form = New-Object System.Windows.Forms.Form
$form.Text = "Set password for $user"
$form.Size = New-Object System.Drawing.Size(500, 200)
$label = New-Object System.Windows.Forms.Label
$label.Text = 'Maybe a program needs to be installed in "usermode" and you have no password set, you need to set it here. After putting a password into the text box a page asking for your password might open (not right after). If you keep the text box empty, nothing will happen.
REMEMBER THE PASSWORD FOR THE FUTURE. YOU WILL NEED FOR STUFF AND TO LOGIN IF AUTOLOGIN ISN`T SET'
$label.Size = New-Object System.Drawing.Size(480, 60)
$label.Location = New-Object System.Drawing.Point(10, 10)
$form.Controls.Add($label)
$passwordBox = New-Object System.Windows.Forms.TextBox
$passwordBox.Size = New-Object System.Drawing.Size(380, 20)
$passwordBox.UseSystemPasswordChar = $true
$passwordBox.Location = New-Object System.Drawing.Point(10, 125)
$form.Controls.Add($passwordBox)
$button = New-Object System.Windows.Forms.Button
$button.Text = 'Submit'
$button.Size = New-Object System.Drawing.Size(75, 23)
$button.Location = New-Object System.Drawing.Point(400, 125)
$button.Add_Click({
$password = $passwordBox.Text | ConvertTo-SecureString -AsPlainText -Force
if ($password) {
Set-LocalUser -Name $user -Password $password
$Form.Close()
} else {
[System.Windows.Forms.MessageBox]::Show('No password entered!')
}
})
$form.Controls.Add($button)
$form.ShowDialog() | Out-Null
}
}
Show-WPFInstallAppBusy -text "Installing apps..." Show-WPFInstallAppBusy -text "Installing apps..."
Install-WinUtilWinget Install-WinUtilWinget
Install-WinUtilProgramWinget -Action Install -Programs $packagesWinget Install-WinUtilProgramWinget -Action Install -Programs $packagesWinget

View File

@ -12,7 +12,7 @@ function Invoke-WPFInstallUpgrade {
Write-Host "Upgrade Successful" Write-Host "Upgrade Successful"
} }
else{ else{
Write-Host "Error Occurred. Return Code: $chocoUpgradeStatus" Write-Host "Error Occured. Return Code: $chocoUpgradeStatus"
} }
} }
else{ else{

View File

@ -140,7 +140,6 @@ function Invoke-WPFUIElements {
$label.Content = $category -replace ".*__", "" $label.Content = $category -replace ".*__", ""
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize") $label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize")
$label.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily") $label.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily")
$label.UseLayoutRounding = $true
$itemsControl.Items.Add($label) | Out-Null $itemsControl.Items.Add($label) | Out-Null
$sync[$category] = $label $sync[$category] = $label
@ -155,8 +154,6 @@ function Invoke-WPFUIElements {
$checkBox = New-Object Windows.Controls.CheckBox $checkBox = New-Object Windows.Controls.CheckBox
$checkBox.Name = $entryInfo.Name $checkBox.Name = $entryInfo.Name
$checkBox.HorizontalAlignment = "Right" $checkBox.HorizontalAlignment = "Right"
$checkBox.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content)
$dockPanel.Children.Add($checkBox) | Out-Null $dockPanel.Children.Add($checkBox) | Out-Null
$checkBox.Style = $ColorfulToggleSwitchStyle $checkBox.Style = $ColorfulToggleSwitchStyle
@ -166,7 +163,6 @@ function Invoke-WPFUIElements {
$label.HorizontalAlignment = "Left" $label.HorizontalAlignment = "Left"
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize") $label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize")
$label.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") $label.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
$label.UseLayoutRounding = $true
$dockPanel.Children.Add($label) | Out-Null $dockPanel.Children.Add($label) | Out-Null
$itemsControl.Items.Add($dockPanel) | Out-Null $itemsControl.Items.Add($dockPanel) | Out-Null
@ -192,7 +188,6 @@ function Invoke-WPFUIElements {
$toggleButton.ToolTip = $entryInfo.Description $toggleButton.ToolTip = $entryInfo.Description
$toggleButton.HorizontalAlignment = "Left" $toggleButton.HorizontalAlignment = "Left"
$toggleButton.Style = $ToggleButtonStyle $toggleButton.Style = $ToggleButtonStyle
[System.Windows.Automation.AutomationProperties]::SetName($toggleButton, $entryInfo.Content[0])
$toggleButton.Tag = @{ $toggleButton.Tag = @{
contentOn = if ($entryInfo.Content.Count -ge 1) { $entryInfo.Content[0] } else { "" } contentOn = if ($entryInfo.Content.Count -ge 1) { $entryInfo.Content[0] } else { "" }
@ -222,7 +217,6 @@ function Invoke-WPFUIElements {
$label.HorizontalAlignment = "Left" $label.HorizontalAlignment = "Left"
$label.VerticalAlignment = "Center" $label.VerticalAlignment = "Center"
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
$label.UseLayoutRounding = $true
$horizontalStackPanel.Children.Add($label) | Out-Null $horizontalStackPanel.Children.Add($label) | Out-Null
$comboBox = New-Object Windows.Controls.ComboBox $comboBox = New-Object Windows.Controls.ComboBox
@ -232,15 +226,11 @@ function Invoke-WPFUIElements {
$comboBox.HorizontalAlignment = "Left" $comboBox.HorizontalAlignment = "Left"
$comboBox.VerticalAlignment = "Center" $comboBox.VerticalAlignment = "Center"
$comboBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin") $comboBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin")
$comboBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
$comboBox.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($comboBox, $entryInfo.Content)
foreach ($comboitem in ($entryInfo.ComboItems -split " ")) { foreach ($comboitem in ($entryInfo.ComboItems -split " ")) {
$comboBoxItem = New-Object Windows.Controls.ComboBoxItem $comboBoxItem = New-Object Windows.Controls.ComboBoxItem
$comboBoxItem.Content = $comboitem $comboBoxItem.Content = $comboitem
$comboBoxItem.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $comboBoxItem.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
$comboBoxItem.UseLayoutRounding = $true
$comboBox.Items.Add($comboBoxItem) | Out-Null $comboBox.Items.Add($comboBoxItem) | Out-Null
} }
@ -249,19 +239,6 @@ function Invoke-WPFUIElements {
$comboBox.SelectedIndex = 0 $comboBox.SelectedIndex = 0
# Set initial text
if ($comboBox.Items.Count -gt 0) {
$comboBox.Text = $comboBox.Items[0].Content
}
# Add SelectionChanged event handler to update the text property
$comboBox.Add_SelectionChanged({
$selectedItem = $this.SelectedItem
if ($selectedItem) {
$this.Text = $selectedItem.Content
}
})
$sync[$entryInfo.Name] = $comboBox $sync[$entryInfo.Name] = $comboBox
} }
@ -273,10 +250,8 @@ function Invoke-WPFUIElements {
$button.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin") $button.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin")
$button.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $button.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
if ($entryInfo.ButtonWidth) { if ($entryInfo.ButtonWidth) {
$baseWidth = [int]$entryInfo.ButtonWidth $button.Width = $entryInfo.ButtonWidth
$button.Width = [math]::Max($baseWidth, 350)
} }
[System.Windows.Automation.AutomationProperties]::SetName($button, $entryInfo.Content)
$itemsControl.Items.Add($button) | Out-Null $itemsControl.Items.Add($button) | Out-Null
$sync[$entryInfo.Name] = $button $sync[$entryInfo.Name] = $button
@ -306,8 +281,6 @@ function Invoke-WPFUIElements {
$radioButton.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin") $radioButton.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin")
$radioButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $radioButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize")
$radioButton.ToolTip = $entryInfo.Description $radioButton.ToolTip = $entryInfo.Description
$radioButton.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($radioButton, $entryInfo.Content)
if ($entryInfo.Checked -eq $true) { if ($entryInfo.Checked -eq $true) {
$radioButton.IsChecked = $true $radioButton.IsChecked = $true
@ -328,8 +301,6 @@ function Invoke-WPFUIElements {
$checkBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize") $checkBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize")
$checkBox.ToolTip = $entryInfo.Description $checkBox.ToolTip = $entryInfo.Description
$checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin") $checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin")
$checkBox.UseLayoutRounding = $true
[System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content)
if ($entryInfo.Checked -eq $true) { if ($entryInfo.Checked -eq $true) {
$checkBox.IsChecked = $entryInfo.Checked $checkBox.IsChecked = $entryInfo.Checked
} }
@ -341,7 +312,6 @@ function Invoke-WPFUIElements {
$textBlock.Text = "(?)" $textBlock.Text = "(?)"
$textBlock.ToolTip = $entryInfo.Link $textBlock.ToolTip = $entryInfo.Link
$textBlock.Style = $HoverTextBlockStyle $textBlock.Style = $HoverTextBlockStyle
$textBlock.UseLayoutRounding = $true
$horizontalStackPanel.Children.Add($textBlock) | Out-Null $horizontalStackPanel.Children.Add($textBlock) | Out-Null

View File

@ -5,9 +5,9 @@ function Invoke-WPFUpdatesdefault {
Resets Windows Update settings to default Resets Windows Update settings to default
#> #>
Write-Host "Restoring Windows Update registry settings..." -ForegroundColor Yellow Write-Host "Restoring Windows Update registry settings..." -ForegroundColor Yellow
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) { If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
} }
@ -25,7 +25,7 @@ function Invoke-WPFUpdatesdefault {
# Restore update services to their default state # Restore update services to their default state
Write-Host "Restoring update services..." -ForegroundColor Yellow Write-Host "Restoring update services..." -ForegroundColor Yellow
$services = @( $services = @(
@{Name = "BITS"; StartupType = "Manual"}, @{Name = "BITS"; StartupType = "Manual"},
@{Name = "wuauserv"; StartupType = "Manual"}, @{Name = "wuauserv"; StartupType = "Manual"},
@ -40,10 +40,10 @@ function Invoke-WPFUpdatesdefault {
$serviceObj = Get-Service -Name $service.Name -ErrorAction SilentlyContinue $serviceObj = Get-Service -Name $service.Name -ErrorAction SilentlyContinue
if ($serviceObj) { if ($serviceObj) {
Set-Service -Name $service.Name -StartupType $service.StartupType -ErrorAction SilentlyContinue Set-Service -Name $service.Name -StartupType $service.StartupType -ErrorAction SilentlyContinue
# Reset failure actions to default using sc command # Reset failure actions to default using sc command
Start-Process -FilePath "sc.exe" -ArgumentList "failure `"$($service.Name)`" reset= 86400 actions= restart/60000/restart/60000/restart/60000" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "sc.exe" -ArgumentList "failure `"$($service.Name)`" reset= 86400 actions= restart/60000/restart/60000/restart/60000" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
# Start the service if it should be running # Start the service if it should be running
if ($service.StartupType -eq "Automatic") { if ($service.StartupType -eq "Automatic") {
Start-Service -Name $service.Name -ErrorAction SilentlyContinue Start-Service -Name $service.Name -ErrorAction SilentlyContinue
@ -57,25 +57,25 @@ function Invoke-WPFUpdatesdefault {
# Restore renamed DLLs if they exist # Restore renamed DLLs if they exist
Write-Host "Restoring renamed update service DLLs..." -ForegroundColor Yellow Write-Host "Restoring renamed update service DLLs..." -ForegroundColor Yellow
$dlls = @("WaaSMedicSvc", "wuaueng") $dlls = @("WaaSMedicSvc", "wuaueng")
foreach ($dll in $dlls) { foreach ($dll in $dlls) {
$dllPath = "C:\Windows\System32\$dll.dll" $dllPath = "C:\Windows\System32\$dll.dll"
$backupPath = "C:\Windows\System32\${dll}_BAK.dll" $backupPath = "C:\Windows\System32\${dll}_BAK.dll"
if ((Test-Path $backupPath) -and !(Test-Path $dllPath)) { if ((Test-Path $backupPath) -and !(Test-Path $dllPath)) {
try { try {
# Take ownership of backup file # Take ownership of backup file
Start-Process -FilePath "takeown.exe" -ArgumentList "/f `"$backupPath`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "takeown.exe" -ArgumentList "/f `"$backupPath`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
# Grant full control to everyone # Grant full control to everyone
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /grant *S-1-1-0:F" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /grant *S-1-1-0:F" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
# Rename back to original # Rename back to original
Rename-Item -Path $backupPath -NewName "$dll.dll" -ErrorAction SilentlyContinue Rename-Item -Path $backupPath -NewName "$dll.dll" -ErrorAction SilentlyContinue
Write-Host "Restored ${dll}_BAK.dll to $dll.dll" Write-Host "Restored ${dll}_BAK.dll to $dll.dll"
# Restore ownership to TrustedInstaller # Restore ownership to TrustedInstaller
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /setowner `"NT SERVICE\TrustedInstaller`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /setowner `"NT SERVICE\TrustedInstaller`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /remove *S-1-1-0" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /remove *S-1-1-0" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
@ -88,7 +88,7 @@ function Invoke-WPFUpdatesdefault {
# Enable update related scheduled tasks # Enable update related scheduled tasks
Write-Host "Enabling update related scheduled tasks..." -ForegroundColor Yellow Write-Host "Enabling update related scheduled tasks..." -ForegroundColor Yellow
$taskPaths = @( $taskPaths = @(
'\Microsoft\Windows\InstallService\*' '\Microsoft\Windows\InstallService\*'
'\Microsoft\Windows\UpdateOrchestrator\*' '\Microsoft\Windows\UpdateOrchestrator\*'
@ -124,7 +124,7 @@ function Invoke-WPFUpdatesdefault {
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -ErrorAction SilentlyContinue
Write-Host "===================================================" Write-Host "==================================================="
Write-Host "--- Windows Update Settings Reset to Default ---" Write-Host "--- Windows Update Settings Reset to Default ---"
Write-Host "===================================================" Write-Host "==================================================="
@ -148,6 +148,6 @@ function Invoke-WPFUpdatesdefault {
Write-Host "===================================================" Write-Host "==================================================="
Write-Host "--- Windows Local Policies Reset to Default ---" Write-Host "--- Windows Local Policies Reset to Default ---"
Write-Host "===================================================" Write-Host "==================================================="
Write-Host "Note: A system restart may be required for all changes to take full effect." -ForegroundColor Yellow Write-Host "Note: A system restart may be required for all changes to take full effect." -ForegroundColor Yellow
} }

View File

@ -9,20 +9,20 @@ function Invoke-WPFUpdatesdisable {
This function requires administrator privileges and will attempt to run as SYSTEM for certain operations. This function requires administrator privileges and will attempt to run as SYSTEM for certain operations.
#> #>
Write-Host "Configuring registry settings..." -ForegroundColor Yellow Write-Host "Configuring registry settings..." -ForegroundColor Yellow
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) { If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
} }
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1 Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1 Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) { If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) {
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null
} }
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0
# Additional registry settings # Additional registry settings
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" -Name "Start" -Type DWord -Value 4 -ErrorAction SilentlyContinue Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" -Name "Start" -Type DWord -Value 4 -ErrorAction SilentlyContinue
$failureActions = [byte[]](0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xd4,0x01,0x00,0x00,0x00,0x00,0x00,0xe0,0x93,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00) $failureActions = [byte[]](0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xd4,0x01,0x00,0x00,0x00,0x00,0x00,0xe0,0x93,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
@ -30,7 +30,7 @@ function Invoke-WPFUpdatesdisable {
# Disable and stop update related services # Disable and stop update related services
Write-Host "Disabling update services..." -ForegroundColor Yellow Write-Host "Disabling update services..." -ForegroundColor Yellow
$services = @( $services = @(
"BITS" "BITS"
"wuauserv" "wuauserv"
@ -46,7 +46,7 @@ function Invoke-WPFUpdatesdisable {
if ($serviceObj) { if ($serviceObj) {
Stop-Service -Name $service -Force -ErrorAction SilentlyContinue Stop-Service -Name $service -Force -ErrorAction SilentlyContinue
Set-Service -Name $service -StartupType Disabled -ErrorAction SilentlyContinue Set-Service -Name $service -StartupType Disabled -ErrorAction SilentlyContinue
# Set failure actions to nothing using sc command # Set failure actions to nothing using sc command
Start-Process -FilePath "sc.exe" -ArgumentList "failure `"$service`" reset= 0 actions= `"`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "sc.exe" -ArgumentList "failure `"$service`" reset= 0 actions= `"`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
} }
@ -58,26 +58,26 @@ function Invoke-WPFUpdatesdisable {
# Rename critical update service DLLs (requires SYSTEM privileges) # Rename critical update service DLLs (requires SYSTEM privileges)
Write-Host "Attempting to rename critical update service DLLs..." -ForegroundColor Yellow Write-Host "Attempting to rename critical update service DLLs..." -ForegroundColor Yellow
$dlls = @("WaaSMedicSvc", "wuaueng") $dlls = @("WaaSMedicSvc", "wuaueng")
foreach ($dll in $dlls) { foreach ($dll in $dlls) {
$dllPath = "C:\Windows\System32\$dll.dll" $dllPath = "C:\Windows\System32\$dll.dll"
$backupPath = "C:\Windows\System32\${dll}_BAK.dll" $backupPath = "C:\Windows\System32\${dll}_BAK.dll"
if (Test-Path $dllPath) { if (Test-Path $dllPath) {
try { try {
# Take ownership # Take ownership
Start-Process -FilePath "takeown.exe" -ArgumentList "/f `"$dllPath`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "takeown.exe" -ArgumentList "/f `"$dllPath`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
# Grant full control to everyone # Grant full control to everyone
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /grant *S-1-1-0:F" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "icacls.exe" -ArgumentList "`"$dllPath`" /grant *S-1-1-0:F" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
# Rename file # Rename file
if (!(Test-Path $backupPath)) { if (!(Test-Path $backupPath)) {
Rename-Item -Path $dllPath -NewName "${dll}_BAK.dll" -ErrorAction SilentlyContinue Rename-Item -Path $dllPath -NewName "${dll}_BAK.dll" -ErrorAction SilentlyContinue
Write-Host "Renamed $dll.dll to ${dll}_BAK.dll" Write-Host "Renamed $dll.dll to ${dll}_BAK.dll"
# Restore ownership to TrustedInstaller # Restore ownership to TrustedInstaller
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /setowner `"NT SERVICE\TrustedInstaller`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /setowner `"NT SERVICE\TrustedInstaller`"" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /remove *S-1-1-0" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue Start-Process -FilePath "icacls.exe" -ArgumentList "`"$backupPath`" /remove *S-1-1-0" -Wait -WindowStyle Hidden -ErrorAction SilentlyContinue
@ -91,7 +91,7 @@ function Invoke-WPFUpdatesdisable {
# Delete downloaded update files # Delete downloaded update files
Write-Host "Cleaning up downloaded update files..." -ForegroundColor Yellow Write-Host "Cleaning up downloaded update files..." -ForegroundColor Yellow
try { try {
$softwareDistPath = "C:\Windows\SoftwareDistribution" $softwareDistPath = "C:\Windows\SoftwareDistribution"
if (Test-Path $softwareDistPath) { if (Test-Path $softwareDistPath) {
@ -105,7 +105,7 @@ function Invoke-WPFUpdatesdisable {
# Disable update related scheduled tasks # Disable update related scheduled tasks
Write-Host "Disabling update related scheduled tasks..." -ForegroundColor Yellow Write-Host "Disabling update related scheduled tasks..." -ForegroundColor Yellow
$taskPaths = @( $taskPaths = @(
'\Microsoft\Windows\InstallService\*' '\Microsoft\Windows\InstallService\*'
'\Microsoft\Windows\UpdateOrchestrator\*' '\Microsoft\Windows\UpdateOrchestrator\*'
@ -129,7 +129,7 @@ function Invoke-WPFUpdatesdisable {
} }
Write-Host "=================================" -ForegroundColor Green Write-Host "=================================" -ForegroundColor Green
Write-Host "--- Updates ARE DISABLED ---" -ForegroundColor Green Write-Host "--- Updates ARE DISABLED ---" -ForegroundColor Green
Write-Host "===================================" -ForegroundColor Green Write-Host "===================================" -ForegroundColor Green
Write-Host "Note: Some operations may require a system restart to take full effect." -ForegroundColor Yellow Write-Host "Note: Some operations may require a system restart to take full effect." -ForegroundColor Yellow
} }

View File

@ -24,7 +24,7 @@ function Invoke-WPFtweaksbutton {
Write-Debug "Number of tweaks to process: $($Tweaks.Count)" Write-Debug "Number of tweaks to process: $($Tweaks.Count)"
# The leading "," in the ParameterList is necessary because we only provide one argument and powershell cannot be convinced that we want a nested loop with only one argument otherwise # The leading "," in the ParameterList is nessecary because we only provide one argument and powershell cannot be convinced that we want a nested loop with only one argument otherwise
Invoke-WPFRunspace -ParameterList @(,("tweaks",$tweaks)) -DebugPreference $DebugPreference -ScriptBlock { Invoke-WPFRunspace -ParameterList @(,("tweaks",$tweaks)) -DebugPreference $DebugPreference -ScriptBlock {
param( param(
$tweaks, $tweaks,

View File

@ -310,36 +310,7 @@ $sync["Form"].Add_ContentRendered({
Write-Debug "Unable to retrieve information about the primary monitor." Write-Debug "Unable to retrieve information about the primary monitor."
} }
# Check internet connectivity and disable install tab if offline Invoke-WPFTab "WPFTab1BT"
#$isOnline = Test-WinUtilInternetConnection
$isOnline = $true # Temporarily force online mode until we can resolve false negatives
if (-not $isOnline) {
# Disable the install tab
$sync.WPFTab1BT.IsEnabled = $false
$sync.WPFTab1BT.Opacity = 0.5
$sync.WPFTab1BT.ToolTip = "Internet connection required for installing applications"
# Disable install-related buttons
$sync.WPFInstall.IsEnabled = $false
$sync.WPFUninstall.IsEnabled = $false
$sync.WPFInstallUpgrade.IsEnabled = $false
$sync.WPFGetInstalled.IsEnabled = $false
# Show offline indicator
Write-Host "Offline mode detected - Install tab disabled" -ForegroundColor Yellow
# Optionally switch to a different tab if install tab was going to be default
Invoke-WPFTab "WPFTab2BT" # Switch to Tweaks tab instead
}
else {
# Online - ensure install tab is enabled
$sync.WPFTab1BT.IsEnabled = $true
$sync.WPFTab1BT.Opacity = 1.0
$sync.WPFTab1BT.ToolTip = $null
Invoke-WPFTab "WPFTab1BT" # Default to install tab
}
$sync["Form"].Focus() $sync["Form"].Focus()
# maybe this is not the best place to load and execute config file? # maybe this is not the best place to load and execute config file?
@ -388,13 +359,18 @@ $sync["Form"].Add_ContentRendered({
# Add event handlers for the RadioButtons # Add event handlers for the RadioButtons
$sync["ISOdownloader"].add_Checked({ $sync["ISOdownloader"].add_Checked({
$sync["ISORelease"].Visibility = [System.Windows.Visibility]::Visible
$sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Visible $sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Visible
}) })
$sync["ISOmanual"].add_Checked({ $sync["ISOmanual"].add_Checked({
$sync["ISORelease"].Visibility = [System.Windows.Visibility]::Collapsed
$sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Collapsed $sync["ISOLanguage"].Visibility = [System.Windows.Visibility]::Collapsed
}) })
$sync["ISORelease"].Items.Add("24H2") | Out-Null
$sync["ISORelease"].SelectedItem = "24H2"
$sync["ISOLanguage"].Items.Add("System Language ($(Microwin-GetLangFromCulture -langName $((Get-Culture).Name)))") | Out-Null $sync["ISOLanguage"].Items.Add("System Language ($(Microwin-GetLangFromCulture -langName $((Get-Culture).Name)))") | Out-Null
if ($currentCulture -ne "English International") { if ($currentCulture -ne "English International") {
$sync["ISOLanguage"].Items.Add("English International") | Out-Null $sync["ISOLanguage"].Items.Add("English International") | Out-Null
@ -451,11 +427,13 @@ $NavLogoPanel.Children.Add((Invoke-WinUtilAssets -Type "logo" -Size 25)) | Out-N
$winutildir = @{} $winutildir = @{}
# Set the path for the winutil directory # Set the path for the winutil directory
$winutildir = "$env:LocalAppData\winutil\" $winutildir["path"] = "$env:LOCALAPPDATA\winutil\"
New-Item $winutildir -ItemType Directory -Force | Out-Null [System.IO.Directory]::CreateDirectory($winutildir["path"]) | Out-Null
if (Test-Path "$winutildir\logo.ico") { $winutildir["logo.ico"] = $winutildir["path"] + "cttlogo.ico"
$sync["logorender"] = "$winutildir\logo.ico"
if (Test-Path $winutildir["logo.ico"]) {
$sync["logorender"] = $winutildir["logo.ico"]
} else { } else {
$sync["logorender"] = (Invoke-WinUtilAssets -Type "Logo" -Size 90 -Render) $sync["logorender"] = (Invoke-WinUtilAssets -Type "Logo" -Size 90 -Render)
} }

View File

@ -80,7 +80,7 @@ if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]:
$dateTime = Get-Date -Format "yyyy-MM-dd_HH-mm-ss" $dateTime = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$logdir = "$env:localappdata\winutil\logs" $logdir = "$env:localappdata\winutil\logs"
New-Item $logdir -ItemType Directory -Force | Out-Null [System.IO.Directory]::CreateDirectory("$logdir") | Out-Null
Start-Transcript -Path "$logdir\winutil_$dateTime.log" -Append -NoClobber | Out-Null Start-Transcript -Path "$logdir\winutil_$dateTime.log" -Append -NoClobber | Out-Null
# Set PowerShell window title # Set PowerShell window title

View File

@ -23,7 +23,7 @@ function Invoke-Preprocessing {
.EXAMPLE .EXAMPLE
Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
Calls 'Invoke-Preprocessing' function using Named Parameters, with 'WorkingDir' (Mandatory Parameter) which's used as the base folder when searching for files recursively (using 'Get-ChildItem'), other two parameters are, in order from right to left, the Optional 'ExcludeFiles', which can be a path to a file, folder, or pattern-matched (like '*.png'), and the 'ProgressStatusMessage', which's used in Progress Bar. Calls 'Invoke-Preprocessing' function using Named Paramters, with 'WorkingDir' (Mandatory Parameter) which's used as the base folder when searching for files recursively (using 'Get-ChildItem'), other two paramters are, in order from right to left, the Optional 'ExcludeFiles', which can be a path to a file, folder, or pattern-matched (like '*.png'), and the 'ProgressStatusMessage', which's used in Progress Bar.
.EXAMPLE .EXAMPLE
Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" -ProgressActivity "Re-Formatting Code" Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" -ProgressActivity "Re-Formatting Code"
@ -51,7 +51,7 @@ function Invoke-Preprocessing {
) )
if (-NOT (Test-Path -PathType Container -Path "$WorkingDir")) { if (-NOT (Test-Path -PathType Container -Path "$WorkingDir")) {
throw "[Invoke-Preprocessing] Invalid Parameter Value for 'WorkingDir', passed value: '$WorkingDir'. Either the path is a File or Non-Existing/Invlid, please double check your code." throw "[Invoke-Preprocessing] Invalid Paramter Value for 'WorkingDir', passed value: '$WorkingDir'. Either the path is a File or Non-Existing/Invlid, please double check your code."
} }
$InternalExcludedFiles = [System.Collections.Generic.List[string]]::new($ExcludedFiles.Count) $InternalExcludedFiles = [System.Collections.Generic.List[string]]::new($ExcludedFiles.Count)
@ -63,10 +63,6 @@ function Invoke-Preprocessing {
if ($ExcludedFiles.Count -gt 0) { if ($ExcludedFiles.Count -gt 0) {
ForEach ($excludedFile in $ExcludedFiles) { ForEach ($excludedFile in $ExcludedFiles) {
$filePath = "$(($WorkingDir -replace ('\\$', '')) + '\' + ($excludedFile -replace ('\.\\', '')))" $filePath = "$(($WorkingDir -replace ('\\$', '')) + '\' + ($excludedFile -replace ('\.\\', '')))"
# Only attempt to create the directory if the excludedFile ends with '\'
if ($excludedFile -match '\\$' -and -not (Test-Path "$filePath")) {
New-Item -Path "$filePath" -ItemType Directory -Force | Out-Null
}
$files = Get-ChildItem -Recurse -Path "$filePath" -File -Force $files = Get-ChildItem -Recurse -Path "$filePath" -File -Force
if ($files.Count -gt 0) { if ($files.Count -gt 0) {
ForEach ($file in $files) { ForEach ($file in $files) {

View File

@ -10,8 +10,8 @@
WindowStyle="None" WindowStyle="None"
Width="Auto" Width="Auto"
Height="Auto" Height="Auto"
MinWidth="800" MaxWidth="1380"
MinHeight="600" MaxHeight="800"
Title="WinUtil"> Title="WinUtil">
<WindowChrome.WindowChrome> <WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="0" CornerRadius="10"/> <WindowChrome CaptionHeight="0" CornerRadius="10"/>
@ -534,18 +534,11 @@
Height="{DynamicResource CheckBoxBulletDecoratorSize *0.85}" Height="{DynamicResource CheckBoxBulletDecoratorSize *0.85}"
Margin="2" Margin="2"
SnapsToDevicePixels="True"/> SnapsToDevicePixels="True"/>
<Viewbox x:Name="CheckMarkContainer" <Path x:Name="CheckMark"
Width="{DynamicResource CheckBoxBulletDecoratorSize}" Stroke="{DynamicResource ToggleButtonOnColor}"
Height="{DynamicResource CheckBoxBulletDecoratorSize}" StrokeThickness="2"
HorizontalAlignment="Center" Data="M 0 5 L 5 10 L 12 0"
VerticalAlignment="Center" Visibility="Collapsed"/>
Visibility="Collapsed">
<Path x:Name="CheckMark"
Stroke="{DynamicResource ToggleButtonOnColor}"
StrokeThickness="1.5"
Data="M 0 5 L 5 10 L 12 0"
Stretch="Uniform"/>
</Viewbox>
</Grid> </Grid>
</BulletDecorator.Bullet> </BulletDecorator.Bullet>
<ContentPresenter Margin="4,0,0,0" <ContentPresenter Margin="4,0,0,0"
@ -556,7 +549,7 @@
</Grid> </Grid>
<ControlTemplate.Triggers> <ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True"> <Trigger Property="IsChecked" Value="True">
<Setter TargetName="CheckMarkContainer" Property="Visibility" Value="Visible"/> <Setter TargetName="CheckMark" Property="Visibility" Value="Visible"/>
</Trigger> </Trigger>
<Trigger Property="IsMouseOver" Value="True"> <Trigger Property="IsMouseOver" Value="True">
<!--Setter TargetName="Border" Property="Background" Value="{DynamicResource ButtonBackgroundPressedColor}"/--> <!--Setter TargetName="Border" Property="Background" Value="{DynamicResource ButtonBackgroundPressedColor}"/-->
@ -576,24 +569,22 @@
<Setter.Value> <Setter.Value>
<ControlTemplate TargetType="RadioButton"> <ControlTemplate TargetType="RadioButton">
<StackPanel Orientation="Horizontal" Margin="{DynamicResource CheckBoxMargin}"> <StackPanel Orientation="Horizontal" Margin="{DynamicResource CheckBoxMargin}">
<Viewbox Width="{DynamicResource CheckBoxBulletDecoratorSize}" Height="{DynamicResource CheckBoxBulletDecoratorSize}"> <Grid Width="14" Height="14">
<Grid Width="14" Height="14"> <Ellipse x:Name="OuterCircle"
<Ellipse x:Name="OuterCircle" Stroke="{DynamicResource ToggleButtonOffColor}"
Stroke="{DynamicResource ToggleButtonOffColor}" Fill="{DynamicResource ButtonBackgroundColor}"
Fill="{DynamicResource ButtonBackgroundColor}" StrokeThickness="1"
StrokeThickness="1" Width="14"
Width="14" Height="14"
Height="14" SnapsToDevicePixels="True"/>
SnapsToDevicePixels="True"/> <Ellipse x:Name="InnerCircle"
<Ellipse x:Name="InnerCircle" Fill="{DynamicResource ToggleButtonOnColor}"
Fill="{DynamicResource ToggleButtonOnColor}" Width="8"
Width="8" Height="8"
Height="8" Visibility="Collapsed"
Visibility="Collapsed" HorizontalAlignment="Center"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
VerticalAlignment="Center"/> </Grid>
</Grid>
</Viewbox>
<ContentPresenter Margin="4,0,0,0" <ContentPresenter Margin="4,0,0,0"
VerticalAlignment="Center" VerticalAlignment="Center"
RecognizesAccessKey="True"/> RecognizesAccessKey="True"/>
@ -901,69 +892,63 @@
</Window.Resources> </Window.Resources>
<Grid Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Name="WPFMainGrid" Width="Auto" Height="Auto" HorizontalAlignment="Stretch"> <Grid Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Name="WPFMainGrid" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <RowDefinition Height="{DynamicResource TabRowHeightInPixels}"/>
<RowDefinition Height="*"/> <RowDefinition Height=".9*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid Grid.Row="0" Background="{DynamicResource MainBackgroundColor}"> <DockPanel Name="NavDockPanel" HorizontalAlignment="Stretch" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Row="0" Width="Auto">
<Grid.ColumnDefinitions> <StackPanel Name="NavLogoPanel" Orientation="Horizontal" HorizontalAlignment="Left" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Margin="10,0,20,0">
<ColumnDefinition Width="Auto"/> <!-- Navigation buttons -->
<ColumnDefinition Width="*"/> <!-- Search bar and buttons -->
</Grid.ColumnDefinitions>
<!-- Navigation Buttons Panel -->
<StackPanel Name="NavDockPanel" Orientation="Horizontal" Grid.Column="0" Margin="5,5,10,5">
<StackPanel Name="NavLogoPanel" Orientation="Horizontal" HorizontalAlignment="Left" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Margin="10,0,20,0">
</StackPanel>
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonInstallBackgroundColor}" Foreground="white" FontWeight="Bold" Name="WPFTab1BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonInstallForegroundColor}" >
<Underline>I</Underline>nstall
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonTweaksBackgroundColor}" Foreground="{DynamicResource ButtonTweaksForegroundColor}" FontWeight="Bold" Name="WPFTab2BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonTweaksForegroundColor}">
<Underline>T</Underline>weaks
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonConfigBackgroundColor}" Foreground="{DynamicResource ButtonConfigForegroundColor}" FontWeight="Bold" Name="WPFTab3BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonConfigForegroundColor}">
<Underline>C</Underline>onfig
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab4BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
<Underline>U</Underline>pdates
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab5BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
<Underline>M</Underline>icroWin
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
</StackPanel> </StackPanel>
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
<!-- Search Bar and Action Buttons --> Background="{DynamicResource ButtonInstallBackgroundColor}" Foreground="white" FontWeight="Bold" Name="WPFTab1BT">
<Grid Name="GridBesideNavDockPanel" Grid.Column="1" Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Height="Auto"> <ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonInstallForegroundColor}" >
<Underline>I</Underline>nstall
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonTweaksBackgroundColor}" Foreground="{DynamicResource ButtonTweaksForegroundColor}" FontWeight="Bold" Name="WPFTab2BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonTweaksForegroundColor}">
<Underline>T</Underline>weaks
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonConfigBackgroundColor}" Foreground="{DynamicResource ButtonConfigForegroundColor}" FontWeight="Bold" Name="WPFTab3BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonConfigForegroundColor}">
<Underline>C</Underline>onfig
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab4BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
<Underline>U</Underline>pdates
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
Background="{DynamicResource ButtonUpdatesBackgroundColor}" Foreground="{DynamicResource ButtonUpdatesForegroundColor}" FontWeight="Bold" Name="WPFTab5BT">
<ToggleButton.Content>
<TextBlock FontSize="{DynamicResource TabButtonFontSize}" Background="Transparent" Foreground="{DynamicResource ButtonUpdatesForegroundColor}">
<Underline>M</Underline>icroWin
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
<Grid Name="GridBesideNavDockPanel" Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/> <!-- Search bar area - priority space --> <ColumnDefinition Width="*"/> <!-- Main content area -->
<ColumnDefinition Width="Auto"/><!-- Buttons area --> <ColumnDefinition Width="Auto"/><!-- Space for options button -->
<ColumnDefinition Width="Auto"/><!-- Space for close button -->
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/><!-- Space for Font Scaling button-->
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- <!--
@ -975,28 +960,27 @@
Consider using a Math Solver, will help in making Consider using a Math Solver, will help in making
development of these things much easier development of these things much easier
--> -->
<Border Grid.Column="0" Margin="5,0,0,0" Width="{DynamicResource SearchBarWidth}" Height="{DynamicResource SearchBarHeight}" VerticalAlignment="Center" HorizontalAlignment="Left"> <TextBox
<Grid> Grid.Column="0"
<TextBox Width="{DynamicResource SearchBarWidth}"
Width="{DynamicResource SearchBarWidth}" Height="{DynamicResource SearchBarHeight}"
Height="{DynamicResource SearchBarHeight}" FontSize="{DynamicResource SearchBarTextBoxFontSize}"
FontSize="{DynamicResource SearchBarTextBoxFontSize}" VerticalAlignment="Center" HorizontalAlignment="Left"
VerticalAlignment="Center" HorizontalAlignment="Left" BorderThickness="1"
BorderThickness="1" Name="SearchBar"
Name="SearchBar" Foreground="{DynamicResource MainForegroundColor}" Background="{DynamicResource MainBackgroundColor}"
Foreground="{DynamicResource MainForegroundColor}" Background="{DynamicResource MainBackgroundColor}" Padding="3,3,30,0"
Padding="3,3,30,0" Margin="5,0,0,0"
ToolTip="Press Ctrl-F and type app name to filter application list below. Press Esc to reset the filter"> ToolTip="Press Ctrl-F and type app name to filter application list below. Press Esc to reset the filter">
</TextBox> </TextBox>
<TextBlock <TextBlock
VerticalAlignment="Center" HorizontalAlignment="Right" Grid.Column="0"
FontFamily="Segoe MDL2 Assets" VerticalAlignment="Center" HorizontalAlignment="Left"
Foreground="{DynamicResource ButtonBackgroundSelectedColor}" FontFamily="Segoe MDL2 Assets"
FontSize="{DynamicResource IconFontSize}" Foreground="{DynamicResource ButtonBackgroundSelectedColor}"
Margin="0,0,8,0" Width="Auto" Height="Auto">&#xE721; FontSize="{DynamicResource IconFontSize}"
</TextBlock> Margin="180,0,0,0">&#xE721;
</Grid> </TextBlock>
</Border>
<!-- <!--
TODO: TODO:
Make this ClearButton Positioning react to Make this ClearButton Positioning react to
@ -1008,25 +992,23 @@
VerticalAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Left"
Name="SearchBarClearButton" Name="SearchBarClearButton"
Style="{StaticResource SearchBarClearButtonStyle}" Style="{StaticResource SearchBarClearButtonStyle}"
Margin="213,0,0,0" Visibility="Collapsed"> Margin="210,0,0,0" Visibility="Collapsed">
</Button> </Button>
<!-- Buttons Container --> <Button Name="ThemeButton"
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="5,5,5,5"> Style="{StaticResource HoverButtonStyle}"
<Button Name="ThemeButton" Grid.Column="2" BorderBrush="Transparent"
Style="{StaticResource HoverButtonStyle}"
BorderBrush="Transparent"
Background="{DynamicResource MainBackgroundColor}" Background="{DynamicResource MainBackgroundColor}"
Foreground="{DynamicResource MainForegroundColor}" Foreground="{DynamicResource MainForegroundColor}"
FontSize="{DynamicResource SettingsIconFontSize}" FontSize="{DynamicResource SettingsIconFontSize}"
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}" Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
HorizontalAlignment="Right" VerticalAlignment="Top" HorizontalAlignment="Right" VerticalAlignment="Top"
Margin="0,0,2,0" Margin="0,5,5,0"
FontFamily="Segoe MDL2 Assets" FontFamily="Segoe MDL2 Assets"
Content="N/A" Content="N/A"
ToolTip="Change the Winutil UI Theme" ToolTip="Change the Winutil UI Theme"
/> />
<Popup Name="ThemePopup" <Popup Grid.Column="2" Name="ThemePopup"
IsOpen="False" IsOpen="False"
PlacementTarget="{Binding ElementName=ThemeButton}" Placement="Bottom" PlacementTarget="{Binding ElementName=ThemeButton}" Placement="Bottom"
HorizontalAlignment="Right" VerticalAlignment="Top"> HorizontalAlignment="Right" VerticalAlignment="Top">
@ -1051,20 +1033,20 @@
</Border> </Border>
</Popup> </Popup>
<Button Name="FontScalingButton" <Button Name="FontScalingButton"
Style="{StaticResource HoverButtonStyle}" Style="{StaticResource HoverButtonStyle}"
BorderBrush="Transparent" Grid.Column="3" BorderBrush="Transparent"
Background="{DynamicResource MainBackgroundColor}" Background="{DynamicResource MainBackgroundColor}"
Foreground="{DynamicResource MainForegroundColor}" Foreground="{DynamicResource MainForegroundColor}"
FontSize="{DynamicResource SettingsIconFontSize}" FontSize="{DynamicResource SettingsIconFontSize}"
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}" Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
HorizontalAlignment="Right" VerticalAlignment="Top" HorizontalAlignment="Right" VerticalAlignment="Top"
Margin="0,0,2,0" Margin="0,5,5,0"
FontFamily="Segoe MDL2 Assets" FontFamily="Segoe MDL2 Assets"
Content="&#xE8D3;" Content="&#xE8D3;"
ToolTip="Adjust Font Scaling for Accessibility" ToolTip="Adjust Font Scaling for Accessibility"
/> />
<Popup Name="FontScalingPopup" <Popup Grid.Column="3" Name="FontScalingPopup"
IsOpen="False" IsOpen="False"
PlacementTarget="{Binding ElementName=FontScalingButton}" Placement="Bottom" PlacementTarget="{Binding ElementName=FontScalingButton}" Placement="Bottom"
HorizontalAlignment="Right" VerticalAlignment="Top"> HorizontalAlignment="Right" VerticalAlignment="Top">
@ -1119,18 +1101,18 @@
</Border> </Border>
</Popup> </Popup>
<Button Name="SettingsButton" <Button Name="SettingsButton"
Style="{StaticResource HoverButtonStyle}" Style="{StaticResource HoverButtonStyle}"
BorderBrush="Transparent" Grid.Column="4" BorderBrush="Transparent"
Background="{DynamicResource MainBackgroundColor}" Background="{DynamicResource MainBackgroundColor}"
Foreground="{DynamicResource MainForegroundColor}" Foreground="{DynamicResource MainForegroundColor}"
FontSize="{DynamicResource SettingsIconFontSize}" FontSize="{DynamicResource SettingsIconFontSize}"
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}" Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
HorizontalAlignment="Right" VerticalAlignment="Top" HorizontalAlignment="Right" VerticalAlignment="Top"
Margin="0,0,2,0" Margin="5,5,5,0"
FontFamily="Segoe MDL2 Assets" FontFamily="Segoe MDL2 Assets"
Content="&#xE713;"/> Content="&#xE713;"/>
<Popup Name="SettingsPopup" <Popup Grid.Column="3" Name="SettingsPopup"
IsOpen="False" IsOpen="False"
PlacementTarget="{Binding ElementName=SettingsButton}" Placement="Bottom" PlacementTarget="{Binding ElementName=SettingsButton}" Placement="Bottom"
HorizontalAlignment="Right" VerticalAlignment="Top"> HorizontalAlignment="Right" VerticalAlignment="Top">
@ -1153,18 +1135,19 @@
</Border> </Border>
</Popup> </Popup>
<Button <Button
Content="&#xD7;" BorderThickness="0" Grid.Column="5"
Content="&#xD7;" BorderThickness="0"
BorderBrush="Transparent" BorderBrush="Transparent"
Background="{DynamicResource MainBackgroundColor}" Background="{DynamicResource MainBackgroundColor}"
Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}" Width="{DynamicResource IconButtonSize}" Height="{DynamicResource IconButtonSize}"
HorizontalAlignment="Right" VerticalAlignment="Top" HorizontalAlignment="Right" VerticalAlignment="Top"
Margin="0,0,0,0" Margin="0,5,5,0"
FontFamily="{DynamicResource FontFamily}" FontFamily="{DynamicResource FontFamily}"
Foreground="{DynamicResource MainForegroundColor}" FontSize="{DynamicResource CloseIconFontSize}" Name="WPFCloseButton" /> Foreground="{DynamicResource MainForegroundColor}" FontSize="{DynamicResource CloseIconFontSize}" Name="WPFCloseButton" />
</StackPanel>
</Grid> </Grid>
</Grid>
</DockPanel>
<TabControl Name="WPFTabNav" Background="Transparent" Width="Auto" Height="Auto" BorderBrush="Transparent" BorderThickness="0" Grid.Row="1" Grid.Column="0" Padding="-1"> <TabControl Name="WPFTabNav" Background="Transparent" Width="Auto" Height="Auto" BorderBrush="Transparent" BorderThickness="0" Grid.Row="1" Grid.Column="0" Padding="-1">
<TabItem Header="Install" Visibility="Collapsed" Name="WPFTab1"> <TabItem Header="Install" Visibility="Collapsed" Name="WPFTab1">
@ -1172,7 +1155,7 @@
<Grid Grid.Row="0" Grid.Column="0" Margin="{DynamicResource TabContentMargin}"> <Grid Grid.Row="0" Grid.Column="0" Margin="{DynamicResource TabContentMargin}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="225" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
@ -1192,22 +1175,20 @@
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Grid.Row="0" Margin="{DynamicResource TabContentMargin}"> <ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="0" Margin="{DynamicResource TabContentMargin}">
<Grid Background="Transparent"> <Grid Background="Transparent">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <RowDefinition Height="45px"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<StackPanel Background="{DynamicResource MainBackgroundColor}" Orientation="Vertical" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="5"> <StackPanel Background="{DynamicResource MainBackgroundColor}" Orientation="Horizontal" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="5">
<Label Content="Recommended Selections:" FontSize="{DynamicResource FontSize}" VerticalAlignment="Center" Margin="2"/> <Label Content="Recommended Selections:" FontSize="{DynamicResource FontSize}" VerticalAlignment="Center" Margin="2"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,2,0,0"> <Button Name="WPFstandard" Content=" Standard " Margin="2"/>
<Button Name="WPFstandard" Content=" Standard " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/> <Button Name="WPFminimal" Content=" Minimal " Margin="2"/>
<Button Name="WPFminimal" Content=" Minimal " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/> <Button Name="WPFClearTweaksSelection" Content=" Clear " Margin="2"/>
<Button Name="WPFClearTweaksSelection" Content=" Clear " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/> <Button Name="WPFGetInstalledTweaks" Content=" Get Installed " Margin="2"/>
<Button Name="WPFGetInstalledTweaks" Content=" Get Installed " Margin="2" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/>
</StackPanel>
</StackPanel> </StackPanel>
<Grid Name="tweakspanel" Grid.Row="1"> <Grid Name="tweakspanel" Grid.Row="1">
@ -1225,22 +1206,22 @@
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
<Border Grid.Row="1" Background="{DynamicResource MainBackgroundColor}" BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" CornerRadius="5" HorizontalAlignment="Stretch" Padding="10"> <Border Grid.Row="1" Background="{DynamicResource MainBackgroundColor}" BorderBrush="{DynamicResource BorderColor}" BorderThickness="1" CornerRadius="5" HorizontalAlignment="Stretch" Padding="10">
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0">
<Button Name="WPFTweaksbutton" Content="Run Tweaks" Margin="5" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/> <Button Name="WPFTweaksbutton" Content="Run Tweaks" Margin="5"/>
<Button Name="WPFUndoall" Content="Undo Selected Tweaks" Margin="5" Width="{DynamicResource ButtonWidth}" Height="{DynamicResource ButtonHeight}"/> <Button Name="WPFUndoall" Content="Undo Selected Tweaks" Margin="5"/>
</WrapPanel> </StackPanel>
</Border> </Border>
</Grid> </Grid>
</TabItem> </TabItem>
<TabItem Header="Config" Visibility="Collapsed" Name="WPFTab3"> <TabItem Header="Config" Visibility="Collapsed" Name="WPFTab3">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}"> <ScrollViewer VerticalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}">
<Grid Name="featurespanel" Grid.Row="1" Background="Transparent"> <Grid Name="featurespanel" Grid.Row="1" Background="Transparent">
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</TabItem> </TabItem>
<TabItem Header="Updates" Visibility="Collapsed" Name="WPFTab4"> <TabItem Header="Updates" Visibility="Collapsed" Name="WPFTab4">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="{DynamicResource TabContentMargin}"> <ScrollViewer VerticalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}">
<Grid Background="Transparent" MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=ScrollViewer}}"> <Grid Background="Transparent">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <!-- Row for the 3 columns --> <RowDefinition Height="Auto"/> <!-- Row for the 3 columns -->
<RowDefinition Height="Auto"/> <!-- Row for Windows Version --> <RowDefinition Height="Auto"/> <!-- Row for Windows Version -->
@ -1257,7 +1238,7 @@
<!-- Default Settings --> <!-- Default Settings -->
<Border Grid.Column="0" Style="{StaticResource BorderStyle}"> <Border Grid.Column="0" Style="{StaticResource BorderStyle}">
<StackPanel> <StackPanel>
<Button Name="WPFUpdatesdefault" <Button Name="WPFFixesUpdate"
FontSize="{DynamicResource ConfigTabButtonFontSize}" FontSize="{DynamicResource ConfigTabButtonFontSize}"
Content="Default Settings" Content="Default Settings"
Margin="10,5" Margin="10,5"
@ -1335,8 +1316,8 @@
</ScrollViewer> </ScrollViewer>
</TabItem> </TabItem>
<TabItem Header="MicroWin" Visibility="Collapsed" Name="WPFTab5"> <TabItem Header="MicroWin" Visibility="Collapsed" Name="WPFTab5">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="{DynamicResource TabContentMargin}"> <ScrollViewer VerticalScrollBarVisibility="Auto" Margin="{DynamicResource TabContentMargin}">
<Grid MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=ScrollViewer}}"> <Grid Width="Auto" Height="Auto">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="3*"/> <ColumnDefinition Width="3*"/>
@ -1350,7 +1331,7 @@
HorizontalAlignment="Stretch"> HorizontalAlignment="Stretch">
<StackPanel Name="MicrowinMain" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0"> <StackPanel Name="MicrowinMain" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0">
<StackPanel Name="MicrowinISOPanel" Background="Transparent" SnapsToDevicePixels="True" Margin="1"> <StackPanel Name="MicrowinISOPanel" Background="Transparent" SnapsToDevicePixels="True" Margin="1">
<CheckBox x:Name="WPFMicrowinDownloadFromGitHub" Content="Download oscdimg.exe from CTT GitHub repo" IsChecked="True" Margin="{DynamicResource MicrowinCheckBoxMargin}" /> <CheckBox x:Name="WPFMicrowinDownloadFromGitHub" Content="Download oscdimg.exe from CTT Github repo" IsChecked="True" Margin="{DynamicResource MicrowinCheckBoxMargin}" />
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{DynamicResource ComboBoxForegroundColor}"> <TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{DynamicResource ComboBoxForegroundColor}">
Choose a Windows ISO file that you've downloaded <LineBreak/> Choose a Windows ISO file that you've downloaded <LineBreak/>
Check the status in the console Check the status in the console
@ -1394,6 +1375,7 @@
/> />
<RadioButton x:Name="ISOmanual" Content="Select your own ISO" GroupName="Options" Margin="0,10,0,0" IsChecked="True"/> <RadioButton x:Name="ISOmanual" Content="Select your own ISO" GroupName="Options" Margin="0,10,0,0" IsChecked="True"/>
<RadioButton x:Name="ISOdownloader" Content="Get newest ISO automatically" GroupName="Options" Margin="0,5,0,5"/> <RadioButton x:Name="ISOdownloader" Content="Get newest ISO automatically" GroupName="Options" Margin="0,5,0,5"/>
<ComboBox x:Name="ISORelease" Visibility="Collapsed"/>
<ComboBox x:Name="ISOLanguage" Visibility="Collapsed"/> <ComboBox x:Name="ISOLanguage" Visibility="Collapsed"/>
<Button Name="WPFGetIso" Margin="2" Padding="15"> <Button Name="WPFGetIso" Margin="2" Padding="15">
<Button.Content> <Button.Content>
@ -1481,7 +1463,6 @@
<CheckBox Name="MicroWinWPBT" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then allows your computer vendor to execute a program each time it boots. It enables computer vendors to force install anti-theft software, software drivers, or a software program conveniently. This could also be a security risk."><AccessText TextWrapping="Wrap" Text="Disable Windows Platform Binary Table (WPBT) (ADVANCED TWEAK)" /></CheckBox> <CheckBox Name="MicroWinWPBT" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then allows your computer vendor to execute a program each time it boots. It enables computer vendors to force install anti-theft software, software drivers, or a software program conveniently. This could also be a security risk."><AccessText TextWrapping="Wrap" Text="Disable Windows Platform Binary Table (WPBT) (ADVANCED TWEAK)" /></CheckBox>
<CheckBox Name="MicroWinUnsupported" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then it will allow you to upgrade your PC to Windows 11 if your PC does not support Windows 11 yet. This is good for if you do not have a USB and want to upgrade to Windows 11 on unsupported hardware."><AccessText TextWrapping="Wrap" Text="Allow this PC to upgrade to Windows 11" /></CheckBox> <CheckBox Name="MicroWinUnsupported" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then it will allow you to upgrade your PC to Windows 11 if your PC does not support Windows 11 yet. This is good for if you do not have a USB and want to upgrade to Windows 11 on unsupported hardware."><AccessText TextWrapping="Wrap" Text="Allow this PC to upgrade to Windows 11" /></CheckBox>
<CheckBox Name="MicroWinESD" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="The ESD file format compresses the installation image even further, therefore reducing ISO file sizes a little more. Select this if you have a small USB."><AccessText TextWrapping="Wrap" Text="Convert this image to ESD (This will take longer)" /></CheckBox> <CheckBox Name="MicroWinESD" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="The ESD file format compresses the installation image even further, therefore reducing ISO file sizes a little more. Select this if you have a small USB."><AccessText TextWrapping="Wrap" Text="Convert this image to ESD (This will take longer)" /></CheckBox>
<CheckBox Name="MicroWinNoFLA" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="True" ToolTip="The First Logon Animation is an animation that is played when a user logs on for the first time. It can artificially increase wait times. Select this option to automatically close the first logon animation and reach the desktop quicker (additional system preparation will still be done)"><AccessText TextWrapping="Wrap" Text="Skip First Logon Animation" /></CheckBox>
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">WinUtil configuration file (JSON)</TextBlock> <TextBlock Margin="6" Padding="1" TextWrapping="Wrap">WinUtil configuration file (JSON)</TextBlock>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>