mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-07-01 10:32:35 -05:00
Compare commits
41 Commits
winget-fix
...
25.05.05
Author | SHA1 | Date | |
---|---|---|---|
3e416f5c14 | |||
95d28ee25d | |||
50071067b7 | |||
3b7d707262 | |||
ea95dac426 | |||
b4d3368680 | |||
0b5c44cbcf | |||
b8b16be24b | |||
14943e3c55 | |||
91365d50b5 | |||
82b6c268b0 | |||
d8c007d2db | |||
48f1c71584 | |||
f770642a6a | |||
963c0a17aa | |||
20769f66a1 | |||
86459b7e24 | |||
89919494e5 | |||
5f6bdb2e48 | |||
f614eea435 | |||
82447a1e7b | |||
51424abfad | |||
3caa3be9a3 | |||
7769a328bb | |||
425f11d787 | |||
6df94df594 | |||
29e2c4d197 | |||
b63a17b7dd | |||
abe059917c | |||
698f1644c3 | |||
fd03f33c50 | |||
8f9e7d1b7c | |||
b3dd1a1a50 | |||
4acad32a38 | |||
0f4fca31b9 | |||
36c984b66c | |||
d215d0fc2c | |||
52de4690ab | |||
ef97a8da24 | |||
18a7f17a0b | |||
5a8cf5deb6 |
6
.gitignore
vendored
6
.gitignore
vendored
@ -11,6 +11,9 @@
|
|||||||
|
|
||||||
winutil.pdb
|
winutil.pdb
|
||||||
|
|
||||||
|
### Preprocessor Hashes ###
|
||||||
|
.preprocessor_hashes.json
|
||||||
|
|
||||||
### Windows ###
|
### Windows ###
|
||||||
|
|
||||||
# Folder config file
|
# Folder config file
|
||||||
@ -47,4 +50,7 @@ True
|
|||||||
test.ps1
|
test.ps1
|
||||||
winutil.ps1
|
winutil.ps1
|
||||||
|
|
||||||
|
# temporary excludes for docs
|
||||||
|
.github/site/
|
||||||
|
|
||||||
binary/
|
binary/
|
18
Compile.ps1
18
Compile.ps1
@ -1,7 +1,6 @@
|
|||||||
param (
|
param (
|
||||||
[switch]$Debug,
|
[switch]$Debug,
|
||||||
[switch]$Run,
|
[switch]$Run,
|
||||||
[switch]$SkipPreprocessing,
|
|
||||||
[string]$Arguments
|
[string]$Arguments
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -45,17 +44,16 @@ $header = @"
|
|||||||
################################################################################################################
|
################################################################################################################
|
||||||
"@
|
"@
|
||||||
|
|
||||||
if (-NOT $SkipPreprocessing) {
|
|
||||||
Update-Progress "Pre-req: Running Preprocessor..." 0
|
|
||||||
|
|
||||||
# Dot source the 'Invoke-Preprocessing' Function from 'tools/Invoke-Preprocessing.ps1' Script
|
Update-Progress "Pre-req: Running Preprocessor..." 0
|
||||||
$preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1"
|
|
||||||
. $preprocessingFilePath
|
|
||||||
|
|
||||||
$excludedFiles = @('.\.git\', '.\.gitignore', '.\.gitattributes', '.\.github\CODEOWNERS', '.\LICENSE', "$preprocessingFilePath", '*.png', '*.exe')
|
# Dot source the 'Invoke-Preprocessing' Function from 'tools/Invoke-Preprocessing.ps1' Script
|
||||||
$msg = "Pre-req: Code Formatting"
|
$preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1"
|
||||||
Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg -ThrowExceptionOnEmptyFilesList
|
. $preprocessingFilePath
|
||||||
}
|
|
||||||
|
$excludedFiles = @('.\.git\', '.\.gitignore', '.\.gitattributes', '.\.github\CODEOWNERS', '.\LICENSE', "$preprocessingFilePath", '*.png', '*.exe','.\.preprocessor_hashes.json')
|
||||||
|
$msg = "Pre-req: Code Formatting"
|
||||||
|
Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg
|
||||||
|
|
||||||
# Create the script in memory.
|
# Create the script in memory.
|
||||||
Update-Progress "Pre-req: Allocating Memory" 0
|
Update-Progress "Pre-req: Allocating Memory" 0
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
[](https://github.com/ChrisTitusTech/winutil/releases/latest)
|
[](https://github.com/ChrisTitusTech/winutil/releases/latest)
|
||||||

|

|
||||||
[](https://discord.gg/RUbZUZyByQ)
|
[](https://discord.gg/RUbZUZyByQ)
|
||||||
|
[](https://winutil.christitus.com/)
|
||||||
|
|
||||||
This utility is a compilation of Windows tasks I perform on each Windows system I use. It is meant to streamline *installs*, debloat with *tweaks*, troubleshoot with *config*, and fix Windows *updates*. I am extremely picky about any contributions to keep this project clean and efficient.
|
This utility is a compilation of Windows tasks I perform on each Windows system I use. It is meant to streamline *installs*, debloat with *tweaks*, troubleshoot with *config*, and fix Windows *updates*. I am extremely picky about any contributions to keep this project clean and efficient.
|
||||||
|
|
||||||
@ -34,11 +35,11 @@ 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://christitustech.github.io/winutil/KnownIssues/)
|
If you have Issues, refer to [Known Issues](https://winutil.christitus.com/knownissues/)
|
||||||
|
|
||||||
## 🎓 Documentation
|
## 🎓 Documentation
|
||||||
|
|
||||||
### [WinUtil Official Documentation](https://christitustech.github.io/winutil/)
|
### [WinUtil Official Documentation](https://winutil.christitus.com/)
|
||||||
|
|
||||||
### [YouTube Tutorial](https://www.youtube.com/watch?v=6UQZ5oQg8XA)
|
### [YouTube Tutorial](https://www.youtube.com/watch?v=6UQZ5oQg8XA)
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ If you have Issues, refer to [Known Issues](https://christitustech.github.io/win
|
|||||||
|
|
||||||
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/TriHydera"><img src="https://github.com/TriHydera.png" width="60px" alt="User avatar: TriHydera" /></a><a href="https://github.com/jozozovko"><img src="https://github.com/jozozovko.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DelDongo"><img src="https://github.com/DelDongo.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/altugtekiner"><img src="https://github.com/altugtekiner.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave Jones" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/claudemods"><img src="https://github.com/claudemods.png" width="60px" alt="User avatar: Claudemods" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/Ascent7910"><img src="https://github.com/Ascent7910.png" width="60px" alt="User avatar: Max" /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/realmuddy"><img src="https://github.com/realmuddy.png" width="60px" alt="User avatar: Phillip Waters" /></a><a href="https://github.com/quaszi"><img src="https://github.com/quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><!-- sponsors -->
|
<!-- sponsors --><a href="https://github.com/TriHydera"><img src="https://github.com/TriHydera.png" width="60px" alt="User avatar: TriHydera" /></a><a href="https://github.com/DelDongo"><img src="https://github.com/DelDongo.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/altugtekiner"><img src="https://github.com/altugtekiner.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave J. - WhamGeek" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/claudemods"><img src="https://github.com/claudemods.png" width="60px" alt="User avatar: claudemods" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/Ascent7910"><img src="https://github.com/Ascent7910.png" width="60px" alt="User avatar: Max" /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/realmuddy"><img src="https://github.com/realmuddy.png" width="60px" alt="User avatar: Phillip Waters" /></a><a href="https://github.com/quaszi"><img src="https://github.com/quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></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 🍻.
|
||||||
|
@ -527,14 +527,6 @@
|
|||||||
"link": "https://espanso.org/",
|
"link": "https://espanso.org/",
|
||||||
"winget": "Espanso.Espanso"
|
"winget": "Espanso.Espanso"
|
||||||
},
|
},
|
||||||
"etcher": {
|
|
||||||
"category": "Utilities",
|
|
||||||
"choco": "etcher",
|
|
||||||
"content": "Etcher USB Creator",
|
|
||||||
"description": "Etcher is a powerful tool for creating bootable USB drives with ease.",
|
|
||||||
"link": "https://www.balena.io/etcher/",
|
|
||||||
"winget": "Balena.Etcher"
|
|
||||||
},
|
|
||||||
"falkon": {
|
"falkon": {
|
||||||
"category": "Browsers",
|
"category": "Browsers",
|
||||||
"choco": "falkon",
|
"choco": "falkon",
|
||||||
@ -709,7 +701,7 @@
|
|||||||
"content": "GIMP (Image Editor)",
|
"content": "GIMP (Image Editor)",
|
||||||
"description": "GIMP is a versatile open-source raster graphics editor used for tasks such as photo retouching, image editing, and image composition.",
|
"description": "GIMP is a versatile open-source raster graphics editor used for tasks such as photo retouching, image editing, and image composition.",
|
||||||
"link": "https://www.gimp.org/",
|
"link": "https://www.gimp.org/",
|
||||||
"winget": "GIMP.GIMP"
|
"winget": "GIMP.GIMP.3"
|
||||||
},
|
},
|
||||||
"git": {
|
"git": {
|
||||||
"category": "Development",
|
"category": "Development",
|
||||||
@ -1511,14 +1503,6 @@
|
|||||||
"link": "https://github.com/namazso/OpenHashTab/",
|
"link": "https://github.com/namazso/OpenHashTab/",
|
||||||
"winget": "namazso.OpenHashTab"
|
"winget": "namazso.OpenHashTab"
|
||||||
},
|
},
|
||||||
"openoffice": {
|
|
||||||
"category": "Document",
|
|
||||||
"choco": "openoffice",
|
|
||||||
"content": "Apache OpenOffice",
|
|
||||||
"description": "Apache OpenOffice is an open-source office software suite for word processing, spreadsheets, presentations, and more.",
|
|
||||||
"link": "https://www.openoffice.org/",
|
|
||||||
"winget": "Apache.OpenOffice"
|
|
||||||
},
|
|
||||||
"openrgb": {
|
"openrgb": {
|
||||||
"category": "Utilities",
|
"category": "Utilities",
|
||||||
"choco": "openrgb",
|
"choco": "openrgb",
|
||||||
@ -1699,7 +1683,7 @@
|
|||||||
"category": "Games",
|
"category": "Games",
|
||||||
"choco": "prismlauncher",
|
"choco": "prismlauncher",
|
||||||
"content": "Prism Launcher",
|
"content": "Prism Launcher",
|
||||||
"description": "Prism Launcher is a game launcher and manager designed to provide a clean and intuitive interface for organizing and launching your games.",
|
"description": "Prism Launcher is an Open Source Minecraft launcher with the ability to manage multiple instances, accounts and mods.",
|
||||||
"link": "https://prismlauncher.org/",
|
"link": "https://prismlauncher.org/",
|
||||||
"winget": "PrismLauncher.PrismLauncher"
|
"winget": "PrismLauncher.PrismLauncher"
|
||||||
},
|
},
|
||||||
@ -2934,5 +2918,13 @@
|
|||||||
"description": "Fork - a fast and friendly git client.",
|
"description": "Fork - a fast and friendly git client.",
|
||||||
"link": "https://git-fork.com/",
|
"link": "https://git-fork.com/",
|
||||||
"winget": "Fork.Fork"
|
"winget": "Fork.Fork"
|
||||||
|
},
|
||||||
|
"ZenBrowser": {
|
||||||
|
"category": "Browsers",
|
||||||
|
"choco": "na",
|
||||||
|
"content": "Zen Browser",
|
||||||
|
"description": "The modern, privacy-focused, performance-driven browser built on Firefox",
|
||||||
|
"link": "https://zen-browser.app/",
|
||||||
|
"winget": "Zen-Team.Zen-Browser"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
"NetFx3"
|
"NetFx3"
|
||||||
],
|
],
|
||||||
"InvokeScript": [],
|
"InvokeScript": [],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/dotnet"
|
"link": "https://winutil.christitus.com/dev/features/features/dotnet"
|
||||||
},
|
},
|
||||||
"WPFFeatureshyperv": {
|
"WPFFeatureshyperv": {
|
||||||
"Content": "HyperV Virtualization",
|
"Content": "HyperV Virtualization",
|
||||||
@ -31,7 +31,7 @@
|
|||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /set hypervisorschedulertype classic' -Wait"
|
"Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /set hypervisorschedulertype classic' -Wait"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/hyperv"
|
"link": "https://winutil.christitus.com/dev/features/features/hyperv"
|
||||||
},
|
},
|
||||||
"WPFFeatureslegacymedia": {
|
"WPFFeatureslegacymedia": {
|
||||||
"Content": "Legacy Media (WMP, DirectPlay)",
|
"Content": "Legacy Media (WMP, DirectPlay)",
|
||||||
@ -46,7 +46,7 @@
|
|||||||
"LegacyComponents"
|
"LegacyComponents"
|
||||||
],
|
],
|
||||||
"InvokeScript": [],
|
"InvokeScript": [],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/legacymedia"
|
"link": "https://winutil.christitus.com/dev/features/features/legacymedia"
|
||||||
},
|
},
|
||||||
"WPFFeaturewsl": {
|
"WPFFeaturewsl": {
|
||||||
"Content": "Windows Subsystem for Linux",
|
"Content": "Windows Subsystem for Linux",
|
||||||
@ -59,7 +59,7 @@
|
|||||||
"Microsoft-Windows-Subsystem-Linux"
|
"Microsoft-Windows-Subsystem-Linux"
|
||||||
],
|
],
|
||||||
"InvokeScript": [],
|
"InvokeScript": [],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/wsl"
|
"link": "https://winutil.christitus.com/dev/features/features/wsl"
|
||||||
},
|
},
|
||||||
"WPFFeaturenfs": {
|
"WPFFeaturenfs": {
|
||||||
"Content": "NFS - Network File System",
|
"Content": "NFS - Network File System",
|
||||||
@ -79,7 +79,7 @@
|
|||||||
"nfsadmin client start",
|
"nfsadmin client start",
|
||||||
"nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i"
|
"nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/nfs"
|
"link": "https://winutil.christitus.com/dev/features/features/nfs"
|
||||||
},
|
},
|
||||||
"WPFFeatureEnableSearchSuggestions": {
|
"WPFFeatureEnableSearchSuggestions": {
|
||||||
"Content": "Enable Search Box Web Suggestions in Registry(explorer restart)",
|
"Content": "Enable Search Box Web Suggestions in Registry(explorer restart)",
|
||||||
@ -97,7 +97,7 @@
|
|||||||
Stop-Process -name explorer -force
|
Stop-Process -name explorer -force
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/EnableSearchSuggestions"
|
"link": "https://winutil.christitus.com/dev/features/features/enablesearchsuggestions"
|
||||||
},
|
},
|
||||||
"WPFFeatureDisableSearchSuggestions": {
|
"WPFFeatureDisableSearchSuggestions": {
|
||||||
"Content": "Disable Search Box Web Suggestions in Registry(explorer restart)",
|
"Content": "Disable Search Box Web Suggestions in Registry(explorer restart)",
|
||||||
@ -115,7 +115,7 @@
|
|||||||
Stop-Process -name explorer -force
|
Stop-Process -name explorer -force
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/DisableSearchSuggestions"
|
"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",
|
||||||
@ -133,7 +133,7 @@
|
|||||||
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'
|
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/RegBackup"
|
"link": "https://winutil.christitus.com/dev/features/features/regbackup"
|
||||||
},
|
},
|
||||||
"WPFFeatureEnableLegacyRecovery": {
|
"WPFFeatureEnableLegacyRecovery": {
|
||||||
"Content": "Enable Legacy F8 Boot Recovery",
|
"Content": "Enable Legacy F8 Boot Recovery",
|
||||||
@ -151,7 +151,7 @@
|
|||||||
Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Legacy' -Wait
|
Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Legacy' -Wait
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/EnableLegacyRecovery"
|
"link": "https://winutil.christitus.com/dev/features/features/enablelegacyrecovery"
|
||||||
},
|
},
|
||||||
"WPFFeatureDisableLegacyRecovery": {
|
"WPFFeatureDisableLegacyRecovery": {
|
||||||
"Content": "Disable Legacy F8 Boot Recovery",
|
"Content": "Disable Legacy F8 Boot Recovery",
|
||||||
@ -169,7 +169,7 @@
|
|||||||
Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Standard' -Wait
|
Start-Process -FilePath cmd.exe -ArgumentList '/c bcdedit /Set {Current} BootMenuPolicy Standard' -Wait
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/DisableLegacyRecovery"
|
"link": "https://winutil.christitus.com/dev/features/features/disablelegacyrecovery"
|
||||||
},
|
},
|
||||||
"WPFFeaturesSandbox": {
|
"WPFFeaturesSandbox": {
|
||||||
"Content": "Windows Sandbox",
|
"Content": "Windows Sandbox",
|
||||||
@ -177,7 +177,7 @@
|
|||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a021_",
|
"Order": "a021_",
|
||||||
"Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.",
|
"Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/Sandbox"
|
"link": "https://winutil.christitus.com/dev/features/features/sandbox"
|
||||||
},
|
},
|
||||||
"WPFFeatureInstall": {
|
"WPFFeatureInstall": {
|
||||||
"Content": "Install Features",
|
"Content": "Install Features",
|
||||||
@ -186,7 +186,7 @@
|
|||||||
"Order": "a060_",
|
"Order": "a060_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Features/Install"
|
"link": "https://winutil.christitus.com/dev/features/features/install"
|
||||||
},
|
},
|
||||||
"WPFPanelAutologin": {
|
"WPFPanelAutologin": {
|
||||||
"Content": "Set Up Autologin",
|
"Content": "Set Up Autologin",
|
||||||
@ -195,7 +195,7 @@
|
|||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Fixes/Autologin"
|
"link": "https://winutil.christitus.com/dev/features/fixes/autologin"
|
||||||
},
|
},
|
||||||
"WPFFixesUpdate": {
|
"WPFFixesUpdate": {
|
||||||
"Content": "Reset Windows Update",
|
"Content": "Reset Windows Update",
|
||||||
@ -204,7 +204,7 @@
|
|||||||
"Order": "a041_",
|
"Order": "a041_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Fixes/Update"
|
"link": "https://winutil.christitus.com/dev/features/fixes/update"
|
||||||
},
|
},
|
||||||
"WPFFixesNetwork": {
|
"WPFFixesNetwork": {
|
||||||
"Content": "Reset Network",
|
"Content": "Reset Network",
|
||||||
@ -213,7 +213,7 @@
|
|||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Fixes/Network"
|
"link": "https://winutil.christitus.com/dev/features/fixes/network"
|
||||||
},
|
},
|
||||||
"WPFPanelDISM": {
|
"WPFPanelDISM": {
|
||||||
"Content": "System Corruption Scan",
|
"Content": "System Corruption Scan",
|
||||||
@ -222,7 +222,7 @@
|
|||||||
"Order": "a043_",
|
"Order": "a043_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Fixes/DISM"
|
"link": "https://winutil.christitus.com/dev/features/fixes/dism"
|
||||||
},
|
},
|
||||||
"WPFFixesWinget": {
|
"WPFFixesWinget": {
|
||||||
"Content": "WinGet Reinstall",
|
"Content": "WinGet Reinstall",
|
||||||
@ -231,7 +231,7 @@
|
|||||||
"Order": "a044_",
|
"Order": "a044_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Fixes/Winget"
|
"link": "https://winutil.christitus.com/dev/features/fixes/winget"
|
||||||
},
|
},
|
||||||
"WPFRunAdobeCCCleanerTool": {
|
"WPFRunAdobeCCCleanerTool": {
|
||||||
"Content": "Remove Adobe Creative Cloud",
|
"Content": "Remove Adobe Creative Cloud",
|
||||||
@ -240,7 +240,7 @@
|
|||||||
"Order": "a045_",
|
"Order": "a045_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Fixes/RunAdobeCCCleanerTool"
|
"link": "https://winutil.christitus.com/dev/features/fixes/runadobecccleanertool"
|
||||||
},
|
},
|
||||||
"WPFPanelnetwork": {
|
"WPFPanelnetwork": {
|
||||||
"Content": "Network Connections",
|
"Content": "Network Connections",
|
||||||
@ -248,7 +248,7 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/network"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/network"
|
||||||
},
|
},
|
||||||
"WPFPanelcontrol": {
|
"WPFPanelcontrol": {
|
||||||
"Content": "Control Panel",
|
"Content": "Control Panel",
|
||||||
@ -256,7 +256,7 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/control"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/control"
|
||||||
},
|
},
|
||||||
"WPFPanelpower": {
|
"WPFPanelpower": {
|
||||||
"Content": "Power Panel",
|
"Content": "Power Panel",
|
||||||
@ -264,7 +264,7 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/power"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/power"
|
||||||
},
|
},
|
||||||
"WPFPanelregion": {
|
"WPFPanelregion": {
|
||||||
"Content": "Region",
|
"Content": "Region",
|
||||||
@ -272,7 +272,7 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/region"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/region"
|
||||||
},
|
},
|
||||||
"WPFPanelsound": {
|
"WPFPanelsound": {
|
||||||
"Content": "Sound Settings",
|
"Content": "Sound Settings",
|
||||||
@ -280,7 +280,7 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/sound"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/sound"
|
||||||
},
|
},
|
||||||
"WPFPanelprinter": {
|
"WPFPanelprinter": {
|
||||||
"Content": "Printer Panel",
|
"Content": "Printer Panel",
|
||||||
@ -288,7 +288,7 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/printer"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/printer"
|
||||||
},
|
},
|
||||||
"WPFPanelsystem": {
|
"WPFPanelsystem": {
|
||||||
"Content": "System Properties",
|
"Content": "System Properties",
|
||||||
@ -296,7 +296,7 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/system"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/system"
|
||||||
},
|
},
|
||||||
"WPFPaneluser": {
|
"WPFPaneluser": {
|
||||||
"Content": "User Accounts",
|
"Content": "User Accounts",
|
||||||
@ -304,7 +304,14 @@
|
|||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/features/Legacy-Windows-Panels/user"
|
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/user"
|
||||||
|
},
|
||||||
|
"WPFPanelGodMode": {
|
||||||
|
"Content": "God Mode",
|
||||||
|
"category": "Legacy Windows Panels",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Button",
|
||||||
|
"ButtonWidth": "300"
|
||||||
},
|
},
|
||||||
"WPFWinUtilInstallPSProfile": {
|
"WPFWinUtilInstallPSProfile": {
|
||||||
"Content": "Install CTT PowerShell Profile",
|
"Content": "Install CTT PowerShell Profile",
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
"Standard": [
|
"Standard": [
|
||||||
"WPFTweaksAH",
|
"WPFTweaksAH",
|
||||||
"WPFTweaksConsumerFeatures",
|
"WPFTweaksConsumerFeatures",
|
||||||
|
"WPFTweaksDisableExplorerAutoDiscovery",
|
||||||
"WPFTweaksDVR",
|
"WPFTweaksDVR",
|
||||||
"WPFTweaksHiber",
|
"WPFTweaksHiber",
|
||||||
"WPFTweaksHome",
|
"WPFTweaksHome",
|
||||||
@ -18,6 +19,7 @@
|
|||||||
],
|
],
|
||||||
"Minimal": [
|
"Minimal": [
|
||||||
"WPFTweaksConsumerFeatures",
|
"WPFTweaksConsumerFeatures",
|
||||||
|
"WPFTweaksDisableExplorerAutoDiscovery",
|
||||||
"WPFTweaksHome",
|
"WPFTweaksHome",
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
"WPFTweaksTele"
|
"WPFTweaksTele"
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
"CustomDialogHeight": "200",
|
"CustomDialogHeight": "200",
|
||||||
"FontSize": "12",
|
"FontSize": "12",
|
||||||
"FontFamily": "Arial",
|
"FontFamily": "Arial",
|
||||||
"HeadingFontSize": "16",
|
"HeaderFontSize": "16",
|
||||||
"HeaderFontFamily": "Consolas, Monaco",
|
"HeaderFontFamily": "Consolas, Monaco",
|
||||||
"CheckBoxBulletDecoratorSize": "14",
|
"CheckBoxBulletDecoratorSize": "14",
|
||||||
"CheckBoxMargin": "15,0,0,2",
|
"CheckBoxMargin": "15,0,0,2",
|
||||||
@ -35,7 +35,8 @@
|
|||||||
"CheckboxMouseOverColor": "#999999",
|
"CheckboxMouseOverColor": "#999999",
|
||||||
"ButtonBorderThickness": "1",
|
"ButtonBorderThickness": "1",
|
||||||
"ButtonMargin": "1",
|
"ButtonMargin": "1",
|
||||||
"ButtonCornerRadius": "2"
|
"ButtonCornerRadius": "2",
|
||||||
|
"AppTileImageSize": "40"
|
||||||
},
|
},
|
||||||
"Light": {
|
"Light": {
|
||||||
"AppInstallUnselectedColor": "#F0F0F0",
|
"AppInstallUnselectedColor": "#F0F0F0",
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
"OriginalValue": "<RemoveEntry>"
|
"OriginalValue": "<RemoveEntry>"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/AH"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/ah"
|
||||||
},
|
},
|
||||||
"WPFTweaksHiber": {
|
"WPFTweaksHiber": {
|
||||||
"Content": "Disable Hibernation",
|
"Content": "Disable Hibernation",
|
||||||
@ -58,7 +58,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"powercfg.exe /hibernate on"
|
"powercfg.exe /hibernate on"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Hiber"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/hiber"
|
||||||
},
|
},
|
||||||
"WPFTweaksLaptopHibernation": {
|
"WPFTweaksLaptopHibernation": {
|
||||||
"Content": "Set Hibernation as default (good for laptops)",
|
"Content": "Set Hibernation as default (good for laptops)",
|
||||||
@ -106,7 +106,7 @@
|
|||||||
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 15\" -NoNewWindow -Wait
|
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 15\" -NoNewWindow -Wait
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/LaptopHibernation"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/laptophibernation"
|
||||||
},
|
},
|
||||||
"WPFTweaksHome": {
|
"WPFTweaksHome": {
|
||||||
"Content": "Disable Homegroup",
|
"Content": "Disable Homegroup",
|
||||||
@ -126,7 +126,7 @@
|
|||||||
"OriginalType": "Automatic"
|
"OriginalType": "Automatic"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Home"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/home"
|
||||||
},
|
},
|
||||||
"WPFTweaksLoc": {
|
"WPFTweaksLoc": {
|
||||||
"Content": "Disable Location Tracking",
|
"Content": "Disable Location Tracking",
|
||||||
@ -164,7 +164,7 @@
|
|||||||
"OriginalValue": "1"
|
"OriginalValue": "1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Loc"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/loc"
|
||||||
},
|
},
|
||||||
"WPFTweaksServices": {
|
"WPFTweaksServices": {
|
||||||
"Content": "Set Services to Manual",
|
"Content": "Set Services to Manual",
|
||||||
@ -1549,7 +1549,7 @@
|
|||||||
"OriginalType": "Manual"
|
"OriginalType": "Manual"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Services"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/services"
|
||||||
},
|
},
|
||||||
"WPFTweaksEdgeDebloat": {
|
"WPFTweaksEdgeDebloat": {
|
||||||
"Content": "Debloat Edge",
|
"Content": "Debloat Edge",
|
||||||
@ -1685,7 +1685,7 @@
|
|||||||
"OriginalValue": "<RemoveEntry>"
|
"OriginalValue": "<RemoveEntry>"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/EdgeDebloat"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/edgedebloat"
|
||||||
},
|
},
|
||||||
"WPFTweaksConsumerFeatures": {
|
"WPFTweaksConsumerFeatures": {
|
||||||
"Content": "Disable ConsumerFeatures",
|
"Content": "Disable ConsumerFeatures",
|
||||||
@ -1702,7 +1702,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/ConsumerFeatures"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/consumerfeatures"
|
||||||
},
|
},
|
||||||
"WPFTweaksTele": {
|
"WPFTweaksTele": {
|
||||||
"Content": "Disable Telemetry",
|
"Content": "Disable Telemetry",
|
||||||
@ -2074,7 +2074,7 @@
|
|||||||
Set-MpPreference -SubmitSamplesConsent 2 -ErrorAction SilentlyContinue | Out-Null
|
Set-MpPreference -SubmitSamplesConsent 2 -ErrorAction SilentlyContinue | Out-Null
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Tele"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/tele"
|
||||||
},
|
},
|
||||||
"WPFTweaksWifi": {
|
"WPFTweaksWifi": {
|
||||||
"Content": "Disable Wifi-Sense",
|
"Content": "Disable Wifi-Sense",
|
||||||
@ -2098,7 +2098,7 @@
|
|||||||
"OriginalValue": "1"
|
"OriginalValue": "1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Wifi"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/wifi"
|
||||||
},
|
},
|
||||||
"WPFTweaksUTC": {
|
"WPFTweaksUTC": {
|
||||||
"Content": "Set Time to UTC (Dual Boot)",
|
"Content": "Set Time to UTC (Dual Boot)",
|
||||||
@ -2115,7 +2115,7 @@
|
|||||||
"OriginalValue": "0"
|
"OriginalValue": "0"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/UTC"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/utc"
|
||||||
},
|
},
|
||||||
"WPFTweaksRemoveHomeGallery": {
|
"WPFTweaksRemoveHomeGallery": {
|
||||||
"Content": "Remove Home and Gallery from explorer",
|
"Content": "Remove Home and Gallery from explorer",
|
||||||
@ -2137,7 +2137,7 @@
|
|||||||
REG DELETE \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\"
|
REG DELETE \"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" /f /v \"LaunchTo\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveHomeGallery"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removehomegallery"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisplay": {
|
"WPFTweaksDisplay": {
|
||||||
"Content": "Set Display for Performance",
|
"Content": "Set Display for Performance",
|
||||||
@ -2244,7 +2244,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"Remove-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\""
|
"Remove-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\""
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Display"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/display"
|
||||||
},
|
},
|
||||||
"WPFTweaksDeBloat": {
|
"WPFTweaksDeBloat": {
|
||||||
"Content": "Remove ALL MS Store Apps - NOT RECOMMENDED",
|
"Content": "Remove ALL MS Store Apps - NOT RECOMMENDED",
|
||||||
@ -2356,7 +2356,7 @@
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DeBloat"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/debloat"
|
||||||
},
|
},
|
||||||
"WPFTweaksRestorePoint": {
|
"WPFTweaksRestorePoint": {
|
||||||
"Content": "Create Restore Point",
|
"Content": "Create Restore Point",
|
||||||
@ -2407,7 +2407,7 @@
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/RestorePoint"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/restorepoint"
|
||||||
},
|
},
|
||||||
"WPFTweaksEndTaskOnTaskbar": {
|
"WPFTweaksEndTaskOnTaskbar": {
|
||||||
"Content": "Enable End Task With Right Click",
|
"Content": "Enable End Task With Right Click",
|
||||||
@ -2441,7 +2441,7 @@
|
|||||||
# Set the property, creating it if it doesn't exist
|
# Set the property, creating it if it doesn't exist
|
||||||
New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
|
New-ItemProperty -Path $path -Name $name -PropertyType DWord -Value $value -Force | Out-Null"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/endtaskontaskbar"
|
||||||
},
|
},
|
||||||
"WPFTweaksPowershell7": {
|
"WPFTweaksPowershell7": {
|
||||||
"Content": "Change Windows Terminal default: PowerShell 5 -> PowerShell 7",
|
"Content": "Change Windows Terminal default: PowerShell 5 -> PowerShell 7",
|
||||||
@ -2455,7 +2455,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"Invoke-WPFTweakPS7 -action \"PS5\""
|
"Invoke-WPFTweakPS7 -action \"PS5\""
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Powershell7"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/powershell7"
|
||||||
},
|
},
|
||||||
"WPFTweaksPowershell7Tele": {
|
"WPFTweaksPowershell7Tele": {
|
||||||
"Content": "Disable Powershell 7 Telemetry",
|
"Content": "Disable Powershell 7 Telemetry",
|
||||||
@ -2469,7 +2469,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')"
|
"[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Powershell7Tele"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/powershell7tele"
|
||||||
},
|
},
|
||||||
"WPFTweaksStorage": {
|
"WPFTweaksStorage": {
|
||||||
"Content": "Disable Storage Sense",
|
"Content": "Disable Storage Sense",
|
||||||
@ -2483,7 +2483,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force"
|
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/Storage"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/storage"
|
||||||
},
|
},
|
||||||
"WPFTweaksRemoveEdge": {
|
"WPFTweaksRemoveEdge": {
|
||||||
"Content": "Remove Microsoft Edge",
|
"Content": "Remove Microsoft Edge",
|
||||||
@ -2497,7 +2497,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"Uninstall-WinUtilEdgeBrowser -action \"Install\""
|
"Uninstall-WinUtilEdgeBrowser -action \"Install\""
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveEdge"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeedge"
|
||||||
},
|
},
|
||||||
"WPFTweaksRemoveCopilot": {
|
"WPFTweaksRemoveCopilot": {
|
||||||
"Content": "Disable Microsoft Copilot",
|
"Content": "Disable Microsoft Copilot",
|
||||||
@ -2540,7 +2540,7 @@
|
|||||||
dism /online /add-package /package-name:Microsoft.Windows.Copilot
|
dism /online /add-package /package-name:Microsoft.Windows.Copilot
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removecopilot"
|
||||||
},
|
},
|
||||||
"WPFTweaksRecallOff": {
|
"WPFTweaksRecallOff": {
|
||||||
"Content": "Disable Recall",
|
"Content": "Disable Recall",
|
||||||
@ -2550,7 +2550,6 @@
|
|||||||
"Order": "a011_",
|
"Order": "a011_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
|
||||||
"Name": "DisableAIDataAnalysis",
|
"Name": "DisableAIDataAnalysis",
|
||||||
"Type": "DWord",
|
"Type": "DWord",
|
||||||
@ -2572,7 +2571,7 @@
|
|||||||
Write-Host \"Please restart your computer in order for the changes to be fully applied.\"
|
Write-Host \"Please restart your computer in order for the changes to be fully applied.\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DisableRecall"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/disablerecall"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableLMS1": {
|
"WPFTweaksDisableLMS1": {
|
||||||
"Content": "Disable Intel MM (vPro LMS)",
|
"Content": "Disable Intel MM (vPro LMS)",
|
||||||
@ -2630,7 +2629,7 @@
|
|||||||
|
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableLMS1"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablelms1"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableWpbtExecution": {
|
"WPFTweaksDisableWpbtExecution": {
|
||||||
"Content": "Disable Windows Platform Binary Table (WPBT)",
|
"Content": "Disable Windows Platform Binary Table (WPBT)",
|
||||||
@ -2753,7 +2752,7 @@
|
|||||||
Start-Process -FilePath winget -ArgumentList \"install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.OneDrive \" -NoNewWindow -Wait
|
Start-Process -FilePath winget -ArgumentList \"install -e --accept-source-agreements --accept-package-agreements --silent Microsoft.OneDrive \" -NoNewWindow -Wait
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveOnedrive"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeonedrive"
|
||||||
},
|
},
|
||||||
"WPFTweaksRazerBlock": {
|
"WPFTweaksRazerBlock": {
|
||||||
"Content": "Block Razer Software Installs",
|
"Content": "Block Razer Software Installs",
|
||||||
@ -2795,7 +2794,7 @@
|
|||||||
New-Item -Path \"C:\\Windows\\Installer\\\" -Name \"Razer\" -ItemType \"directory\"
|
New-Item -Path \"C:\\Windows\\Installer\\\" -Name \"Razer\" -ItemType \"directory\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/RazerBlock"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/razerblock"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableNotifications": {
|
"WPFTweaksDisableNotifications": {
|
||||||
"Content": "Disable Notification Tray/Calendar",
|
"Content": "Disable Notification Tray/Calendar",
|
||||||
@ -2819,7 +2818,7 @@
|
|||||||
"OriginalValue": "1"
|
"OriginalValue": "1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableNotifications"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablenotifications"
|
||||||
},
|
},
|
||||||
"WPFTweaksDebloatAdobe": {
|
"WPFTweaksDebloatAdobe": {
|
||||||
"Content": "Adobe Debloat",
|
"Content": "Adobe Debloat",
|
||||||
@ -2968,7 +2967,7 @@
|
|||||||
"OriginalType": "Automatic"
|
"OriginalType": "Automatic"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DebloatAdobe"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/debloatadobe"
|
||||||
},
|
},
|
||||||
"WPFTweaksBlockAdobeNet": {
|
"WPFTweaksBlockAdobeNet": {
|
||||||
"Content": "Adobe Network Block",
|
"Content": "Adobe Network Block",
|
||||||
@ -3076,7 +3075,7 @@
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/BlockAdobeNet"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/blockadobenet"
|
||||||
},
|
},
|
||||||
"WPFTweaksRightClickMenu": {
|
"WPFTweaksRightClickMenu": {
|
||||||
"Content": "Set Classic Right-Click Menu ",
|
"Content": "Set Classic Right-Click Menu ",
|
||||||
@ -3101,7 +3100,7 @@
|
|||||||
Stop-Process -InputObject $process
|
Stop-Process -InputObject $process
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RightClickMenu"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/rightclickmenu"
|
||||||
},
|
},
|
||||||
"WPFTweaksDiskCleanup": {
|
"WPFTweaksDiskCleanup": {
|
||||||
"Content": "Run Disk Cleanup",
|
"Content": "Run Disk Cleanup",
|
||||||
@ -3115,7 +3114,7 @@
|
|||||||
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
|
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DiskCleanup"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/diskcleanup"
|
||||||
},
|
},
|
||||||
"WPFTweaksDeleteTempFiles": {
|
"WPFTweaksDeleteTempFiles": {
|
||||||
"Content": "Delete Temporary Files",
|
"Content": "Delete Temporary Files",
|
||||||
@ -3127,7 +3126,7 @@
|
|||||||
"Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
|
"Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
|
||||||
Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
|
Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DeleteTempFiles"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/deletetempfiles"
|
||||||
},
|
},
|
||||||
"WPFTweaksDVR": {
|
"WPFTweaksDVR": {
|
||||||
"Content": "Disable GameDVR",
|
"Content": "Disable GameDVR",
|
||||||
@ -3172,7 +3171,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DVR"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/dvr"
|
||||||
},
|
},
|
||||||
"WPFTweaksIPv46": {
|
"WPFTweaksIPv46": {
|
||||||
"Content": "Prefer IPv4 over IPv6",
|
"Content": "Prefer IPv4 over IPv6",
|
||||||
@ -3189,7 +3188,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/IPv46"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/ipv46"
|
||||||
},
|
},
|
||||||
"WPFTweaksTeredo": {
|
"WPFTweaksTeredo": {
|
||||||
"Content": "Disable Teredo",
|
"Content": "Disable Teredo",
|
||||||
@ -3212,7 +3211,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"netsh interface teredo set state default"
|
"netsh interface teredo set state default"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Teredo"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/teredo"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableipsix": {
|
"WPFTweaksDisableipsix": {
|
||||||
"Content": "Disable IPv6",
|
"Content": "Disable IPv6",
|
||||||
@ -3235,7 +3234,7 @@
|
|||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/Disableipsix"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disableipsix"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableBGapps": {
|
"WPFTweaksDisableBGapps": {
|
||||||
"Content": "Disable Background Apps",
|
"Content": "Disable Background Apps",
|
||||||
@ -3252,7 +3251,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableBGapps"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablebgapps"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableFSO": {
|
"WPFTweaksDisableFSO": {
|
||||||
"Content": "Disable Fullscreen Optimizations",
|
"Content": "Disable Fullscreen Optimizations",
|
||||||
@ -3269,7 +3268,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/DisableFSO"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablefso"
|
||||||
},
|
},
|
||||||
"WPFToggleDarkMode": {
|
"WPFToggleDarkMode": {
|
||||||
"Content": "Dark Theme for Windows",
|
"Content": "Dark Theme for Windows",
|
||||||
@ -3312,7 +3311,7 @@
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DarkMode"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/darkmode"
|
||||||
},
|
},
|
||||||
"WPFToggleBingSearch": {
|
"WPFToggleBingSearch": {
|
||||||
"Content": "Bing Search in Start Menu",
|
"Content": "Bing Search in Start Menu",
|
||||||
@ -3331,7 +3330,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/BingSearch"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/bingsearch"
|
||||||
},
|
},
|
||||||
"WPFToggleNumLock": {
|
"WPFToggleNumLock": {
|
||||||
"Content": "NumLock on Startup",
|
"Content": "NumLock on Startup",
|
||||||
@ -3358,7 +3357,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/NumLock"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/numlock"
|
||||||
},
|
},
|
||||||
"WPFToggleVerboseLogon": {
|
"WPFToggleVerboseLogon": {
|
||||||
"Content": "Verbose Messages During Logon",
|
"Content": "Verbose Messages During Logon",
|
||||||
@ -3377,7 +3376,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/VerboseLogon"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/verboselogon"
|
||||||
},
|
},
|
||||||
"WPFToggleStartMenuRecommendations": {
|
"WPFToggleStartMenuRecommendations": {
|
||||||
"Content": "Recommendations in Start Menu",
|
"Content": "Recommendations in Start Menu",
|
||||||
@ -3412,14 +3411,32 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/WPFToggleStartMenuRecommendations"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/wpftogglestartmenurecommendations"
|
||||||
|
},
|
||||||
|
"WPFToggleHideSettingsHome": {
|
||||||
|
"Content": "Remove Settings Home Page",
|
||||||
|
"Description": "Removes the Home page in the Windows Settings app.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Order": "a105_",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",
|
||||||
|
"Name": "SettingsPageVisibility",
|
||||||
|
"Type": "String",
|
||||||
|
"Value": "hide:home",
|
||||||
|
"OriginalValue": "show:home",
|
||||||
|
"DefaultState": "false"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"WPFToggleSnapWindow": {
|
"WPFToggleSnapWindow": {
|
||||||
"Content": "Snap Window",
|
"Content": "Snap Window",
|
||||||
"Description": "If enabled you can align windows by dragging them. | Relogin Required",
|
"Description": "If enabled you can align windows by dragging them. | Relogin Required",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a105_",
|
"Order": "a106_",
|
||||||
"Type": "Toggle",
|
"Type": "Toggle",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
@ -3431,14 +3448,14 @@
|
|||||||
"Type": "String"
|
"Type": "String"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapWindow"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/snapwindow"
|
||||||
},
|
},
|
||||||
"WPFToggleSnapFlyout": {
|
"WPFToggleSnapFlyout": {
|
||||||
"Content": "Snap Assist Flyout",
|
"Content": "Snap Assist Flyout",
|
||||||
"Description": "If enabled then Snap preview is disabled when maximize button is hovered.",
|
"Description": "If enabled then Snap preview is disabled when maximize button is hovered.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a106_",
|
"Order": "a107_",
|
||||||
"Type": "Toggle",
|
"Type": "Toggle",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
@ -3460,14 +3477,14 @@
|
|||||||
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapFlyout"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/snapflyout"
|
||||||
},
|
},
|
||||||
"WPFToggleSnapSuggestion": {
|
"WPFToggleSnapSuggestion": {
|
||||||
"Content": "Snap Assist Suggestion",
|
"Content": "Snap Assist Suggestion",
|
||||||
"Description": "If enabled then you will get suggestions to snap other applications in the left over spaces.",
|
"Description": "If enabled then you will get suggestions to snap other applications in the left over spaces.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a107_",
|
"Order": "a108_",
|
||||||
"Type": "Toggle",
|
"Type": "Toggle",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
@ -3489,14 +3506,14 @@
|
|||||||
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/SnapSuggestion"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/snapsuggestion"
|
||||||
},
|
},
|
||||||
"WPFToggleMouseAcceleration": {
|
"WPFToggleMouseAcceleration": {
|
||||||
"Content": "Mouse Acceleration",
|
"Content": "Mouse Acceleration",
|
||||||
"Description": "If Enabled then Cursor movement is affected by the speed of your physical mouse movements.",
|
"Description": "If Enabled then Cursor movement is affected by the speed of your physical mouse movements.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a108_",
|
"Order": "a109_",
|
||||||
"Type": "Toggle",
|
"Type": "Toggle",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
@ -3524,14 +3541,14 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/MouseAcceleration"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/mouseacceleration"
|
||||||
},
|
},
|
||||||
"WPFToggleStickyKeys": {
|
"WPFToggleStickyKeys": {
|
||||||
"Content": "Sticky Keys",
|
"Content": "Sticky Keys",
|
||||||
"Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
|
"Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a109_",
|
"Order": "a110_",
|
||||||
"Type": "Toggle",
|
"Type": "Toggle",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
@ -3543,7 +3560,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/StickyKeys"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/stickykeys"
|
||||||
},
|
},
|
||||||
"WPFToggleHiddenFiles": {
|
"WPFToggleHiddenFiles": {
|
||||||
"Content": "Show Hidden Files",
|
"Content": "Show Hidden Files",
|
||||||
@ -3572,7 +3589,7 @@
|
|||||||
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/HiddenFiles"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/hiddenfiles"
|
||||||
},
|
},
|
||||||
"WPFToggleShowExt": {
|
"WPFToggleShowExt": {
|
||||||
"Content": "Show File Extensions",
|
"Content": "Show File Extensions",
|
||||||
@ -3601,7 +3618,7 @@
|
|||||||
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
Invoke-WinUtilExplorerUpdate -action \"restart\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/ShowExt"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/showext"
|
||||||
},
|
},
|
||||||
"WPFToggleTaskbarSearch": {
|
"WPFToggleTaskbarSearch": {
|
||||||
"Content": "Search Button in Taskbar",
|
"Content": "Search Button in Taskbar",
|
||||||
@ -3620,7 +3637,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarSearch"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbarsearch"
|
||||||
},
|
},
|
||||||
"WPFToggleTaskView": {
|
"WPFToggleTaskView": {
|
||||||
"Content": "Task View Button in Taskbar",
|
"Content": "Task View Button in Taskbar",
|
||||||
@ -3639,7 +3656,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskView"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskview"
|
||||||
},
|
},
|
||||||
"WPFToggleTaskbarWidgets": {
|
"WPFToggleTaskbarWidgets": {
|
||||||
"Content": "Widgets Button in Taskbar",
|
"Content": "Widgets Button in Taskbar",
|
||||||
@ -3658,7 +3675,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarWidgets"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbarwidgets"
|
||||||
},
|
},
|
||||||
"WPFToggleTaskbarAlignment": {
|
"WPFToggleTaskbarAlignment": {
|
||||||
"Content": "Center Taskbar Items",
|
"Content": "Center Taskbar Items",
|
||||||
@ -3677,7 +3694,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/TaskbarAlignment"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbaralignment"
|
||||||
},
|
},
|
||||||
"WPFToggleDetailedBSoD": {
|
"WPFToggleDetailedBSoD": {
|
||||||
"Content": "Detailed BSoD",
|
"Content": "Detailed BSoD",
|
||||||
@ -3704,7 +3721,7 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Customize-Preferences/DetailedBSoD"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/detailedbsod"
|
||||||
},
|
},
|
||||||
"WPFOOSUbutton": {
|
"WPFOOSUbutton": {
|
||||||
"Content": "Run OO Shutup 10",
|
"Content": "Run OO Shutup 10",
|
||||||
@ -3712,7 +3729,7 @@
|
|||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a039_",
|
"Order": "a039_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/OOSUbutton"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/oosubutton"
|
||||||
},
|
},
|
||||||
"WPFchangedns": {
|
"WPFchangedns": {
|
||||||
"Content": "DNS",
|
"Content": "DNS",
|
||||||
@ -3721,7 +3738,7 @@
|
|||||||
"Order": "a040_",
|
"Order": "a040_",
|
||||||
"Type": "Combobox",
|
"Type": "Combobox",
|
||||||
"ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult dns0.eu_Open dns0.eu_ZERO dns0.eu_KIDS",
|
"ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult dns0.eu_Open dns0.eu_ZERO dns0.eu_KIDS",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/changedns"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/changedns"
|
||||||
},
|
},
|
||||||
"WPFAddUltPerf": {
|
"WPFAddUltPerf": {
|
||||||
"Content": "Add and Activate Ultimate Performance Profile",
|
"Content": "Add and Activate Ultimate Performance Profile",
|
||||||
@ -3730,7 +3747,7 @@
|
|||||||
"Order": "a080_",
|
"Order": "a080_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/AddUltPerf"
|
"link": "https://winutil.christitus.com/dev/tweaks/performance-plans/addultperf"
|
||||||
},
|
},
|
||||||
"WPFRemoveUltPerf": {
|
"WPFRemoveUltPerf": {
|
||||||
"Content": "Remove Ultimate Performance Profile",
|
"Content": "Remove Ultimate Performance Profile",
|
||||||
@ -3739,6 +3756,61 @@
|
|||||||
"Order": "a081_",
|
"Order": "a081_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/RemoveUltPerf"
|
"link": "https://winutil.christitus.com/dev/tweaks/performance-plans/removeultperf"
|
||||||
|
},
|
||||||
|
"WPFTweaksDisableExplorerAutoDiscovery": {
|
||||||
|
"Content": "Disable Explorer Automatic Folder Discovery",
|
||||||
|
"Description": "Windows Explorer automatically tries to guess the type of the folder based on its contents, slowing down the browsing experience.",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a005_",
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
# Previously detected folders
|
||||||
|
$bags = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\Bags\"
|
||||||
|
|
||||||
|
# Folder types lookup table
|
||||||
|
$bagMRU = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\BagMRU\"
|
||||||
|
|
||||||
|
# Flush explorer view database
|
||||||
|
Remove-Item -Path $bags -Recurse -Force
|
||||||
|
Write-Host \"Removed $bags\"
|
||||||
|
|
||||||
|
Remove-Item -Path $bagMRU -Recurse -Force
|
||||||
|
Write-Host \"Removed $bagMRU\"
|
||||||
|
|
||||||
|
# Every folder
|
||||||
|
$allFolders = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\Bags\\AllFolders\\Shell\"
|
||||||
|
|
||||||
|
if (!(Test-Path $allFolders)) {
|
||||||
|
New-Item -Path $allFolders -Force
|
||||||
|
Write-Host \"Created $allFolders\"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generic view
|
||||||
|
New-ItemProperty -Path $allFolders -Name \"FolderType\" -Value \"NotSpecified\" -PropertyType String -Force
|
||||||
|
Write-Host \"Set FolderType to NotSpecified\"
|
||||||
|
|
||||||
|
Write-Host Please sign out and back in, or restart your computer to apply the changes!
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
# Previously detected folders
|
||||||
|
$bags = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\Bags\"
|
||||||
|
|
||||||
|
# Folder types lookup table
|
||||||
|
$bagMRU = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\BagMRU\"
|
||||||
|
|
||||||
|
# Flush explorer view database
|
||||||
|
Remove-Item -Path $bags -Recurse -Force
|
||||||
|
Write-Host \"Removed $bags\"
|
||||||
|
|
||||||
|
Remove-Item -Path $bagMRU -Recurse -Force
|
||||||
|
Write-Host \"Removed $bagMRU\"
|
||||||
|
|
||||||
|
Write-Host Please sign out and back in, or restart your computer to apply the changes!
|
||||||
|
"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,8 @@ public class PowerManagement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
# Do nothing
|
# Fall back to what we used to do: delayed disablement
|
||||||
|
Enable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName "Recall"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,6 +338,7 @@ public class PowerManagement {
|
|||||||
reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\SearchSettings" /v "IsDynamicSearchBoxEnabled" /t REG_DWORD /d 0 /f
|
reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\SearchSettings" /v "IsDynamicSearchBoxEnabled" /t REG_DWORD /d 0 /f
|
||||||
reg add "HKLM\zSOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f
|
reg add "HKLM\zSOFTWARE\Policies\Microsoft\Dsh" /v "AllowNewsAndInterests" /t REG_DWORD /d 0 /f
|
||||||
reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "TraySearchBoxVisible" /t REG_DWORD /d 1 /f
|
reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "TraySearchBoxVisible" /t REG_DWORD /d 1 /f
|
||||||
|
reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Feeds" /v "EnableFeeds" /t REG_DWORD /d 0 /f
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
|
@ -54,7 +54,7 @@ function Microwin-NewFirstRun {
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if ((Get-WindowsOptionalFeature -Online | Where-Object { $_.FeatureName -like "Recall" }).Count -gt 0)
|
if ((Get-WindowsOptionalFeature -Online | Where-Object { $_.State -eq 'Enabled' -and $_.FeatureName -like "Recall" }).Count -gt 0)
|
||||||
{
|
{
|
||||||
Disable-WindowsOptionalFeature -Online -FeatureName "Recall" -Remove
|
Disable-WindowsOptionalFeature -Online -FeatureName "Recall" -Remove
|
||||||
}
|
}
|
||||||
@ -79,6 +79,13 @@ function Microwin-NewFirstRun {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.Suggested" /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.Suggested" /v Enabled /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.StartupApp" /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.StartupApp" /v Enabled /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SkyDrive.Desktop" /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SkyDrive.Desktop" /v Enabled /t REG_DWORD /d 0 /f
|
||||||
|
|
||||||
'@
|
'@
|
||||||
$firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
|
$firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force
|
||||||
}
|
}
|
||||||
|
@ -160,134 +160,126 @@ function Microwin-NewUnattend {
|
|||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>19</Order>
|
<Order>19</Order>
|
||||||
<Path>powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\Microwin-RemovePackages.ps1' -Raw | Invoke-Expression;"</Path>
|
|
||||||
</RunSynchronousCommand>
|
|
||||||
<RunSynchronousCommand wcm:action="add">
|
|
||||||
<Order>20</Order>
|
|
||||||
<Path>powershell.exe -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Temp\remove-caps.ps1' -Raw | Invoke-Expression;"</Path>
|
|
||||||
</RunSynchronousCommand>
|
|
||||||
<RunSynchronousCommand wcm:action="add">
|
|
||||||
<Order>21</Order>
|
|
||||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f</Path>
|
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>22</Order>
|
<Order>20</Order>
|
||||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_ProviderSet /t REG_DWORD /d 1 /f</Path>
|
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_ProviderSet /t REG_DWORD /d 1 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>23</Order>
|
<Order>21</Order>
|
||||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_WinningProvider /t REG_SZ /d B5292708-1619-419B-9923-E5D9F3925E71 /f</Path>
|
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_WinningProvider /t REG_SZ /d B5292708-1619-419B-9923-E5D9F3925E71 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>24</Order>
|
<Order>22</Order>
|
||||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f</Path>
|
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>25</Order>
|
<Order>23</Order>
|
||||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins_LastWrite /t REG_DWORD /d 1 /f</Path>
|
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins_LastWrite /t REG_DWORD /d 1 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>26</Order>
|
<Order>24</Order>
|
||||||
<Path>net.exe accounts /maxpwage:UNLIMITED</Path>
|
<Path>net.exe accounts /maxpwage:UNLIMITED</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>27</Order>
|
<Order>25</Order>
|
||||||
<Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f</Path>
|
<Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>28</Order>
|
<Order>26</Order>
|
||||||
<Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>29</Order>
|
<Order>27</Order>
|
||||||
<Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v AllowNewsAndInterests /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Dsh" /v AllowNewsAndInterests /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>30</Order>
|
<Order>28</Order>
|
||||||
<Path>reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"</Path>
|
<Path>reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>31</Order>
|
<Order>29</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>32</Order>
|
<Order>30</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>33</Order>
|
<Order>31</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>34</Order>
|
<Order>32</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>35</Order>
|
<Order>33</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>36</Order>
|
<Order>34</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>37</Order>
|
<Order>35</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>38</Order>
|
<Order>36</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>39</Order>
|
<Order>37</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>40</Order>
|
<Order>38</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>41</Order>
|
<Order>39</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>42</Order>
|
<Order>40</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>43</Order>
|
<Order>41</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>44</Order>
|
<Order>42</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>45</Order>
|
<Order>43</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>46</Order>
|
<Order>44</Order>
|
||||||
<Path>reg.exe unload "HKU\DefaultUser"</Path>
|
<Path>reg.exe unload "HKU\DefaultUser"</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>47</Order>
|
<Order>45</Order>
|
||||||
<Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path>
|
<Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 0 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>48</Order>
|
<Order>46</Order>
|
||||||
<Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /v "PreventDeviceEncryption" /t REG_DWORD /d 1 /f</Path>
|
<Path>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /v "PreventDeviceEncryption" /t REG_DWORD /d 1 /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>49</Order>
|
<Order>47</Order>
|
||||||
<Path>reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"</Path>
|
<Path>reg.exe load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT"</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>50</Order>
|
<Order>48</Order>
|
||||||
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Runonce" /v "ClassicContextMenu" /t REG_SZ /d "reg.exe add \"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32\" /ve /f" /f</Path>
|
<Path>reg.exe add "HKU\DefaultUser\Software\Microsoft\Windows\CurrentVersion\Runonce" /v "ClassicContextMenu" /t REG_SZ /d "reg.exe add \"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32\" /ve /f" /f</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
<RunSynchronousCommand wcm:action="add">
|
<RunSynchronousCommand wcm:action="add">
|
||||||
<Order>51</Order>
|
<Order>49</Order>
|
||||||
<Path>reg.exe unload "HKU\DefaultUser"</Path>
|
<Path>reg.exe unload "HKU\DefaultUser"</Path>
|
||||||
</RunSynchronousCommand>
|
</RunSynchronousCommand>
|
||||||
</RunSynchronous>
|
</RunSynchronous>
|
||||||
|
@ -12,7 +12,11 @@ function Microwin-RemoveFileOrDirectory([string]$pathToDelete, [string]$mask = "
|
|||||||
[void]$itemsToDelete.Add($pathToDelete)
|
[void]$itemsToDelete.Add($pathToDelete)
|
||||||
} else {
|
} else {
|
||||||
Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)"
|
Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)"
|
||||||
if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory } else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse }
|
if ($Directory) {
|
||||||
|
$itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory
|
||||||
|
} else {
|
||||||
|
$itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($itemToDelete in $itemsToDelete) {
|
foreach($itemToDelete in $itemsToDelete) {
|
||||||
|
@ -90,7 +90,7 @@ function Microwin-RemovePackages {
|
|||||||
$status = "Removing package $package"
|
$status = "Removing package $package"
|
||||||
Write-Progress -Activity "Removing Packages" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
|
Write-Progress -Activity "Removing Packages" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
|
||||||
Write-Debug "Removing package $package"
|
Write-Debug "Removing package $package"
|
||||||
dism /english /image="$scratchDir" /remove-package /packagename=$package /remove /quiet /norestart | Out-Null
|
dism /english /image="$scratchDir" /remove-package /packagename=$package /quiet /norestart | Out-Null
|
||||||
if ($? -eq $false) {
|
if ($? -eq $false) {
|
||||||
Write-Host "Package $package could not be removed."
|
Write-Host "Package $package could not be removed."
|
||||||
}
|
}
|
||||||
|
104
functions/private/Find-TweaksByNameOrDescription.ps1
Normal file
104
functions/private/Find-TweaksByNameOrDescription.ps1
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
function Find-TweaksByNameOrDescription {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Searches through the Tweaks on the Tweaks Tab and hides all entries that do not match the search string
|
||||||
|
|
||||||
|
.PARAMETER SearchString
|
||||||
|
The string to be searched for
|
||||||
|
#>
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$false)]
|
||||||
|
[string]$SearchString = ""
|
||||||
|
)
|
||||||
|
|
||||||
|
# Reset the visibility if the search string is empty or the search is cleared
|
||||||
|
if ([string]::IsNullOrWhiteSpace($SearchString)) {
|
||||||
|
# Show all categories
|
||||||
|
$tweakspanel = $sync.Form.FindName("tweakspanel")
|
||||||
|
$tweakspanel.Children | ForEach-Object {
|
||||||
|
$_.Visibility = [Windows.Visibility]::Visible
|
||||||
|
|
||||||
|
# Foreach category section, show all items
|
||||||
|
if ($_ -is [Windows.Controls.Border]) {
|
||||||
|
$_.Visibility = [Windows.Visibility]::Visible
|
||||||
|
|
||||||
|
# Find ItemsControl
|
||||||
|
$dockPanel = $_.Child
|
||||||
|
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
||||||
|
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] }
|
||||||
|
if ($itemsControl) {
|
||||||
|
# Show items in the category
|
||||||
|
foreach ($item in $itemsControl.Items) {
|
||||||
|
if ($item -is [Windows.Controls.Label]) {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
} elseif ($item -is [Windows.Controls.DockPanel] -or
|
||||||
|
$item -is [Windows.Controls.StackPanel]) {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# Search for matching tweaks when search string is not null
|
||||||
|
$tweakspanel = $sync.Form.FindName("tweakspanel")
|
||||||
|
$matchFound = $false
|
||||||
|
|
||||||
|
$tweakspanel.Children | ForEach-Object {
|
||||||
|
$categoryBorder = $_
|
||||||
|
$categoryVisible = $false
|
||||||
|
|
||||||
|
if ($_ -is [Windows.Controls.Border]) {
|
||||||
|
# Find the ItemsControl
|
||||||
|
$dockPanel = $_.Child
|
||||||
|
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
||||||
|
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] }
|
||||||
|
if ($itemsControl) {
|
||||||
|
$categoryLabel = $null
|
||||||
|
|
||||||
|
# Process all items in the ItemsControl
|
||||||
|
for ($i = 0; $i -lt $itemsControl.Items.Count; $i++) {
|
||||||
|
$item = $itemsControl.Items[$i]
|
||||||
|
|
||||||
|
if ($item -is [Windows.Controls.Label]) {
|
||||||
|
$categoryLabel = $item
|
||||||
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
} elseif ($item -is [Windows.Controls.DockPanel]) {
|
||||||
|
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
||||||
|
$label = $item.Children | Where-Object { $_ -is [Windows.Controls.Label] } | Select-Object -First 1
|
||||||
|
|
||||||
|
if ($label -and ($label.Content -like "*$SearchString*" -or $label.ToolTip -like "*$SearchString*")) {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible }
|
||||||
|
$categoryVisible = $true
|
||||||
|
} else {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
} elseif ($item -is [Windows.Controls.StackPanel]) {
|
||||||
|
# StackPanel which contain checkboxes or other elements
|
||||||
|
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
||||||
|
|
||||||
|
if ($checkbox -and ($checkbox.Content -like "*$SearchString*" -or $checkbox.ToolTip -like "*$SearchString*")) {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible }
|
||||||
|
$categoryVisible = $true
|
||||||
|
} else {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set the visibility based on if any item matched
|
||||||
|
$categoryBorder.Visibility = if ($categoryVisible) { [Windows.Visibility]::Visible } else { [Windows.Visibility]::Collapsed }
|
||||||
|
|
||||||
|
if ($categoryVisible) {
|
||||||
|
$matchFound = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
59
functions/private/Get-WinUtilSelectedPackages.ps1
Normal file
59
functions/private/Get-WinUtilSelectedPackages.ps1
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
function Get-WinUtilSelectedPackages
|
||||||
|
{
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Sorts given packages based on installer preference and availability.
|
||||||
|
|
||||||
|
.OUTPUTS
|
||||||
|
Hashtable. Key = Package Manager, Value = ArrayList of packages to install
|
||||||
|
#>
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
$PackageList,
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[PackageManagers]$Preference
|
||||||
|
)
|
||||||
|
|
||||||
|
if ($PackageList.count -eq 1) {
|
||||||
|
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
|
||||||
|
} else {
|
||||||
|
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
|
||||||
|
}
|
||||||
|
|
||||||
|
$packages = [System.Collections.Hashtable]::new()
|
||||||
|
$packagesWinget = [System.Collections.ArrayList]::new()
|
||||||
|
$packagesChoco = [System.Collections.ArrayList]::new()
|
||||||
|
$packages[[PackageManagers]::Winget] = $packagesWinget
|
||||||
|
$packages[[PackageManagers]::Choco] = $packagesChoco
|
||||||
|
|
||||||
|
Write-Debug "Checking packages using Preference '$($Preference)'"
|
||||||
|
|
||||||
|
foreach ($package in $PackageList) {
|
||||||
|
switch ($Preference) {
|
||||||
|
"Choco" {
|
||||||
|
if ($package.choco -eq "na") {
|
||||||
|
Write-Debug "$($package.content) has no Choco value."
|
||||||
|
$packagesWinget.add($package.winget)
|
||||||
|
Write-Host "Queueing $($package.winget) for Winget"
|
||||||
|
} else {
|
||||||
|
$null = $packagesChoco.add($package.choco)
|
||||||
|
Write-Host "Queueing $($package.choco) for Chocolatey"
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"Winget" {
|
||||||
|
if ($package.winget -eq "na") {
|
||||||
|
Write-Debug "$($package.content) has no Winget value."
|
||||||
|
$packagesChoco.add($package.choco)
|
||||||
|
Write-Host "Queueing $($package.choco) for Chocolatey"
|
||||||
|
} else {
|
||||||
|
$null = $packagesWinget.add($($package.winget))
|
||||||
|
Write-Host "Queueing $($package.winget) for Winget"
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $packages
|
||||||
|
}
|
@ -5,28 +5,23 @@ function Initialize-InstallAppEntry {
|
|||||||
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
|
||||||
.PARAMETER AppKey
|
.PARAMETER appKey
|
||||||
The Key of the app inside the $sync.configs.applicationsHashtable
|
The Key of the app inside the $sync.configs.applicationsHashtable
|
||||||
#>
|
#>
|
||||||
param(
|
param(
|
||||||
[Windows.Controls.WrapPanel]$TargetElement,
|
[Windows.Controls.WrapPanel]$TargetElement,
|
||||||
$AppKey
|
$appKey
|
||||||
)
|
)
|
||||||
$App = $sync.configs.applicationsHashtable.$AppKey
|
|
||||||
# Create the outer Border for the application type
|
# Create the outer Border for the application type
|
||||||
$border = New-Object Windows.Controls.Border
|
$border = New-Object Windows.Controls.Border
|
||||||
$border.BorderBrush = [Windows.Media.Brushes]::Gray
|
$border.Style = $sync.Form.Resources.AppTileBorderStyle
|
||||||
$border.SetResourceReference([Windows.Controls.Control]::BorderThicknessProperty, "AppTileBorderThickness")
|
$border.Tag = $appKey
|
||||||
$border.CornerRadius = 5
|
$border.ToolTip = $Apps.$appKey.description
|
||||||
$border.SetResourceReference([Windows.Controls.Control]::PaddingProperty, "AppTileMargins")
|
|
||||||
$border.SetResourceReference([Windows.Controls.Control]::WidthProperty, "AppTileWidth")
|
|
||||||
$border.VerticalAlignment = "Top"
|
|
||||||
$border.SetResourceReference([Windows.Controls.Control]::MarginProperty, "AppTileMargins")
|
|
||||||
$border.Cursor = [System.Windows.Input.Cursors]::Hand
|
|
||||||
$border.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallUnselectedColor")
|
|
||||||
$border.Tag = $Appkey
|
|
||||||
$border.ToolTip = $App.description
|
|
||||||
$border.Add_MouseUp({
|
$border.Add_MouseUp({
|
||||||
|
if ($_.ChangedButton -eq [System.Windows.Input.MouseButton]::Right) {
|
||||||
|
Invoke-WPFPresets -imported $true -checkboxfilterpattern "WPFInstall*";
|
||||||
|
}
|
||||||
$childCheckbox = ($this.Child.Children | Where-Object {$_.Template.TargetType -eq [System.Windows.Controls.Checkbox]})[0]
|
$childCheckbox = ($this.Child.Children | Where-Object {$_.Template.TargetType -eq [System.Windows.Controls.Checkbox]})[0]
|
||||||
$childCheckBox.isChecked = -not $childCheckbox.IsChecked
|
$childCheckBox.isChecked = -not $childCheckbox.IsChecked
|
||||||
})
|
})
|
||||||
@ -47,12 +42,8 @@ function Initialize-InstallAppEntry {
|
|||||||
|
|
||||||
# Create the CheckBox, vertically centered
|
# Create the CheckBox, vertically centered
|
||||||
$checkBox = New-Object Windows.Controls.CheckBox
|
$checkBox = New-Object Windows.Controls.CheckBox
|
||||||
$checkBox.Name = $AppKey
|
$checkBox.Name = $appKey
|
||||||
$checkBox.Background = "Transparent"
|
$checkbox.Style = $sync.Form.Resources.AppTileCheckboxStyle
|
||||||
$checkBox.HorizontalAlignment = "Left"
|
|
||||||
$checkBox.VerticalAlignment = "Center"
|
|
||||||
$checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "AppTileMargins")
|
|
||||||
$checkBox.SetResourceReference([Windows.Controls.Control]::StyleProperty, "CollapsedCheckBoxStyle")
|
|
||||||
$checkbox.Add_Checked({
|
$checkbox.Add_Checked({
|
||||||
Invoke-WPFSelectedAppsUpdate -type "Add" -checkbox $this
|
Invoke-WPFSelectedAppsUpdate -type "Add" -checkbox $this
|
||||||
$borderElement = $this.Parent.Parent
|
$borderElement = $this.Parent.Parent
|
||||||
@ -64,7 +55,7 @@ function Initialize-InstallAppEntry {
|
|||||||
$borderElement = $this.Parent.Parent
|
$borderElement = $this.Parent.Parent
|
||||||
$borderElement.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallUnselectedColor")
|
$borderElement.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallUnselectedColor")
|
||||||
})
|
})
|
||||||
$sync.$($checkBox.Name) = $checkBox
|
|
||||||
# Create a StackPanel for the image and name
|
# Create a StackPanel for the image and name
|
||||||
$imageAndNamePanel = New-Object Windows.Controls.StackPanel
|
$imageAndNamePanel = New-Object Windows.Controls.StackPanel
|
||||||
$imageAndNamePanel.Orientation = "Horizontal"
|
$imageAndNamePanel.Orientation = "Horizontal"
|
||||||
@ -73,29 +64,15 @@ function Initialize-InstallAppEntry {
|
|||||||
# Create the Image and set a placeholder
|
# Create the Image and set a placeholder
|
||||||
$image = New-Object Windows.Controls.Image
|
$image = New-Object Windows.Controls.Image
|
||||||
# $image.Name = "wpfapplogo" + $App.Name
|
# $image.Name = "wpfapplogo" + $App.Name
|
||||||
$image.Width = 40
|
$image.Style = $sync.Form.Resources.AppTileImageStyle
|
||||||
$image.Height = 40
|
|
||||||
$image.Margin = New-Object Windows.Thickness(0, 0, 10, 0)
|
|
||||||
$image.Source = $noimage # Ensure $noimage is defined in your script
|
$image.Source = $noimage # Ensure $noimage is defined in your script
|
||||||
|
|
||||||
# Clip the image corners
|
|
||||||
$image.Clip = New-Object Windows.Media.RectangleGeometry
|
|
||||||
$image.Clip.Rect = New-Object Windows.Rect(0, 0, $image.Width, $image.Height)
|
|
||||||
$image.Clip.RadiusX = 5
|
|
||||||
$image.Clip.RadiusY = 5
|
|
||||||
$image.SetResourceReference([Windows.Controls.Control]::VisibilityProperty, "AppTileCompactVisibility")
|
|
||||||
|
|
||||||
$imageAndNamePanel.Children.Add($image) | Out-Null
|
$imageAndNamePanel.Children.Add($image) | Out-Null
|
||||||
|
|
||||||
# Create the TextBlock for the application name
|
# Create the TextBlock for the application name
|
||||||
$appName = New-Object Windows.Controls.TextBlock
|
$appName = New-Object Windows.Controls.TextBlock
|
||||||
$appName.Text = $App.Content
|
$appName.Style = $sync.Form.Resources.AppTileNameStyle
|
||||||
$appName.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "AppTileFontSize")
|
$appName.Text = $Apps.$appKey.content
|
||||||
$appName.FontWeight = [Windows.FontWeights]::Bold
|
|
||||||
$appName.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
|
||||||
$appName.VerticalAlignment = "Center"
|
|
||||||
$appName.SetResourceReference([Windows.Controls.Control]::MarginProperty, "AppTileMargins")
|
|
||||||
$appName.Background = "Transparent"
|
|
||||||
$imageAndNamePanel.Children.Add($appName) | Out-Null
|
$imageAndNamePanel.Children.Add($appName) | Out-Null
|
||||||
|
|
||||||
# Add the image and name panel to the Checkbox
|
# Add the image and name panel to the Checkbox
|
||||||
@ -107,91 +84,53 @@ function Initialize-InstallAppEntry {
|
|||||||
|
|
||||||
# Create the StackPanel for the buttons and dock it to the right
|
# Create the StackPanel for the buttons and dock it to the right
|
||||||
$buttonPanel = New-Object Windows.Controls.StackPanel
|
$buttonPanel = New-Object Windows.Controls.StackPanel
|
||||||
$buttonPanel.Orientation = "Horizontal"
|
$buttonPanel.Style = $sync.Form.Resources.AppTileButtonPanelStyle
|
||||||
$buttonPanel.HorizontalAlignment = "Right"
|
|
||||||
$buttonPanel.VerticalAlignment = "Center"
|
|
||||||
$buttonPanel.SetResourceReference([Windows.Controls.Control]::MarginProperty, "AppTileMargins")
|
|
||||||
$buttonPanel.SetResourceReference([Windows.Controls.Control]::VisibilityProperty, "AppTileCompactVisibility")
|
|
||||||
[Windows.Controls.DockPanel]::SetDock($buttonPanel, [Windows.Controls.Dock]::Right)
|
[Windows.Controls.DockPanel]::SetDock($buttonPanel, [Windows.Controls.Dock]::Right)
|
||||||
|
|
||||||
# Create the "Install" button
|
# Define the button properties
|
||||||
$installButton = New-Object Windows.Controls.Button
|
$buttons = @(
|
||||||
$installButton.Width = 45
|
[PSCustomObject]@{ Name = "Install"; Description = "Install or Upgrade the application"; Tooltip = "Install or Upgrade the application"; Icon = [char]0xE118 },
|
||||||
$installButton.Height = 35
|
[PSCustomObject]@{ Name = "Uninstall"; Description = "Uninstall the application"; Tooltip = "Uninstall the application"; Icon = [char]0xE74D },
|
||||||
$installButton.Margin = New-Object Windows.Thickness(0, 0, 10, 0)
|
[PSCustomObject]@{ Name = "Info"; Description = "Open the application's website in your default browser"; Tooltip = "Open the application's website in your default browser"; Icon = [char]0xE946 }
|
||||||
|
)
|
||||||
|
|
||||||
$installIcon = New-Object Windows.Controls.TextBlock
|
# Iterate over each button and create it
|
||||||
$installIcon.Text = [char]0xE118 # Install Icon
|
foreach ($button in $buttons) {
|
||||||
$installIcon.FontFamily = "Segoe MDL2 Assets"
|
$newButton = New-Object Windows.Controls.Button
|
||||||
$installIcon.FontSize = 20
|
$newButton.Style = $sync.Form.Resources.AppTileButtonStyle
|
||||||
$installIcon.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
$newButton.Content = $button.Icon
|
||||||
$installIcon.Background = "Transparent"
|
$newButton.ToolTip = $button.Tooltip
|
||||||
$installIcon.HorizontalAlignment = "Center"
|
$buttonPanel.Children.Add($newButton) | Out-Null
|
||||||
$installIcon.VerticalAlignment = "Center"
|
|
||||||
|
|
||||||
$installButton.Content = $installIcon
|
switch ($button.Name) {
|
||||||
$installButton.ToolTip = "Install or Upgrade the application"
|
"Install" {
|
||||||
$buttonPanel.Children.Add($installButton) | Out-Null
|
$newButton.Add_Click({
|
||||||
|
|
||||||
# Add Click event for the "Install" button
|
|
||||||
$installButton.Add_Click({
|
|
||||||
$appKey = $this.Parent.Parent.Parent.Tag
|
$appKey = $this.Parent.Parent.Parent.Tag
|
||||||
$appObject = $sync.configs.applicationsHashtable.$appKey
|
$appObject = $sync.configs.applicationsHashtable.$appKey
|
||||||
Invoke-WPFInstall -PackagesToInstall $appObject
|
Invoke-WPFInstall -PackagesToInstall $appObject
|
||||||
})
|
})
|
||||||
|
}
|
||||||
# Create the "Uninstall" button
|
"Uninstall" {
|
||||||
$uninstallButton = New-Object Windows.Controls.Button
|
$newButton.Add_Click({
|
||||||
$uninstallButton.Width = 45
|
|
||||||
$uninstallButton.Height = 35
|
|
||||||
|
|
||||||
$uninstallIcon = New-Object Windows.Controls.TextBlock
|
|
||||||
$uninstallIcon.Text = [char]0xE74D # Uninstall Icon
|
|
||||||
$uninstallIcon.FontFamily = "Segoe MDL2 Assets"
|
|
||||||
$uninstallIcon.FontSize = 20
|
|
||||||
$uninstallIcon.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
|
||||||
$uninstallIcon.Background = "Transparent"
|
|
||||||
$uninstallIcon.HorizontalAlignment = "Center"
|
|
||||||
$uninstallIcon.VerticalAlignment = "Center"
|
|
||||||
|
|
||||||
$uninstallButton.Content = $uninstallIcon
|
|
||||||
$buttonPanel.Children.Add($uninstallButton) | Out-Null
|
|
||||||
|
|
||||||
$uninstallButton.ToolTip = "Uninstall the application"
|
|
||||||
$uninstallButton.Add_Click({
|
|
||||||
$appKey = $this.Parent.Parent.Parent.Tag
|
$appKey = $this.Parent.Parent.Parent.Tag
|
||||||
$appObject = $sync.configs.applicationsHashtable.$appKey
|
$appObject = $sync.configs.applicationsHashtable.$appKey
|
||||||
Invoke-WPFUnInstall -PackagesToUninstall $appObject
|
Invoke-WPFUnInstall -PackagesToUninstall $appObject
|
||||||
})
|
})
|
||||||
|
}
|
||||||
# Create the "Info" button
|
"Info" {
|
||||||
$infoButton = New-Object Windows.Controls.Button
|
$newButton.Add_Click({
|
||||||
$infoButton.Width = 45
|
|
||||||
$infoButton.Height = 35
|
|
||||||
$infoButton.Margin = New-Object Windows.Thickness(10, 0, 0, 0)
|
|
||||||
|
|
||||||
$infoIcon = New-Object Windows.Controls.TextBlock
|
|
||||||
$infoIcon.Text = [char]0xE946 # Info Icon
|
|
||||||
$infoIcon.FontFamily = "Segoe MDL2 Assets"
|
|
||||||
$infoIcon.FontSize = 20
|
|
||||||
$infoIcon.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
|
||||||
$infoIcon.Background = "Transparent"
|
|
||||||
$infoIcon.HorizontalAlignment = "Center"
|
|
||||||
$infoIcon.VerticalAlignment = "Center"
|
|
||||||
|
|
||||||
$infoButton.Content = $infoIcon
|
|
||||||
$infoButton.ToolTip = "Open the application's website in your default browser"
|
|
||||||
$buttonPanel.Children.Add($infoButton) | Out-Null
|
|
||||||
|
|
||||||
$infoButton.Add_Click({
|
|
||||||
$appKey = $this.Parent.Parent.Parent.Tag
|
$appKey = $this.Parent.Parent.Parent.Tag
|
||||||
$appObject = $sync.configs.applicationsHashtable.$appKey
|
$appObject = $sync.configs.applicationsHashtable.$appKey
|
||||||
Start-Process $appObject.link
|
Start-Process $appObject.link
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Add the button panel to the DockPanel
|
# Add the button panel to the DockPanel
|
||||||
$dockPanel.Children.Add($buttonPanel) | Out-Null
|
$dockPanel.Children.Add($buttonPanel) | Out-Null
|
||||||
|
|
||||||
# Add the border to the corresponding Category
|
# Add the border to the corresponding Category
|
||||||
$TargetElement.Children.Add($border) | Out-Null
|
$TargetElement.Children.Add($border) | Out-Null
|
||||||
|
return $checkbox
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ function Initialize-InstallCategoryAppList {
|
|||||||
$loadingLabel.Content = "Loading, please wait..."
|
$loadingLabel.Content = "Loading, please wait..."
|
||||||
$loadingLabel.HorizontalAlignment = "Center"
|
$loadingLabel.HorizontalAlignment = "Center"
|
||||||
$loadingLabel.VerticalAlignment = "Center"
|
$loadingLabel.VerticalAlignment = "Center"
|
||||||
$loadingLabel.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSizeHeading")
|
$loadingLabel.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize")
|
||||||
$loadingLabel.FontWeight = [Windows.FontWeights]::Bold
|
$loadingLabel.FontWeight = [Windows.FontWeights]::Bold
|
||||||
$loadingLabel.Foreground = [Windows.Media.Brushes]::Gray
|
$loadingLabel.Foreground = [Windows.Media.Brushes]::Gray
|
||||||
$sync.LoadingLabel = $loadingLabel
|
$sync.LoadingLabel = $loadingLabel
|
||||||
@ -53,8 +53,17 @@ function Initialize-InstallCategoryAppList {
|
|||||||
$TargetElement.Dispatcher.Invoke([System.Windows.Threading.DispatcherPriority]::Background, [action]{
|
$TargetElement.Dispatcher.Invoke([System.Windows.Threading.DispatcherPriority]::Background, [action]{
|
||||||
|
|
||||||
$TargetElement.Items.Clear() # Remove the loading message
|
$TargetElement.Items.Clear() # Remove the loading message
|
||||||
$categories = $Apps.Values | Select-Object -ExpandProperty category -Unique | Sort-Object
|
|
||||||
foreach ($category in $categories) {
|
# Pre-group apps by category
|
||||||
|
$appsByCategory = @{}
|
||||||
|
foreach ($appKey in $Apps.Keys) {
|
||||||
|
$category = $Apps.$appKey.Category
|
||||||
|
if (-not $appsByCategory.ContainsKey($category)) {
|
||||||
|
$appsByCategory[$category] = @()
|
||||||
|
}
|
||||||
|
$appsByCategory[$category] += $appKey
|
||||||
|
}
|
||||||
|
foreach ($category in $($appsByCategory.Keys | Sort-Object)) {
|
||||||
Add-Category -Category $category -TargetElement $TargetElement
|
Add-Category -Category $category -TargetElement $TargetElement
|
||||||
$wrapPanel = New-Object Windows.Controls.WrapPanel
|
$wrapPanel = New-Object Windows.Controls.WrapPanel
|
||||||
$wrapPanel.Orientation = "Horizontal"
|
$wrapPanel.Orientation = "Horizontal"
|
||||||
@ -64,8 +73,8 @@ function Initialize-InstallCategoryAppList {
|
|||||||
$wrapPanel.Visibility = [Windows.Visibility]::Collapsed
|
$wrapPanel.Visibility = [Windows.Visibility]::Collapsed
|
||||||
$wrapPanel.Tag = "CategoryWrapPanel_$category"
|
$wrapPanel.Tag = "CategoryWrapPanel_$category"
|
||||||
$null = $TargetElement.Items.Add($wrapPanel)
|
$null = $TargetElement.Items.Add($wrapPanel)
|
||||||
$Apps.Keys | Where-Object { $Apps.$_.Category -eq $category } | Sort-Object | ForEach-Object {
|
$appsByCategory[$category] |Sort-Object | ForEach-Object {
|
||||||
Initialize-InstallAppEntry -TargetElement $wrapPanel -AppKey $_
|
$sync.$_ = $(Initialize-InstallAppEntry -TargetElement $wrapPanel -AppKey $_)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -29,7 +29,8 @@ function Initialize-InstallHeader {
|
|||||||
$buttonConfigs = @(
|
$buttonConfigs = @(
|
||||||
@{Name="WPFInstall"; Content="Install/Upgrade Selected"},
|
@{Name="WPFInstall"; Content="Install/Upgrade Selected"},
|
||||||
@{Name="WPFInstallUpgrade"; Content="Upgrade All"},
|
@{Name="WPFInstallUpgrade"; Content="Upgrade All"},
|
||||||
@{Name="WPFUninstall"; Content="Uninstall Selected"}
|
@{Name="WPFUninstall"; Content="Uninstall Selected"},
|
||||||
|
@{Name="WPFselectedAppsButton"; Content="Selected Apps: 0"}
|
||||||
)
|
)
|
||||||
|
|
||||||
foreach ($config in $buttonConfigs) {
|
foreach ($config in $buttonConfigs) {
|
||||||
@ -38,18 +39,9 @@ function Initialize-InstallHeader {
|
|||||||
$sync[$config.Name] = $button
|
$sync[$config.Name] = $button
|
||||||
}
|
}
|
||||||
|
|
||||||
$selectedAppsButton = New-Object Windows.Controls.Button
|
|
||||||
$selectedAppsButton.Name = "WPFselectedAppsButton"
|
|
||||||
$selectedAppsButton.Content = "Selected Apps: 0"
|
|
||||||
$selectedAppsButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSizeHeading")
|
|
||||||
$selectedAppsButton.SetResourceReference([Windows.Controls.Control]::MarginProperty, "TabContentMargin")
|
|
||||||
$selectedAppsButton.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
|
||||||
$selectedAppsButton.HorizontalAlignment = "Center"
|
|
||||||
$selectedAppsButton.VerticalAlignment = "Center"
|
|
||||||
|
|
||||||
$selectedAppsPopup = New-Object Windows.Controls.Primitives.Popup
|
$selectedAppsPopup = New-Object Windows.Controls.Primitives.Popup
|
||||||
$selectedAppsPopup.IsOpen = $false
|
$selectedAppsPopup.IsOpen = $false
|
||||||
$selectedAppsPopup.PlacementTarget = $selectedAppsButton
|
$selectedAppsPopup.PlacementTarget = $sync.WPFselectedAppsButton
|
||||||
$selectedAppsPopup.Placement = [System.Windows.Controls.Primitives.PlacementMode]::Bottom
|
$selectedAppsPopup.Placement = [System.Windows.Controls.Primitives.PlacementMode]::Bottom
|
||||||
$selectedAppsPopup.AllowsTransparency = $true
|
$selectedAppsPopup.AllowsTransparency = $true
|
||||||
|
|
||||||
@ -66,24 +58,21 @@ function Initialize-InstallHeader {
|
|||||||
$selectedAppsBorder.Child = $sync.selectedAppsstackPanel
|
$selectedAppsBorder.Child = $sync.selectedAppsstackPanel
|
||||||
|
|
||||||
# Toggle selectedAppsPopup open/close with button
|
# Toggle selectedAppsPopup open/close with button
|
||||||
$selectedAppsButton.Add_Click({
|
$sync.WPFselectedAppsButton.Add_Click({
|
||||||
$sync.selectedAppsPopup.IsOpen = -not $sync.selectedAppsPopup.IsOpen
|
$sync.selectedAppsPopup.IsOpen = -not $sync.selectedAppsPopup.IsOpen
|
||||||
})
|
})
|
||||||
# Close selectedAppsPopup when mouse leaves both button and selectedAppsPopup
|
# Close selectedAppsPopup when mouse leaves both button and selectedAppsPopup
|
||||||
$selectedAppsButton.Add_MouseLeave({
|
$sync.WPFselectedAppsButton.Add_MouseLeave({
|
||||||
if (-not $sync.selectedAppsPopup.IsMouseOver) {
|
if (-not $sync.selectedAppsPopup.IsMouseOver) {
|
||||||
$sync.selectedAppsPopup.IsOpen = $false
|
$sync.selectedAppsPopup.IsOpen = $false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
$selectedAppsPopup.Add_MouseLeave({
|
$selectedAppsPopup.Add_MouseLeave({
|
||||||
if (-not $selectedAppsButton.IsMouseOver) {
|
if (-not $sync.WPFselectedAppsButton.IsMouseOver) {
|
||||||
$sync.selectedAppsPopup.IsOpen = $false
|
$sync.selectedAppsPopup.IsOpen = $false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$null = $wrapPanelTop.Children.Add($selectedAppsButton)
|
|
||||||
$sync.$($selectedAppsButton.Name) = $selectedAppsButton
|
|
||||||
|
|
||||||
[Windows.Controls.DockPanel]::SetDock($wrapPanelTop, [Windows.Controls.Dock]::Top)
|
[Windows.Controls.DockPanel]::SetDock($wrapPanelTop, [Windows.Controls.Dock]::Top)
|
||||||
$null = $TargetElement.Children.Add($wrapPanelTop)
|
$null = $TargetElement.Children.Add($wrapPanelTop)
|
||||||
}
|
}
|
||||||
|
43
functions/private/Set-PackageManagerPreference.ps1
Normal file
43
functions/private/Set-PackageManagerPreference.ps1
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
function Set-PackageManagerPreference {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Sets the currently selected package manager to global "ManagerPreference" in sync.
|
||||||
|
Also persists preference across Winutil restarts via preference.ini.
|
||||||
|
|
||||||
|
Reads from preference.ini if no argument sent.
|
||||||
|
|
||||||
|
.PARAMETER preferedPackageManager
|
||||||
|
The PackageManager that was selected.
|
||||||
|
#>
|
||||||
|
param(
|
||||||
|
[Parameter(Position=0, Mandatory=$false)]
|
||||||
|
[PackageManagers]$preferedPackageManager
|
||||||
|
)
|
||||||
|
|
||||||
|
$preferencePath = "$env:LOCALAPPDATA\winutil\preferences.ini"
|
||||||
|
$oldChocoPath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini"
|
||||||
|
|
||||||
|
#Try loading from file if no argument given.
|
||||||
|
if ($null -eq $preferedPackageManager) {
|
||||||
|
# Backwards compat for preferChocolatey.ini
|
||||||
|
if (Test-Path -Path $oldChocoPath) {
|
||||||
|
$preferedPackageManager = [PackageManagers]::Choco
|
||||||
|
Remove-Item -Path $oldChocoPath
|
||||||
|
}
|
||||||
|
elseif (Test-Path -Path $preferencePath) {
|
||||||
|
$potential = Get-Content -Path $preferencePath -TotalCount 1
|
||||||
|
$preferedPackageManager = [PackageManagers]$potential
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Debug "Creating new preference file, defaulting to winget."
|
||||||
|
$preferedPackageManager = [PackageManagers]::Winget
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$sync["ManagerPreference"] = [PackageManagers]::$preferedPackageManager
|
||||||
|
Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'"
|
||||||
|
|
||||||
|
|
||||||
|
# Write preference to file to persist across restarts.
|
||||||
|
Out-File -FilePath $preferencePath -InputObject $sync["ManagerPreference"]
|
||||||
|
}
|
@ -56,7 +56,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
|
$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
|
||||||
Write-Host "Current Installed Version: $wingetCurrentVersion" -ForegroundColor White
|
Write-Host "Current Installed Version: $wingetCurrentVersion" -ForegroundColor White
|
||||||
|
@ -34,7 +34,7 @@ function Invoke-WPFButton {
|
|||||||
"WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disable"}
|
"WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disable"}
|
||||||
"WPFundoall" {Invoke-WPFundoall}
|
"WPFundoall" {Invoke-WPFundoall}
|
||||||
"WPFFeatureInstall" {Invoke-WPFFeatureInstall}
|
"WPFFeatureInstall" {Invoke-WPFFeatureInstall}
|
||||||
"WPFPanelDISM" {Invoke-WPFPanelDISM}
|
"WPFPanelDISM" {Invoke-WPFSystemRepair}
|
||||||
"WPFPanelAutologin" {Invoke-WPFPanelAutologin}
|
"WPFPanelAutologin" {Invoke-WPFPanelAutologin}
|
||||||
"WPFPanelcontrol" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelcontrol" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelnetwork" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelnetwork" {Invoke-WPFControlPanel -Panel $button}
|
||||||
@ -44,6 +44,7 @@ function Invoke-WPFButton {
|
|||||||
"WPFPanelprinter" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelprinter" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPanelsystem" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPanelsystem" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFPaneluser" {Invoke-WPFControlPanel -Panel $button}
|
"WPFPaneluser" {Invoke-WPFControlPanel -Panel $button}
|
||||||
|
"WPFPanelGodMode" {Invoke-WPFControlPanel -Panel $button}
|
||||||
"WPFUpdatesdefault" {Invoke-WPFFixesUpdate}
|
"WPFUpdatesdefault" {Invoke-WPFFixesUpdate}
|
||||||
"WPFFixesUpdate" {Invoke-WPFFixesUpdate}
|
"WPFFixesUpdate" {Invoke-WPFFixesUpdate}
|
||||||
"WPFFixesWinget" {Invoke-WPFFixesWinget}
|
"WPFFixesWinget" {Invoke-WPFFixesWinget}
|
||||||
|
@ -19,5 +19,6 @@ function Invoke-WPFControlPanel {
|
|||||||
"WPFPanelprinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"}
|
"WPFPanelprinter" {Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}"}
|
||||||
"WPFPanelsystem" {cmd /c sysdm.cpl}
|
"WPFPanelsystem" {cmd /c sysdm.cpl}
|
||||||
"WPFPaneluser" {cmd /c "control userpasswords2"}
|
"WPFPaneluser" {cmd /c "control userpasswords2"}
|
||||||
|
"WPFPanelGodMode" {Start-Process "shell:::{ED7BA470-8E54-465E-825C-99712043E01C}"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,19 +6,7 @@ function Invoke-WPFFixesUpdate {
|
|||||||
Performs various tasks in an attempt to repair Windows Update
|
Performs various tasks in an attempt to repair Windows Update
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
1. (Aggressive Only) Scans the system for corruption using chkdsk, SFC, and DISM
|
1. (Aggressive Only) Scans the system for corruption using the Invoke-WPFSystemRepair function
|
||||||
Steps:
|
|
||||||
1. Runs chkdsk /scan /perf
|
|
||||||
/scan - Runs an online scan on the volume
|
|
||||||
/perf - Uses more system resources to complete a scan as fast as possible
|
|
||||||
2. Runs SFC /scannow
|
|
||||||
/scannow - Scans integrity of all protected system files and repairs files with problems when possible
|
|
||||||
3. Runs DISM /Online /Cleanup-Image /RestoreHealth
|
|
||||||
/Online - Targets the running operating system
|
|
||||||
/Cleanup-Image - Performs cleanup and recovery operations on the image
|
|
||||||
/RestoreHealth - Scans the image for component store corruption and attempts to repair the corruption using Windows Update
|
|
||||||
4. Runs SFC /scannow
|
|
||||||
Ran twice in case DISM repaired SFC
|
|
||||||
2. Stops Windows Update Services
|
2. Stops Windows Update Services
|
||||||
3. Remove the QMGR Data file, which stores BITS jobs
|
3. Remove the QMGR Data file, which stores BITS jobs
|
||||||
4. (Aggressive Only) Renames the DataStore and CatRoot2 folders
|
4. (Aggressive Only) Renames the DataStore and CatRoot2 folders
|
||||||
@ -46,104 +34,7 @@ function Invoke-WPFFixesUpdate {
|
|||||||
Start-Sleep -Milliseconds 200
|
Start-Sleep -Milliseconds 200
|
||||||
|
|
||||||
if ($Aggressive) {
|
if ($Aggressive) {
|
||||||
# Scan system for corruption
|
Invoke-WPFSystemRepair
|
||||||
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Scanning for corruption..." -PercentComplete 0
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk..." -PercentComplete 0
|
|
||||||
# 2>&1 redirects stdout, alowing iteration over the output
|
|
||||||
chkdsk.exe /scan /perf 2>&1 | ForEach-Object {
|
|
||||||
# Write stdout to the Verbose stream
|
|
||||||
Write-Verbose $_
|
|
||||||
|
|
||||||
# Get the index of the total percentage
|
|
||||||
$index = $_.IndexOf("Total:")
|
|
||||||
if (
|
|
||||||
# If the percent is found
|
|
||||||
($percent = try {(
|
|
||||||
$_.Substring(
|
|
||||||
$index + 6,
|
|
||||||
$_.IndexOf("%", $index) - $index - 6
|
|
||||||
)
|
|
||||||
).Trim()} catch {0}) `
|
|
||||||
<# And the current percentage is greater than the previous one #>`
|
|
||||||
-and $percent -gt $oldpercent
|
|
||||||
) {
|
|
||||||
# Update the progress bar
|
|
||||||
$oldpercent = $percent
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk... ($percent%)" -PercentComplete $percent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC..." -PercentComplete 0
|
|
||||||
$oldpercent = 0
|
|
||||||
# SFC has a bug when redirected which causes it to output only when the stdout buffer is full, causing the progress bar to move in chunks
|
|
||||||
sfc /scannow 2>&1 | ForEach-Object {
|
|
||||||
# Write stdout to the Verbose stream
|
|
||||||
Write-Verbose $_
|
|
||||||
|
|
||||||
# Filter for lines that contain a percentage that is greater than the previous one
|
|
||||||
if (
|
|
||||||
(
|
|
||||||
# Use a different method to get the percentage that accounts for SFC's Unicode output
|
|
||||||
[int]$percent = try {(
|
|
||||||
(
|
|
||||||
$_.Substring(
|
|
||||||
$_.IndexOf("n") + 2,
|
|
||||||
$_.IndexOf("%") - $_.IndexOf("n") - 2
|
|
||||||
).ToCharArray() | Where-Object {$_}
|
|
||||||
) -join ''
|
|
||||||
).TrimStart()} catch {0}
|
|
||||||
) -and $percent -gt $oldpercent
|
|
||||||
) {
|
|
||||||
# Update the progress bar
|
|
||||||
$oldpercent = $percent
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM..." -PercentComplete 0
|
|
||||||
$oldpercent = 0
|
|
||||||
DISM /Online /Cleanup-Image /RestoreHealth | ForEach-Object {
|
|
||||||
# Write stdout to the Verbose stream
|
|
||||||
Write-Verbose $_
|
|
||||||
|
|
||||||
# Filter for lines that contain a percentage that is greater than the previous one
|
|
||||||
if (
|
|
||||||
($percent = try {
|
|
||||||
[int]($_ -replace "\[" -replace "=" -replace " " -replace "%" -replace "\]")
|
|
||||||
} catch {0}) `
|
|
||||||
-and $percent -gt $oldpercent
|
|
||||||
) {
|
|
||||||
# Update the progress bar
|
|
||||||
$oldpercent = $percent
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM... ($percent%)" -PercentComplete $percent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC again..." -PercentComplete 0
|
|
||||||
$oldpercent = 0
|
|
||||||
sfc /scannow 2>&1 | ForEach-Object {
|
|
||||||
# Write stdout to the Verbose stream
|
|
||||||
Write-Verbose $_
|
|
||||||
|
|
||||||
# Filter for lines that contain a percentage that is greater than the previous one
|
|
||||||
if (
|
|
||||||
(
|
|
||||||
[int]$percent = try {(
|
|
||||||
(
|
|
||||||
$_.Substring(
|
|
||||||
$_.IndexOf("n") + 2,
|
|
||||||
$_.IndexOf("%") - $_.IndexOf("n") - 2
|
|
||||||
).ToCharArray() | Where-Object {$_}
|
|
||||||
) -join ''
|
|
||||||
).TrimStart()} catch {0}
|
|
||||||
) -and $percent -gt $oldpercent
|
|
||||||
) {
|
|
||||||
# Update the progress bar
|
|
||||||
$oldpercent = $percent
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Completed" -PercentComplete 100
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
Function Invoke-WPFFormVariables {
|
|
||||||
<#
|
|
||||||
|
|
||||||
.SYNOPSIS
|
|
||||||
Prints the logo
|
|
||||||
|
|
||||||
#>
|
|
||||||
#If ($global:ReadmeDisplay -ne $true) { Write-Host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow; $global:ReadmeDisplay = $true }
|
|
||||||
|
|
||||||
|
|
||||||
Write-Host ""
|
|
||||||
Write-Host " CCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT "
|
|
||||||
Write-Host " CCC::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T "
|
|
||||||
Write-Host "CC:::::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T "
|
|
||||||
Write-Host "C:::::CCCCCCCC::::CT:::::TT:::::::TT:::::TT:::::TT:::::::TT:::::T "
|
|
||||||
Write-Host "C:::::C CCCCCCTTTTTT T:::::T TTTTTTTTTTTT T:::::T TTTTTT"
|
|
||||||
Write-Host "C:::::C T:::::T T:::::T "
|
|
||||||
Write-Host "C:::::C T:::::T T:::::T "
|
|
||||||
Write-Host "C:::::C T:::::T T:::::T "
|
|
||||||
Write-Host "C:::::C T:::::T T:::::T "
|
|
||||||
Write-Host "C:::::C T:::::T T:::::T "
|
|
||||||
Write-Host "C:::::C T:::::T T:::::T "
|
|
||||||
Write-Host "C:::::C CCCCCC T:::::T T:::::T "
|
|
||||||
Write-Host "C:::::CCCCCCCC::::C TT:::::::TT TT:::::::TT "
|
|
||||||
Write-Host "CC:::::::::::::::C T:::::::::T T:::::::::T "
|
|
||||||
Write-Host "CCC::::::::::::C T:::::::::T T:::::::::T "
|
|
||||||
Write-Host " CCCCCCCCCCCCC TTTTTTTTTTT TTTTTTTTTTT "
|
|
||||||
Write-Host ""
|
|
||||||
Write-Host "====Chris Titus Tech====="
|
|
||||||
Write-Host "=====Windows Toolbox====="
|
|
||||||
|
|
||||||
#====DEBUG GUI Elements====
|
|
||||||
|
|
||||||
#Write-Host "Found the following interactable elements from our form" -ForegroundColor Cyan
|
|
||||||
#get-variable WPF*
|
|
||||||
}
|
|
@ -18,15 +18,15 @@ function Invoke-WPFGetInstalled {
|
|||||||
if (($sync.ChocoRadioButton.IsChecked -eq $false) -and ((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget") {
|
if (($sync.ChocoRadioButton.IsChecked -eq $false) -and ((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
$preferChoco = $sync.ChocoRadioButton.IsChecked
|
$managerPreference = $sync["ManagerPreference"]
|
||||||
$sync.ItemsControl.Dispatcher.Invoke([action] {
|
$sync.ItemsControl.Dispatcher.Invoke([action] {
|
||||||
$sync.ItemsControl.Items | ForEach-Object { $_.Visibility = [Windows.Visibility]::Collapsed }
|
$sync.ItemsControl.Items | ForEach-Object { $_.Visibility = [Windows.Visibility]::Collapsed }
|
||||||
$null = $sync.itemsControl.Items.Add($sync.LoadingLabel)
|
$null = $sync.itemsControl.Items.Add($sync.LoadingLabel)
|
||||||
})
|
})
|
||||||
Invoke-WPFRunspace -ParameterList @(("preferChoco", $preferChoco),("checkbox", $checkbox),("ShowOnlyCheckedApps", ${function:Show-OnlyCheckedApps})) -DebugPreference $DebugPreference -ScriptBlock {
|
Invoke-WPFRunspace -ParameterList @(("managerPreference", $managerPreference),("checkbox", $checkbox),("ShowOnlyCheckedApps", ${function:Show-OnlyCheckedApps})) -DebugPreference $DebugPreference -ScriptBlock {
|
||||||
param (
|
param (
|
||||||
[string]$checkbox,
|
[string]$checkbox,
|
||||||
[boolean]$preferChoco,
|
[PackageManagers]$managerPreference,
|
||||||
[scriptblock]$ShowOnlyCheckedApps
|
[scriptblock]$ShowOnlyCheckedApps
|
||||||
)
|
)
|
||||||
$sync.ProcessRunning = $true
|
$sync.ProcessRunning = $true
|
||||||
@ -34,8 +34,10 @@ function Invoke-WPFGetInstalled {
|
|||||||
|
|
||||||
if ($checkbox -eq "winget") {
|
if ($checkbox -eq "winget") {
|
||||||
Write-Host "Getting Installed Programs..."
|
Write-Host "Getting Installed Programs..."
|
||||||
if ($preferChoco) { $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox "choco" }
|
switch ($managerPreference) {
|
||||||
else { $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox }
|
"Choco"{$Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox "choco"; break}
|
||||||
|
"Winget"{$Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox; break}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
elseif ($checkbox -eq "tweaks") {
|
elseif ($checkbox -eq "tweaks") {
|
||||||
Write-Host "Getting Installed Tweaks..."
|
Write-Host "Getting Installed Tweaks..."
|
||||||
|
@ -21,40 +21,16 @@ function Invoke-WPFInstall {
|
|||||||
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
$ChocoPreference = $($sync.ChocoRadioButton.IsChecked)
|
|
||||||
$installHandle = Invoke-WPFRunspace -ParameterList @(("PackagesToInstall", $PackagesToInstall),("ChocoPreference", $ChocoPreference)) -DebugPreference $DebugPreference -ScriptBlock {
|
|
||||||
param($PackagesToInstall, $ChocoPreference, $DebugPreference)
|
|
||||||
if ($PackagesToInstall.count -eq 1) {
|
|
||||||
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
|
|
||||||
} else {
|
|
||||||
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
|
|
||||||
}
|
|
||||||
$packagesWinget, $packagesChoco = {
|
|
||||||
$packagesWinget = [System.Collections.ArrayList]::new()
|
|
||||||
$packagesChoco = [System.Collections.ArrayList]::new()
|
|
||||||
|
|
||||||
foreach ($package in $PackagesToInstall) {
|
$ManagerPreference = $sync["ManagerPreference"]
|
||||||
if ($ChocoPreference) {
|
|
||||||
if ($package.choco -eq "na") {
|
Invoke-WPFRunspace -ParameterList @(("PackagesToInstall", $PackagesToInstall),("ManagerPreference", $ManagerPreference)) -DebugPreference $DebugPreference -ScriptBlock {
|
||||||
$packagesWinget.add($package.winget)
|
param($PackagesToInstall, $ManagerPreference, $DebugPreference)
|
||||||
Write-Host "Queueing $($package.winget) for Winget install"
|
|
||||||
} else {
|
$packagesSorted = Get-WinUtilSelectedPackages -PackageList $PackagesToInstall -Preference $ManagerPreference
|
||||||
$null = $packagesChoco.add($package.choco)
|
|
||||||
Write-Host "Queueing $($package.choco) for Chocolatey install"
|
$packagesWinget = $packagesSorted[[PackageManagers]::Winget]
|
||||||
}
|
$packagesChoco = $packagesSorted[[PackageManagers]::Choco]
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ($package.winget -eq "na") {
|
|
||||||
$packagesChoco.add($package.choco)
|
|
||||||
Write-Host "Queueing $($package.choco) for Chocolatey install"
|
|
||||||
} else {
|
|
||||||
$null = $packagesWinget.add($($package.winget))
|
|
||||||
Write-Host "Queueing $($package.winget) for Winget install"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $packagesWinget, $packagesChoco
|
|
||||||
}.Invoke($PackagesToInstall)
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$sync.ProcessRunning = $true
|
$sync.ProcessRunning = $true
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
function Invoke-WPFPanelDISM {
|
|
||||||
<#
|
|
||||||
|
|
||||||
.SYNOPSIS
|
|
||||||
Checks for system corruption using Chkdsk, SFC, and DISM
|
|
||||||
|
|
||||||
.DESCRIPTION
|
|
||||||
1. Chkdsk - Fixes disk and filesystem corruption
|
|
||||||
2. SFC Run 1 - Fixes system file corruption, and fixes DISM if it was corrupted
|
|
||||||
3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
|
|
||||||
4. SFC Run 2 - Fixes system file corruption, this time with an almost guaranteed uncorrupted system image
|
|
||||||
|
|
||||||
.NOTES
|
|
||||||
Command Arguments:
|
|
||||||
1. Chkdsk
|
|
||||||
/Scan - Runs an online scan on the system drive, attempts to fix any corruption, and queues other corruption for fixing on reboot
|
|
||||||
2. SFC
|
|
||||||
/ScanNow - Performs a scan of the system files and fixes any corruption
|
|
||||||
3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
|
|
||||||
/Online - Fixes the currently running system image
|
|
||||||
/Cleanup-Image - Performs cleanup operations on the image, could remove some unneeded temporary files
|
|
||||||
/Restorehealth - Performs a scan of the image and fixes any corruption
|
|
||||||
|
|
||||||
#>
|
|
||||||
Start-Process PowerShell -ArgumentList "Write-Host '(1/4) Chkdsk' -ForegroundColor Green; Chkdsk /scan;
|
|
||||||
Write-Host '`n(2/4) SFC - 1st scan' -ForegroundColor Green; sfc /scannow;
|
|
||||||
Write-Host '`n(3/4) DISM' -ForegroundColor Green; DISM /Online /Cleanup-Image /Restorehealth;
|
|
||||||
Write-Host '`n(4/4) SFC - 2nd scan' -ForegroundColor Green; sfc /scannow;
|
|
||||||
Read-Host '`nPress Enter to Continue'" -verb runas
|
|
||||||
}
|
|
124
functions/public/Invoke-WPFSystemRepair.ps1
Normal file
124
functions/public/Invoke-WPFSystemRepair.ps1
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
function Invoke-WPFSystemRepair {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Checks for system corruption using Chkdsk, SFC, and DISM
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
1. Chkdsk - Fixes disk and filesystem corruption
|
||||||
|
2. SFC Run 1 - Fixes system file corruption, and fixes DISM if it was corrupted
|
||||||
|
3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
|
||||||
|
4. SFC Run 2 - Fixes system file corruption, this time with an almost guaranteed uncorrupted system image
|
||||||
|
#>
|
||||||
|
|
||||||
|
function Invoke-Chkdsk {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Runs chkdsk on the system drive
|
||||||
|
.DESCRIPTION
|
||||||
|
Chkdsk /Scan - Runs an online scan on the system drive, attempts to fix any corruption, and queues other corruption for fixing on reboot
|
||||||
|
#>
|
||||||
|
param(
|
||||||
|
[int]$parentProgressId = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Progress -Id 1 -ParentId $parentProgressId -Activity $childProgressBarActivity -Status "Running chkdsk..." -PercentComplete 0
|
||||||
|
$oldpercent = 0
|
||||||
|
# 2>&1 redirects stdout, allowing iteration over the output
|
||||||
|
chkdsk.exe /scan /perf 2>&1 | ForEach-Object {
|
||||||
|
Write-Debug $_
|
||||||
|
# Regex to match the total percentage regardless of windows locale (it's always the second percentage in the status output)
|
||||||
|
if ($_ -match "%.*?(\d+)%") {
|
||||||
|
[int]$percent = $matches[1]
|
||||||
|
if ($percent -gt $oldpercent) {
|
||||||
|
Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "Running chkdsk... ($percent%)" -PercentComplete $percent
|
||||||
|
$oldpercent = $percent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "chkdsk Completed" -PercentComplete 100 -Completed
|
||||||
|
}
|
||||||
|
|
||||||
|
function Invoke-SFC {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Runs sfc on the system drive
|
||||||
|
.DESCRIPTION
|
||||||
|
SFC /ScanNow - Performs a scan of the system files and fixes any corruption
|
||||||
|
.NOTES
|
||||||
|
ErrorActionPreference is set locally within a script block & {...} to isolate their effects.
|
||||||
|
ErrorActionPreference suppresses false errors caused by sfc.exe output redirection.
|
||||||
|
A bug in SFC output buffering causes progress updates to appear in chunks when redirecting output
|
||||||
|
#>
|
||||||
|
param(
|
||||||
|
[int]$parentProgressId = 0
|
||||||
|
)
|
||||||
|
& {
|
||||||
|
$ErrorActionPreference = "SilentlyContinue"
|
||||||
|
Write-Progress -Id 1 -ParentId $parentProgressId -Activity $childProgressBarActivity -Status "Running SFC..." -PercentComplete 0
|
||||||
|
$oldpercent = 0
|
||||||
|
sfc.exe /scannow 2>&1 | ForEach-Object {
|
||||||
|
Write-Debug $_
|
||||||
|
if ($_ -ne "") {
|
||||||
|
# sfc.exe /scannow outputs unicode characters, so we directly remove null characters for optimization
|
||||||
|
$utf8line = $_ -replace "`0", ""
|
||||||
|
if ($utf8line -match "(\d+)\s*%") {
|
||||||
|
[int]$percent = $matches[1]
|
||||||
|
if ($percent -gt $oldpercent) {
|
||||||
|
Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "Running SFC... ($percent%)" -PercentComplete $percent
|
||||||
|
$oldpercent = $percent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "SFC Completed" -PercentComplete 100 -Completed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Invoke-DISM {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Runs DISM on the system drive
|
||||||
|
.DESCRIPTION
|
||||||
|
DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted
|
||||||
|
/Online - Fixes the currently running system image
|
||||||
|
/Cleanup-Image - Performs cleanup operations on the image, could remove some unneeded temporary files
|
||||||
|
/Restorehealth - Performs a scan of the image and fixes any corruption
|
||||||
|
#>
|
||||||
|
param(
|
||||||
|
[int]$parentProgressId = 0
|
||||||
|
)
|
||||||
|
Write-Progress -Id 1 -ParentId $parentProgressId -Activity $childProgressBarActivity -Status "Running DISM..." -PercentComplete 0
|
||||||
|
$oldpercent = 0
|
||||||
|
DISM /Online /Cleanup-Image /RestoreHealth | ForEach-Object {
|
||||||
|
Write-Debug $_
|
||||||
|
# Filter for lines that contain a percentage that is greater than the previous one
|
||||||
|
if ($_ -match "(\d+)[.,]\d+%") {
|
||||||
|
[int]$percent = $matches[1]
|
||||||
|
if ($percent -gt $oldpercent) {
|
||||||
|
# Update the progress bar
|
||||||
|
Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "Running DISM... ($percent%)" -PercentComplete $percent
|
||||||
|
$oldpercent = $percent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "DISM Completed" -PercentComplete 100 -Completed
|
||||||
|
}
|
||||||
|
|
||||||
|
$childProgressBarActivity = "Scanning for corruption"
|
||||||
|
Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 0
|
||||||
|
# Step 1: Run chkdsk to fix disk and filesystem corruption before proceeding with system file repairs
|
||||||
|
Invoke-Chkdsk
|
||||||
|
Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 25
|
||||||
|
|
||||||
|
# Step 2: Run SFC to fix system file corruption and ensure DISM can operate correctly
|
||||||
|
Invoke-SFC
|
||||||
|
Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 50
|
||||||
|
|
||||||
|
# Step 3: Run DISM to repair the system image, which SFC relies on for accurate repairs
|
||||||
|
Invoke-DISM
|
||||||
|
Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 75
|
||||||
|
|
||||||
|
# Step 4: Run SFC again to ensure system files are repaired using the now-fixed system image
|
||||||
|
Invoke-SFC
|
||||||
|
Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 100 -Completed
|
||||||
|
}
|
@ -29,4 +29,30 @@ function Invoke-WPFTab {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sync.currentTab = $sync.$tabNav.Items[$tabNumber].Header
|
$sync.currentTab = $sync.$tabNav.Items[$tabNumber].Header
|
||||||
|
|
||||||
|
# Always reset the filter for the current tab
|
||||||
|
if ($sync.currentTab -eq "Install") {
|
||||||
|
# Reset Install tab filter
|
||||||
|
Find-AppsByNameOrDescription -SearchString ""
|
||||||
|
} elseif ($sync.currentTab -eq "Tweaks") {
|
||||||
|
# Reset Tweaks tab filter
|
||||||
|
Find-TweaksByNameOrDescription -SearchString ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show search bar in Install and Tweaks tabs
|
||||||
|
if ($tabNumber -eq 0 -or $tabNumber -eq 1) {
|
||||||
|
$sync.SearchBar.Visibility = "Visible"
|
||||||
|
$searchIcon = ($sync.Form.FindName("SearchBar").Parent.Children | Where-Object { $_ -is [System.Windows.Controls.TextBlock] -and $_.Text -eq [char]0xE721 })[0]
|
||||||
|
if ($searchIcon) {
|
||||||
|
$searchIcon.Visibility = "Visible"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$sync.SearchBar.Visibility = "Collapsed"
|
||||||
|
$searchIcon = ($sync.Form.FindName("SearchBar").Parent.Children | Where-Object { $_ -is [System.Windows.Controls.TextBlock] -and $_.Text -eq [char]0xE721 })[0]
|
||||||
|
if ($searchIcon) {
|
||||||
|
$searchIcon.Visibility = "Collapsed"
|
||||||
|
}
|
||||||
|
# Hide the clear button if it's visible
|
||||||
|
$sync.SearchBarClearButton.Visibility = "Collapsed"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ function Invoke-WPFUIElements {
|
|||||||
|
|
||||||
$label = New-Object Windows.Controls.Label
|
$label = New-Object Windows.Controls.Label
|
||||||
$label.Content = $category -replace ".*__", ""
|
$label.Content = $category -replace ".*__", ""
|
||||||
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSizeHeading")
|
$label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize")
|
||||||
$label.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily")
|
$label.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily")
|
||||||
$itemsControl.Items.Add($label) | Out-Null
|
$itemsControl.Items.Add($label) | Out-Null
|
||||||
$sync[$category] = $label
|
$sync[$category] = $label
|
||||||
|
@ -29,46 +29,20 @@ function Invoke-WPFUnInstall {
|
|||||||
$confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
$confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
||||||
|
|
||||||
if($confirm -eq "No") {return}
|
if($confirm -eq "No") {return}
|
||||||
$ChocoPreference = $($sync.ChocoRadioButton.IsChecked)
|
|
||||||
|
|
||||||
Invoke-WPFRunspace -ArgumentList @(("PackagesToUninstall", $PackagesToUninstall),("ChocoPreference", $ChocoPreference)) -DebugPreference $DebugPreference -ScriptBlock {
|
$ManagerPreference = $sync["ManagerPreference"]
|
||||||
param($PackagesToUninstall, $ChocoPreference, $DebugPreference)
|
|
||||||
if ($PackagesToUninstall.count -eq 1) {
|
|
||||||
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
|
|
||||||
} else {
|
|
||||||
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
|
|
||||||
}
|
|
||||||
$packagesWinget, $packagesChoco = {
|
|
||||||
$packagesWinget = [System.Collections.ArrayList]::new()
|
|
||||||
$packagesChoco = [System.Collections.ArrayList]::new()
|
|
||||||
|
|
||||||
foreach ($package in $PackagesToUninstall) {
|
Invoke-WPFRunspace -ArgumentList @(("PackagesToUninstall", $PackagesToInstall),("ManagerPreference", $ManagerPreference)) -DebugPreference $DebugPreference -ScriptBlock {
|
||||||
if ($ChocoPreference) {
|
param($PackagesToUninstall, $ManagerPreference, $DebugPreference)
|
||||||
if ($package.choco -eq "na") {
|
|
||||||
$packagesWinget.add($package.winget)
|
$packagesSorted = Get-WinUtilSelectedPackages -PackageList $PackagesToInstall -Preference $ManagerPreference
|
||||||
Write-Host "Queueing $($package.winget) for Winget uninstall"
|
$packagesWinget = $packagesSorted[[PackageManagers]::Winget]
|
||||||
} else {
|
$packagesChoco = $packagesSorted[[PackageManagers]::Choco]
|
||||||
$null = $packagesChoco.add($package.choco)
|
|
||||||
Write-Host "Queueing $($package.choco) for Chocolatey uninstall"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ($package.winget -eq "na") {
|
|
||||||
$packagesChoco.add($package.choco)
|
|
||||||
Write-Host "Queueing $($package.choco) for Chocolatey uninstall"
|
|
||||||
} else {
|
|
||||||
$null = $packagesWinget.add($($package.winget))
|
|
||||||
Write-Host "Queueing $($package.winget) for Winget uninstall"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $packagesWinget, $packagesChoco
|
|
||||||
}.Invoke($PackagesToUninstall)
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$sync.ProcessRunning = $true
|
$sync.ProcessRunning = $true
|
||||||
|
|
||||||
# Install all selected programs in new window
|
# Uninstall all selected programs in new window
|
||||||
if($packagesWinget.Count -gt 0) {
|
if($packagesWinget.Count -gt 0) {
|
||||||
Install-WinUtilProgramWinget -Action Uninstall -Programs $packagesWinget
|
Install-WinUtilProgramWinget -Action Uninstall -Programs $packagesWinget
|
||||||
}
|
}
|
||||||
|
38
functions/public/Show-CTTLogo.ps1
Normal file
38
functions/public/Show-CTTLogo.ps1
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Function Show-CTTLogo {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Displays the CTT logo in ASCII art.
|
||||||
|
.DESCRIPTION
|
||||||
|
This function displays the CTT logo in ASCII art format.
|
||||||
|
.PARAMETER None
|
||||||
|
No parameters are required for this function.
|
||||||
|
.EXAMPLE
|
||||||
|
Show-CTTLogo
|
||||||
|
Prints the CTT logo in ASCII art format to the console.
|
||||||
|
#>
|
||||||
|
|
||||||
|
$asciiArt = @"
|
||||||
|
CCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
|
||||||
|
CCC::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T
|
||||||
|
CC:::::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T
|
||||||
|
C:::::CCCCCCCC::::CT:::::TT:::::::TT:::::TT:::::TT:::::::TT:::::T
|
||||||
|
C:::::C CCCCCCTTTTTT T:::::T TTTTTTTTTTTT T:::::T TTTTTT
|
||||||
|
C:::::C T:::::T T:::::T
|
||||||
|
C:::::C T:::::T T:::::T
|
||||||
|
C:::::C T:::::T T:::::T
|
||||||
|
C:::::C T:::::T T:::::T
|
||||||
|
C:::::C T:::::T T:::::T
|
||||||
|
C:::::C T:::::T T:::::T
|
||||||
|
C:::::C CCCCCC T:::::T T:::::T
|
||||||
|
C:::::CCCCCCCC::::C TT:::::::TT TT:::::::TT
|
||||||
|
CC:::::::::::::::C T:::::::::T T:::::::::T
|
||||||
|
CCC::::::::::::C T:::::::::T T:::::::::T
|
||||||
|
CCCCCCCCCCCCC TTTTTTTTTTT TTTTTTTTTTT
|
||||||
|
|
||||||
|
====Chris Titus Tech=====
|
||||||
|
=====Windows Toolbox=====
|
||||||
|
"@
|
||||||
|
|
||||||
|
Write-Host $asciiArt
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,6 @@
|
|||||||
{% block header %}
|
{% block header %}
|
||||||
{{ super() }}
|
{{ super() }}
|
||||||
<div style="color: red; text-align: center; padding: 10px; font-size: 20px;">
|
<div style="color: red; text-align: center; padding: 10px; font-size: 20px;">
|
||||||
<strong>Announcement:</strong> We are currently not adding any applications to WinUtil and any apps that will be added through a PR will be declined by the maintainer.
|
|
||||||
<strong>Announcement:</strong> We are currently reworking the docs to use Hugo rather then mkdocs.
|
<strong>Announcement:</strong> We are currently reworking the docs to use Hugo rather then mkdocs.
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
179
scripts/main.ps1
179
scripts/main.ps1
@ -1,3 +1,12 @@
|
|||||||
|
# Create enums
|
||||||
|
Add-Type @"
|
||||||
|
public enum PackageManagers
|
||||||
|
{
|
||||||
|
Winget,
|
||||||
|
Choco
|
||||||
|
}
|
||||||
|
"@
|
||||||
|
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
# Set the maximum number of threads for the RunspacePool to the number of threads on the machine
|
# Set the maximum number of threads for the RunspacePool to the number of threads on the machine
|
||||||
$maxthreads = [int]$env:NUMBER_OF_PROCESSORS
|
$maxthreads = [int]$env:NUMBER_OF_PROCESSORS
|
||||||
@ -46,7 +55,6 @@ class GenericException : Exception {
|
|||||||
GenericException($Message) : base($Message) {}
|
GenericException($Message) : base($Message) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -replace '^<Win.*', '<Window'
|
$inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -replace '^<Win.*', '<Window'
|
||||||
|
|
||||||
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
|
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
|
||||||
@ -119,18 +127,18 @@ $sync.configs.applications.PSObject.Properties | ForEach-Object {
|
|||||||
|
|
||||||
# Now call the function with the final merged config
|
# Now call the function with the final merged config
|
||||||
Invoke-WPFUIElements -configVariable $sync.configs.appnavigation -targetGridName "appscategory" -columncount 1
|
Invoke-WPFUIElements -configVariable $sync.configs.appnavigation -targetGridName "appscategory" -columncount 1
|
||||||
|
|
||||||
# Add logic to handle click to the ToggleView Button on the Install Tab
|
# Add logic to handle click to the ToggleView Button on the Install Tab
|
||||||
$sync.WPFToggleView.Add_Click({
|
$sync.WPFToggleView.Add_Click({
|
||||||
$sync.CompactView = -not $sync.CompactView
|
$sync.CompactView = -not $sync.CompactView
|
||||||
Update-AppTileProperties
|
Update-AppTileProperties
|
||||||
if ($sync.SearchBar.Text -eq "") {
|
|
||||||
Set-CategoryVisibility -Category "*"
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
Invoke-WPFUIApps -Apps $sync.configs.applicationsHashtable -targetGridName "appspanel"
|
Invoke-WPFUIApps -Apps $sync.configs.applicationsHashtable -targetGridName "appspanel"
|
||||||
|
|
||||||
Invoke-WPFUIElements -configVariable $sync.configs.tweaks -targetGridName "tweakspanel" -columncount 2
|
Invoke-WPFUIElements -configVariable $sync.configs.tweaks -targetGridName "tweakspanel" -columncount 2
|
||||||
|
|
||||||
Invoke-WPFUIElements -configVariable $sync.configs.feature -targetGridName "featurespanel" -columncount 2
|
Invoke-WPFUIElements -configVariable $sync.configs.feature -targetGridName "featurespanel" -columncount 2
|
||||||
|
|
||||||
# Future implementation: Add Windows Version to updates panel
|
# Future implementation: Add Windows Version to updates panel
|
||||||
#Invoke-WPFUIElements -configVariable $sync.configs.updates -targetGridName "updatespanel" -columncount 1
|
#Invoke-WPFUIElements -configVariable $sync.configs.updates -targetGridName "updatespanel" -columncount 1
|
||||||
|
|
||||||
@ -140,12 +148,14 @@ Invoke-WPFUIElements -configVariable $sync.configs.feature -targetGridName "feat
|
|||||||
|
|
||||||
$xaml.SelectNodes("//*[@Name]") | ForEach-Object {$sync["$("$($psitem.Name)")"] = $sync["Form"].FindName($psitem.Name)}
|
$xaml.SelectNodes("//*[@Name]") | ForEach-Object {$sync["$("$($psitem.Name)")"] = $sync["Form"].FindName($psitem.Name)}
|
||||||
|
|
||||||
#Persist the Chocolatey preference across winutil restarts
|
#Persist Package Manager preference across winutil restarts
|
||||||
$ChocoPreferencePath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini"
|
$sync.ChocoRadioButton.Add_Checked({Set-PackageManagerPreference Choco})
|
||||||
$sync.ChocoRadioButton.Add_Checked({New-Item -Path $ChocoPreferencePath -Force })
|
$sync.WingetRadioButton.Add_Checked({Set-PackageManagerPreference Winget})
|
||||||
$sync.ChocoRadioButton.Add_Unchecked({Remove-Item $ChocoPreferencePath -Force})
|
Set-PackageManagerPreference
|
||||||
if (Test-Path $ChocoPreferencePath) {
|
|
||||||
$sync.ChocoRadioButton.IsChecked = $true
|
switch ($sync["ManagerPreference"]) {
|
||||||
|
"Choco" {$sync.ChocoRadioButton.IsChecked = $true; break}
|
||||||
|
"Winget" {$sync.WingetRadioButton.IsChecked = $true; break}
|
||||||
}
|
}
|
||||||
|
|
||||||
$sync.keys | ForEach-Object {
|
$sync.keys | ForEach-Object {
|
||||||
@ -184,14 +194,13 @@ $sync.keys | ForEach-Object {
|
|||||||
# Load computer information in the background
|
# Load computer information in the background
|
||||||
Invoke-WPFRunspace -ScriptBlock {
|
Invoke-WPFRunspace -ScriptBlock {
|
||||||
try {
|
try {
|
||||||
$oldProgressPreference = $ProgressPreference
|
|
||||||
$ProgressPreference = "SilentlyContinue"
|
$ProgressPreference = "SilentlyContinue"
|
||||||
$sync.ConfigLoaded = $False
|
$sync.ConfigLoaded = $False
|
||||||
$sync.ComputerInfo = Get-ComputerInfo
|
$sync.ComputerInfo = Get-ComputerInfo
|
||||||
$sync.ConfigLoaded = $True
|
$sync.ConfigLoaded = $True
|
||||||
}
|
}
|
||||||
finally{
|
finally{
|
||||||
$ProgressPreference = "Continue"
|
$ProgressPreference = $oldProgressPreference
|
||||||
}
|
}
|
||||||
|
|
||||||
} | Out-Null
|
} | Out-Null
|
||||||
@ -201,13 +210,14 @@ Invoke-WPFRunspace -ScriptBlock {
|
|||||||
#===========================================================================
|
#===========================================================================
|
||||||
|
|
||||||
# Print the logo
|
# Print the logo
|
||||||
Invoke-WPFFormVariables
|
Show-CTTLogo
|
||||||
$sync.CompactView = $false
|
$sync.CompactView = $true
|
||||||
$sync.Form.Resources.AppTileWidth = [double]::NaN
|
$sync.Form.Resources.AppTileWidth = [double]::NaN
|
||||||
$sync.Form.Resources.AppTileCompactVisibility = [Windows.Visibility]::Visible
|
$sync.Form.Resources.AppTileCompactVisibility = [Windows.Visibility]::Visible
|
||||||
$sync.Form.Resources.AppTileFontSize = [double]16
|
$sync.Form.Resources.AppTileFontSize = [double]16
|
||||||
$sync.Form.Resources.AppTileMargins = [Windows.Thickness]5
|
$sync.Form.Resources.AppTileMargins = [Windows.Thickness]5
|
||||||
$sync.Form.Resources.AppTileBorderThickness = [Windows.Thickness]0
|
$sync.Form.Resources.AppTileBorderThickness = [Windows.Thickness]0
|
||||||
|
|
||||||
function Update-AppTileProperties {
|
function Update-AppTileProperties {
|
||||||
if ($sync.CompactView -eq $true) {
|
if ($sync.CompactView -eq $true) {
|
||||||
$sync.Form.Resources.AppTileWidth = [double]::NaN
|
$sync.Form.Resources.AppTileWidth = [double]::NaN
|
||||||
@ -217,13 +227,24 @@ function Update-AppTileProperties {
|
|||||||
$sync.Form.Resources.AppTileBorderThickness = [Windows.Thickness]0
|
$sync.Form.Resources.AppTileBorderThickness = [Windows.Thickness]0
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$sync.Form.Resources.AppTileWidth = $sync.ItemsControl.ActualWidth -20
|
# On first load, set the AppTileWidth to NaN because the Window dosnt exist yet and there is no ActuaWidth
|
||||||
|
if ($sync.ItemsControl.ActualWidth -gt 0) {
|
||||||
|
$sync.Form.Resources.AppTileWidth = $sync.ItemsControl.ActualWidth -20}
|
||||||
|
else {
|
||||||
|
$sync.Form.Resources.AppTileWidth = [double]::NaN
|
||||||
|
}
|
||||||
$sync.Form.Resources.AppTileCompactVisibility = [Windows.Visibility]::Visible
|
$sync.Form.Resources.AppTileCompactVisibility = [Windows.Visibility]::Visible
|
||||||
$sync.Form.Resources.AppTileFontSize = [double]16
|
$sync.Form.Resources.AppTileFontSize = [double]16
|
||||||
$sync.Form.Resources.AppTileMargins = [Windows.Thickness]5
|
$sync.Form.Resources.AppTileMargins = [Windows.Thickness]5
|
||||||
$sync.Form.Resources.AppTileBorderThickness = [Windows.Thickness]1
|
$sync.Form.Resources.AppTileBorderThickness = [Windows.Thickness]1
|
||||||
}
|
}
|
||||||
|
if ($sync.SearchBar.Text -eq "") {
|
||||||
|
Set-CategoryVisibility -Category "*"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
# initialize AppTile properties
|
||||||
|
Update-AppTileProperties
|
||||||
|
|
||||||
# We need to update the app tile properties when the form is resized because to fill a WrapPanel update the width of the elemenmt manually (afaik)
|
# We need to update the app tile properties when the form is resized because to fill a WrapPanel update the width of the elemenmt manually (afaik)
|
||||||
$sync.Form.Add_SizeChanged({
|
$sync.Form.Add_SizeChanged({
|
||||||
Update-AppTileProperties
|
Update-AppTileProperties
|
||||||
@ -246,55 +267,42 @@ $sync["Form"].Add_Closing({
|
|||||||
$sync.SearchBarClearButton.Add_Click({
|
$sync.SearchBarClearButton.Add_Click({
|
||||||
$sync.SearchBar.Text = ""
|
$sync.SearchBar.Text = ""
|
||||||
$sync.SearchBarClearButton.Visibility = "Collapsed"
|
$sync.SearchBarClearButton.Visibility = "Collapsed"
|
||||||
|
|
||||||
|
# Focus the search bar after clearing the text
|
||||||
|
$sync.SearchBar.Focus()
|
||||||
|
$sync.SearchBar.SelectAll()
|
||||||
})
|
})
|
||||||
|
|
||||||
# add some shortcuts for people that don't like clicking
|
# add some shortcuts for people that don't like clicking
|
||||||
$commonKeyEvents = {
|
$commonKeyEvents = {
|
||||||
|
# Prevent shortcuts from executing if a process is already running
|
||||||
if ($sync.ProcessRunning -eq $true) {
|
if ($sync.ProcessRunning -eq $true) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_.Key -eq "Escape") {
|
# Handle key presses of single keys
|
||||||
$sync.SearchBar.SelectAll()
|
switch ($_.Key) {
|
||||||
$sync.SearchBar.Text = ""
|
"Escape" { $sync.SearchBar.Text = "" }
|
||||||
$sync.SearchBarClearButton.Visibility = "Collapsed"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
# don't ask, I know what I'm doing, just go...
|
|
||||||
if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl")) {
|
|
||||||
$this.Close()
|
|
||||||
}
|
}
|
||||||
|
# Handle Alt key combinations for navigation
|
||||||
if ($_.KeyboardDevice.Modifiers -eq "Alt") {
|
if ($_.KeyboardDevice.Modifiers -eq "Alt") {
|
||||||
if ($_.SystemKey -eq "I") {
|
$keyEventArgs = $_
|
||||||
Invoke-WPFButton "WPFTab1BT"
|
switch ($_.SystemKey) {
|
||||||
}
|
"I" { Invoke-WPFButton "WPFTab1BT"; $keyEventArgs.Handled = $true } # Navigate to Install tab and suppress Windows Warning Sound
|
||||||
if ($_.SystemKey -eq "T") {
|
"T" { Invoke-WPFButton "WPFTab2BT"; $keyEventArgs.Handled = $true } # Navigate to Tweaks tab
|
||||||
Invoke-WPFButton "WPFTab2BT"
|
"C" { Invoke-WPFButton "WPFTab3BT"; $keyEventArgs.Handled = $true } # Navigate to Config tab
|
||||||
}
|
"U" { Invoke-WPFButton "WPFTab4BT"; $keyEventArgs.Handled = $true } # Navigate to Updates tab
|
||||||
if ($_.SystemKey -eq "C") {
|
"M" { Invoke-WPFButton "WPFTab5BT"; $keyEventArgs.Handled = $true } # Navigate to MicroWin tab
|
||||||
Invoke-WPFButton "WPFTab3BT"
|
|
||||||
}
|
|
||||||
if ($_.SystemKey -eq "U") {
|
|
||||||
Invoke-WPFButton "WPFTab4BT"
|
|
||||||
}
|
|
||||||
if ($_.SystemKey -eq "M") {
|
|
||||||
Invoke-WPFButton "WPFTab5BT"
|
|
||||||
}
|
|
||||||
if ($_.SystemKey -eq "P") {
|
|
||||||
Write-Host "Your Windows Product Key: $((Get-WmiObject -query 'select * from SoftwareLicensingService').OA3xOriginalProductKey)"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# shortcut for the filter box
|
# Handle Ctrl key combinations for specific actions
|
||||||
if ($_.Key -eq "F" -and $_.KeyboardDevice.Modifiers -eq "Ctrl") {
|
if ($_.KeyboardDevice.Modifiers -eq "Ctrl") {
|
||||||
if ($sync.SearchBar.Text -eq "Ctrl-F to filter") {
|
switch ($_.Key) {
|
||||||
$sync.SearchBar.SelectAll()
|
"F" { $sync.SearchBar.Focus() } # Focus on the search bar
|
||||||
$sync.SearchBar.Text = ""
|
"Q" { $this.Close() } # Close the application
|
||||||
}
|
}
|
||||||
$sync.SearchBar.Focus()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$sync["Form"].Add_PreViewKeyDown($commonKeyEvents)
|
$sync["Form"].Add_PreViewKeyDown($commonKeyEvents)
|
||||||
|
|
||||||
$sync["Form"].Add_MouseLeftButtonDown({
|
$sync["Form"].Add_MouseLeftButtonDown({
|
||||||
@ -303,8 +311,8 @@ $sync["Form"].Add_MouseLeftButtonDown({
|
|||||||
})
|
})
|
||||||
|
|
||||||
$sync["Form"].Add_MouseDoubleClick({
|
$sync["Form"].Add_MouseDoubleClick({
|
||||||
if ($_.OriginalSource -is [System.Windows.Controls.Grid] -or
|
if ($_.OriginalSource.Name -eq "NavDockPanel" -or
|
||||||
$_.OriginalSource -is [System.Windows.Controls.StackPanel]) {
|
$_.OriginalSource.Name -eq "GridBesideNavDockPanel") {
|
||||||
if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal) {
|
if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal) {
|
||||||
$sync["Form"].WindowState = [Windows.WindowState]::Maximized
|
$sync["Form"].WindowState = [Windows.WindowState]::Maximized
|
||||||
}
|
}
|
||||||
@ -320,55 +328,6 @@ $sync["Form"].Add_Deactivated({
|
|||||||
})
|
})
|
||||||
|
|
||||||
$sync["Form"].Add_ContentRendered({
|
$sync["Form"].Add_ContentRendered({
|
||||||
|
|
||||||
try {
|
|
||||||
[void][Window]
|
|
||||||
} catch {
|
|
||||||
Add-Type @"
|
|
||||||
using System;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
public class Window {
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
|
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
|
||||||
public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
|
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
|
||||||
public static extern bool MoveWindow(IntPtr handle, int x, int y, int width, int height, bool redraw);
|
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
public static extern int GetSystemMetrics(int nIndex);
|
|
||||||
};
|
|
||||||
public struct RECT {
|
|
||||||
public int Left; // x position of upper-left corner
|
|
||||||
public int Top; // y position of upper-left corner
|
|
||||||
public int Right; // x position of lower-right corner
|
|
||||||
public int Bottom; // y position of lower-right corner
|
|
||||||
}
|
|
||||||
"@
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) {
|
|
||||||
# Check if the process's MainWindowHandle is valid
|
|
||||||
if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
|
|
||||||
Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
|
|
||||||
$windowHandle = $proc.MainWindowHandle
|
|
||||||
} else {
|
|
||||||
Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)"
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$rect = New-Object RECT
|
|
||||||
[Window]::GetWindowRect($windowHandle, [ref]$rect)
|
|
||||||
$width = $rect.Right - $rect.Left
|
|
||||||
$height = $rect.Bottom - $rect.Top
|
|
||||||
|
|
||||||
Write-Debug "UpperLeft:$($rect.Left),$($rect.Top) LowerBottom:$($rect.Right),$($rect.Bottom). Width:$($width) Height:$($height)"
|
|
||||||
|
|
||||||
# Load the Windows Forms assembly
|
# Load the Windows Forms assembly
|
||||||
Add-Type -AssemblyName System.Windows.Forms
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
$primaryScreen = [System.Windows.Forms.Screen]::PrimaryScreen
|
$primaryScreen = [System.Windows.Forms.Screen]::PrimaryScreen
|
||||||
@ -383,9 +342,12 @@ Add-Type @"
|
|||||||
Write-Debug "Primary Monitor Height: $screenHeight pixels"
|
Write-Debug "Primary Monitor Height: $screenHeight pixels"
|
||||||
|
|
||||||
# Compare with the primary monitor size
|
# Compare with the primary monitor size
|
||||||
if ($width -gt $screenWidth -or $height -gt $screenHeight) {
|
if ($sync.Form.ActualWidth -gt $screenWidth -or $sync.Form.ActualHeight -gt $screenHeight) {
|
||||||
Write-Debug "The specified width and/or height is greater than the primary monitor size."
|
Write-Debug "The specified width and/or height is greater than the primary monitor size."
|
||||||
[void][Window]::MoveWindow($windowHandle, 0, 0, $screenWidth, $screenHeight, $True)
|
$sync.Form.Left = 0
|
||||||
|
$sync.Form.Top = 0
|
||||||
|
$sync.Form.Width = $screenWidth
|
||||||
|
$sync.Form.Height = $screenHeight
|
||||||
} else {
|
} else {
|
||||||
Write-Debug "The specified width and height are within the primary monitor size limits."
|
Write-Debug "The specified width and height are within the primary monitor size limits."
|
||||||
}
|
}
|
||||||
@ -469,6 +431,9 @@ $sync["SearchBar"].Add_TextChanged({
|
|||||||
"Install" {
|
"Install" {
|
||||||
Find-AppsByNameOrDescription -SearchString $sync.SearchBar.Text
|
Find-AppsByNameOrDescription -SearchString $sync.SearchBar.Text
|
||||||
}
|
}
|
||||||
|
"Tweaks" {
|
||||||
|
Find-TweaksByNameOrDescription -SearchString $sync.SearchBar.Text
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -508,44 +473,36 @@ $sync["Form"].Add_Activated({
|
|||||||
$sync["ThemeButton"].Add_Click({
|
$sync["ThemeButton"].Add_Click({
|
||||||
Write-Debug "ThemeButton clicked"
|
Write-Debug "ThemeButton clicked"
|
||||||
Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Hide"; "Theme" = "Toggle" }
|
Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Hide"; "Theme" = "Toggle" }
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
$sync["AutoThemeMenuItem"].Add_Click({
|
$sync["AutoThemeMenuItem"].Add_Click({
|
||||||
Write-Debug "About clicked"
|
Write-Debug "About clicked"
|
||||||
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
||||||
Invoke-WinutilThemeChange -theme "Auto"
|
Invoke-WinutilThemeChange -theme "Auto"
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
$sync["DarkThemeMenuItem"].Add_Click({
|
$sync["DarkThemeMenuItem"].Add_Click({
|
||||||
Write-Debug "Dark Theme clicked"
|
Write-Debug "Dark Theme clicked"
|
||||||
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
||||||
Invoke-WinutilThemeChange -theme "Dark"
|
Invoke-WinutilThemeChange -theme "Dark"
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
$sync["LightThemeMenuItem"].Add_Click({
|
$sync["LightThemeMenuItem"].Add_Click({
|
||||||
Write-Debug "Light Theme clicked"
|
Write-Debug "Light Theme clicked"
|
||||||
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
||||||
Invoke-WinutilThemeChange -theme "Light"
|
Invoke-WinutilThemeChange -theme "Light"
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
$sync["SettingsButton"].Add_Click({
|
$sync["SettingsButton"].Add_Click({
|
||||||
Write-Debug "SettingsButton clicked"
|
Write-Debug "SettingsButton clicked"
|
||||||
Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Toggle"; "Theme" = "Hide" }
|
Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Toggle"; "Theme" = "Hide" }
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
$sync["ImportMenuItem"].Add_Click({
|
$sync["ImportMenuItem"].Add_Click({
|
||||||
Write-Debug "Import clicked"
|
Write-Debug "Import clicked"
|
||||||
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
||||||
Invoke-WPFImpex -type "import"
|
Invoke-WPFImpex -type "import"
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
$sync["ExportMenuItem"].Add_Click({
|
$sync["ExportMenuItem"].Add_Click({
|
||||||
Write-Debug "Export clicked"
|
Write-Debug "Export clicked"
|
||||||
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
||||||
Invoke-WPFImpex -type "export"
|
Invoke-WPFImpex -type "export"
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
$sync["AboutMenuItem"].Add_Click({
|
$sync["AboutMenuItem"].Add_Click({
|
||||||
Write-Debug "About clicked"
|
Write-Debug "About clicked"
|
||||||
@ -579,7 +536,5 @@ $sync["SponsorMenuItem"].Add_Click({
|
|||||||
Show-CustomDialog -Title "Sponsors" -Message $authorInfo -EnableScroll $true
|
Show-CustomDialog -Title "Sponsors" -Message $authorInfo -EnableScroll $true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$sync["Form"].ShowDialog() | out-null
|
$sync["Form"].ShowDialog() | out-null
|
||||||
Stop-Transcript
|
Stop-Transcript
|
||||||
|
@ -42,6 +42,7 @@ $sync.ProcessRunning = $false
|
|||||||
$sync.selectedApps = [System.Collections.Generic.List[string]]::new()
|
$sync.selectedApps = [System.Collections.Generic.List[string]]::new()
|
||||||
$sync.ShowOnlySeleced = $false
|
$sync.ShowOnlySeleced = $false
|
||||||
$sync.currentTab = "Install"
|
$sync.currentTab = "Install"
|
||||||
|
$sync.CompactView = $true
|
||||||
$sync.ShowOnlySelected = $false
|
$sync.ShowOnlySelected = $false
|
||||||
$sync.selectedAppsStackPanel
|
$sync.selectedAppsStackPanel
|
||||||
$sync.selectedAppsPopup
|
$sync.selectedAppsPopup
|
||||||
@ -54,21 +55,27 @@ if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]:
|
|||||||
$PSBoundParameters.GetEnumerator() | ForEach-Object {
|
$PSBoundParameters.GetEnumerator() | ForEach-Object {
|
||||||
$argList += if ($_.Value -is [switch] -and $_.Value) {
|
$argList += if ($_.Value -is [switch] -and $_.Value) {
|
||||||
"-$($_.Key)"
|
"-$($_.Key)"
|
||||||
|
} elseif ($_.Value -is [array]) {
|
||||||
|
"-$($_.Key) $($_.Value -join ',')"
|
||||||
} elseif ($_.Value) {
|
} elseif ($_.Value) {
|
||||||
"-$($_.Key) `"$($_.Value)`""
|
"-$($_.Key) '$($_.Value)'"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$script = if ($MyInvocation.MyCommand.Path) {
|
$script = if ($PSCommandPath) {
|
||||||
"& { & '$($MyInvocation.MyCommand.Path)' $argList }"
|
"& { & `'$($PSCommandPath)`' $($argList -join ' ') }"
|
||||||
} else {
|
} else {
|
||||||
"iex '& { $(irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1) } $argList'"
|
"&([ScriptBlock]::Create((irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1))) $($argList -join ' ')"
|
||||||
}
|
}
|
||||||
|
|
||||||
$powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" }
|
$powershellCmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" }
|
||||||
$processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd }
|
$processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { "$powershellCmd" }
|
||||||
|
|
||||||
Start-Process $processCmd -ArgumentList "$powershellcmd -ExecutionPolicy Bypass -NoProfile -Command $script" -Verb RunAs
|
if ($processCmd -eq "wt.exe") {
|
||||||
|
Start-Process $processCmd -ArgumentList "$powershellCmd -ExecutionPolicy Bypass -NoProfile -Command `"$script`"" -Verb RunAs
|
||||||
|
} else {
|
||||||
|
Start-Process $processCmd -ArgumentList "-ExecutionPolicy Bypass -NoProfile -Command `"$script`"" -Verb RunAs
|
||||||
|
}
|
||||||
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,9 @@ function Invoke-Preprocessing {
|
|||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
A function that does Code Formatting using RegEx, useful when trying to force specific coding standard(s) to a project.
|
A function that does Code Formatting using RegEx, useful when trying to force specific coding standard(s) to a project.
|
||||||
|
|
||||||
.PARAMETER ThrowExceptionOnEmptyFilesList
|
|
||||||
A switch which'll throw an exception upon not finding any files inside the provided 'WorkingDir'.
|
|
||||||
|
|
||||||
.PARAMETER SkipExcludedFilesValidation
|
|
||||||
A switch to stop file path validation on 'ExcludedFiles' list.
|
|
||||||
|
|
||||||
.PARAMETER ExcludedFiles
|
.PARAMETER ExcludedFiles
|
||||||
A list of file paths which're *relative to* 'WorkingDir' Folder, every item in the list can be pointing to File (doesn't end with '\') or Directory (ends with '\') or None-Existing File/Directory.
|
A list of file paths which're *relative to* 'WorkingDir' Folder, every item in the list can be pointing to File (doesn't end with '\') or Directory (ends with '\') or None-Existing File/Directory.
|
||||||
By default, it checks if everyitem exists, and throws an exception if one or more are not found (None-Existing), if you want to skip this validation, please consider providing the '-SkipExcludedFilesValidation' switch to skip this check.
|
By default, it checks if everyitem exists, and throws an exception if one or more are not found (None-Existing).
|
||||||
|
|
||||||
.PARAMETER WorkingDir
|
.PARAMETER WorkingDir
|
||||||
The folder to search inside recursively for files which're going to be Preprocessed (Code Formatted), unless they're found in 'ExcludedFiles' List.
|
The folder to search inside recursively for files which're going to be Preprocessed (Code Formatted), unless they're found in 'ExcludedFiles' List.
|
||||||
@ -36,35 +30,23 @@ function Invoke-Preprocessing {
|
|||||||
|
|
||||||
Same as Example No. 1, but uses 'ProgressActivity' which's used in Progress Bar.
|
Same as Example No. 1, but uses 'ProgressActivity' which's used in Progress Bar.
|
||||||
|
|
||||||
.EXAMPLE
|
|
||||||
Invoke-Preprocessing -ThrowExceptionOnEmptyFilesList -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
|
|
||||||
|
|
||||||
Same as Example No. 1, but uses '-ThrowExceptionOnEmptyFilesList', which's an optional parameter that'll make 'Invoke-Preprocessing' throw an exception when no files are found in 'WorkingDir' (not including the ExcludedFiles, of course), useful when you want to double check your parameters & you're sure there's files to process in the 'WorkingDir'.
|
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
Invoke-Preprocessing -Skip -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
|
Invoke-Preprocessing -Skip -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing"
|
||||||
|
|
||||||
Same as Example No. 1, but uses '-SkipExcludedFilesValidation', which'll skip the validation step for 'ExcludedFiles' list. This can be useful when 'ExcludedFiles' list is generated from another function, or from unreliable source (you can't guarantee every item in list is a valid path), but you want to silently continue through the function.
|
|
||||||
#>
|
#>
|
||||||
|
|
||||||
param (
|
param (
|
||||||
[Parameter(position=0)]
|
[Parameter(Mandatory, position=1)]
|
||||||
[switch]$SkipExcludedFilesValidation,
|
|
||||||
|
|
||||||
[Parameter(position=1)]
|
|
||||||
[switch]$ThrowExceptionOnEmptyFilesList,
|
|
||||||
|
|
||||||
[Parameter(Mandatory, position=2)]
|
|
||||||
[ValidateScript({[System.IO.Path]::IsPathRooted($_)})]
|
[ValidateScript({[System.IO.Path]::IsPathRooted($_)})]
|
||||||
[string]$WorkingDir,
|
[string]$WorkingDir,
|
||||||
|
|
||||||
[Parameter(position=3)]
|
[Parameter(position=2)]
|
||||||
[string[]]$ExcludedFiles,
|
[string[]]$ExcludedFiles,
|
||||||
|
|
||||||
[Parameter(Mandatory, position=4)]
|
[Parameter(Mandatory, position=3)]
|
||||||
[string]$ProgressStatusMessage,
|
[string]$ProgressStatusMessage,
|
||||||
|
|
||||||
[Parameter(position=5)]
|
[Parameter(position=4)]
|
||||||
[string]$ProgressActivity = "Preprocessing"
|
[string]$ProgressActivity = "Preprocessing"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -77,8 +59,7 @@ function Invoke-Preprocessing {
|
|||||||
$InternalExcludedFiles.Add($excludedFile) | Out-Null
|
$InternalExcludedFiles.Add($excludedFile) | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
# Validate the ExcludedItems List before continuing on,
|
# Validate the ExcludedItems List before continuing on
|
||||||
# that's if there's a list in the first place, and '-SkipInternalExcludedFilesValidation' was not provided.
|
|
||||||
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 ('\.\\', '')))"
|
||||||
@ -90,8 +71,8 @@ function Invoke-Preprocessing {
|
|||||||
} else { $failedFilesList += "'$filePath', " }
|
} else { $failedFilesList += "'$filePath', " }
|
||||||
}
|
}
|
||||||
$failedFilesList = $failedFilesList -replace (',\s*$', '')
|
$failedFilesList = $failedFilesList -replace (',\s*$', '')
|
||||||
if ((-not $failedFilesList -eq "") -and (-not $SkipExcludedFilesValidation)) {
|
if ((-not $failedFilesList -eq "")) {
|
||||||
throw "[Invoke-Preprocessing] One or more File Paths and/or File Patterns were not found, you can use '-SkipExcludedFilesValidation' switch to skip this check, the failed to validate are: $failedFilesList"
|
Write-Warning "[Invoke-Preprocessing] One or more File Paths and/or File Patterns were not found: $failedFilesList"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,16 +92,47 @@ function Invoke-Preprocessing {
|
|||||||
if ($index -ge 0) { $files.RemoveAt($index) }
|
if ($index -ge 0) { $files.RemoveAt($index) }
|
||||||
}
|
}
|
||||||
|
|
||||||
$numOfFiles = $files.Count
|
# Define a path to store the file hashes
|
||||||
|
$hashFilePath = Join-Path -Path $WorkingDir -ChildPath ".preprocessor_hashes.json"
|
||||||
|
|
||||||
if ($numOfFiles -eq 0) {
|
# Load existing hashes if the file exists
|
||||||
if ($ThrowExceptionOnEmptyFilesList) {
|
$existingHashes = @{}
|
||||||
throw "[Invoke-Preprocessing] Found 0 Files to Preprocess inside 'WorkingDir' Directory and '-ThrowExceptionOnEmptyFilesList' Switch is provided, value of 'WorkingDir': '$WorkingDir'."
|
if (Test-Path -Path $hashFilePath) {
|
||||||
} else {
|
# intentionally dosn't use ConvertFrom-Json -AsHashtable as it isn't supported on old powershell versions
|
||||||
return # Do an early return, there's nothing else to do
|
$file_content = Get-Content -Path $hashFilePath | ConvertFrom-Json
|
||||||
|
foreach ($property in $file_content.PSObject.Properties) {
|
||||||
|
$existingHashes[$property.Name] = $property.Value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$newHashes = @{}
|
||||||
|
$changedFiles = @()
|
||||||
|
$hashingAlgorithm = "MD5"
|
||||||
|
foreach ($file in $files){
|
||||||
|
# Calculate the hash of the file
|
||||||
|
$hash = Get-FileHash -Path $file -Algorithm $hashingAlgorithm | Select-Object -ExpandProperty Hash
|
||||||
|
$newHashes[$file] = $hash
|
||||||
|
|
||||||
|
# Check if the hash already exists in the existing hashes
|
||||||
|
if (($existingHashes.ContainsKey($file) -and $existingHashes[$file] -eq $hash)) {
|
||||||
|
# Skip processing this file as it hasn't changed
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# If the hash doesn't exist or has changed, add it to the changed files list
|
||||||
|
$changedFiles += $file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$files = $changedFiles
|
||||||
|
$numOfFiles = $files.Count
|
||||||
|
Write-Debug "[Invoke-Preprocessing] Files Changed: $numOfFiles"
|
||||||
|
|
||||||
|
if ($numOfFiles -eq 0){
|
||||||
|
Write-Debug "[Invoke-Preprocessing] Found 0 Files to Preprocess inside 'WorkingDir' Directory : '$WorkingDir'."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for ($i = 0; $i -lt $numOfFiles; $i++) {
|
for ($i = 0; $i -lt $numOfFiles; $i++) {
|
||||||
$fullFileName = $files[$i]
|
$fullFileName = $files[$i]
|
||||||
|
|
||||||
@ -139,9 +151,13 @@ function Invoke-Preprocessing {
|
|||||||
-replace ('\}\s*Catch\s*(?<exceptions>\[.*?\])\s*\{', '} catch ${exceptions} {') `
|
-replace ('\}\s*Catch\s*(?<exceptions>\[.*?\])\s*\{', '} catch ${exceptions} {') `
|
||||||
-replace ('(?<parameter_type>\[[^$0-9]+\])\s*(?<str_after_type>\$.*?)', '${parameter_type}${str_after_type}') `
|
-replace ('(?<parameter_type>\[[^$0-9]+\])\s*(?<str_after_type>\$.*?)', '${parameter_type}${str_after_type}') `
|
||||||
| Set-Content "$fullFileName"
|
| Set-Content "$fullFileName"
|
||||||
|
$newHashes[$fullFileName] = Get-FileHash -Path $fullFileName -Algorithm $hashingAlgorithm | Select-Object -ExpandProperty Hash
|
||||||
|
|
||||||
Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished $i out of $numOfFiles" -PercentComplete (($i/$numOfFiles)*100)
|
Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished $i out of $numOfFiles" -PercentComplete (($i/$numOfFiles)*100)
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished Task Successfully" -Completed
|
Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished Task Successfully" -Completed
|
||||||
|
|
||||||
|
# Save the new hashes to the file
|
||||||
|
$newHashes | ConvertTo-Json -Depth 10 | Set-Content -Path $hashFilePath
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,82 @@
|
|||||||
</Trigger>
|
</Trigger>
|
||||||
</Style.Triggers>
|
</Style.Triggers>
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style x:Key="AppTileBorderStyle" TargetType="Border">
|
||||||
|
<Setter Property="BorderBrush" Value="Gray"/>
|
||||||
|
<Setter Property="BorderThickness" Value="{DynamicResource AppTileBorderThickness}"/>
|
||||||
|
<Setter Property="CornerRadius" Value="5"/>
|
||||||
|
<Setter Property="Padding" Value="{DynamicResource AppTileMargins}"/>
|
||||||
|
<Setter Property="Width" Value="{DynamicResource AppTileWidth}"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Top"/>
|
||||||
|
<Setter Property="Margin" Value="{DynamicResource AppTileMargins}"/>
|
||||||
|
<Setter Property="Cursor" Value="Hand"/>
|
||||||
|
<Setter Property="Background" Value="{DynamicResource AppInstallUnselectedColor}"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="AppTileCheckboxStyle" TargetType="CheckBox">
|
||||||
|
<Setter Property="Background" Value="Transparent"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Left"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="Margin" Value="{DynamicResource AppTileMargins}"/>
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="CheckBox">
|
||||||
|
<ContentPresenter Content="{TemplateBinding Content}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Margin="{TemplateBinding Padding}"/>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="AppTileImageStyle" TargetType="Image">
|
||||||
|
<Setter Property="Width" Value="{DynamicResource AppTileImageSize}"/>
|
||||||
|
<Setter Property="Height" Value="{DynamicResource AppTileImageSize}"/>
|
||||||
|
<Setter Property="Margin">
|
||||||
|
<Setter.Value>
|
||||||
|
<Thickness Left="0" Top="0" Right="10" Bottom="0"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="Clip">
|
||||||
|
<Setter.Value>
|
||||||
|
<RectangleGeometry Rect="0,0,40,40" RadiusX="5" RadiusY="5"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="Visibility" Value="{DynamicResource AppTileCompactVisibility}"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="AppTileNameStyle" TargetType="TextBlock">
|
||||||
|
<Setter Property="FontSize" Value="{DynamicResource AppTileFontSize}"/>
|
||||||
|
<Setter Property="FontWeight" Value="Bold"/>
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource MainForegroundColor}"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="Margin" Value="{DynamicResource AppTileMargins}"/>
|
||||||
|
<Setter Property="Background" Value="Transparent"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="AppTileButtonPanelStyle" TargetType="StackPanel">
|
||||||
|
<Setter Property="Orientation" Value="Horizontal"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Right"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="Margin" Value="{DynamicResource AppTileMargins}"/>
|
||||||
|
<Setter Property="Visibility" Value="{DynamicResource AppTileCompactVisibility}"/>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="AppTileButtonStyle" TargetType="Button">
|
||||||
|
<Setter Property="Width" Value="45"/>
|
||||||
|
<Setter Property="Height" Value="35"/>
|
||||||
|
<Setter Property="Margin" Value="0,0,10,0"/>
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource ButtonForegroundColor}"/>
|
||||||
|
<Setter Property="Background" Value="{DynamicResource ButtonBackgroundColor}"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="ContentTemplate">
|
||||||
|
<Setter.Value>
|
||||||
|
<DataTemplate>
|
||||||
|
<TextBlock Text="{Binding}" FontFamily="Segoe MDL2 Assets" FontSize="20"
|
||||||
|
Foreground="{DynamicResource MainForegroundColor}"
|
||||||
|
Background="Transparent" HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"/>
|
||||||
|
</DataTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
<Style TargetType="Button" x:Key="HoverButtonStyle">
|
<Style TargetType="Button" x:Key="HoverButtonStyle">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource MainForegroundColor}" />
|
<Setter Property="Foreground" Value="{DynamicResource MainForegroundColor}" />
|
||||||
@ -202,7 +278,7 @@
|
|||||||
<Setter Property="Foreground" Value="{DynamicResource LabelboxForegroundColor}"/>
|
<Setter Property="Foreground" Value="{DynamicResource LabelboxForegroundColor}"/>
|
||||||
<Setter Property="Background" Value="{DynamicResource MainBackgroundColor}"/>
|
<Setter Property="Background" Value="{DynamicResource MainBackgroundColor}"/>
|
||||||
<Setter Property="FontFamily" Value="{DynamicResource HeaderFontFamily}"/>
|
<Setter Property="FontFamily" Value="{DynamicResource HeaderFontFamily}"/>
|
||||||
<Setter Property="FontSize" Value="{DynamicResource FontSizeHeading}"/>
|
<Setter Property="FontSize" Value="{DynamicResource HeaderFontSize}"/>
|
||||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
<Setter Property="HorizontalContentAlignment" Value="Left"/>
|
<Setter Property="HorizontalContentAlignment" Value="Left"/>
|
||||||
@ -502,19 +578,6 @@
|
|||||||
</Setter.Value>
|
</Setter.Value>
|
||||||
</Setter>
|
</Setter>
|
||||||
</Style>
|
</Style>
|
||||||
<!-- Collapsed Checkbox Style -->
|
|
||||||
<Style x:Key="CollapsedCheckBoxStyle" TargetType="CheckBox">
|
|
||||||
<Setter Property="Template">
|
|
||||||
<Setter.Value>
|
|
||||||
<ControlTemplate TargetType="CheckBox">
|
|
||||||
<ContentPresenter Content="{TemplateBinding Content}"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
HorizontalAlignment="Left"
|
|
||||||
Margin="{TemplateBinding Padding}"/>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Setter.Value>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
<Style TargetType="RadioButton">
|
<Style TargetType="RadioButton">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource MainForegroundColor}"/>
|
<Setter Property="Foreground" Value="{DynamicResource MainForegroundColor}"/>
|
||||||
<Setter Property="Background" Value="{DynamicResource MainBackgroundColor}"/>
|
<Setter Property="Background" Value="{DynamicResource MainBackgroundColor}"/>
|
||||||
@ -851,7 +914,7 @@
|
|||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<DockPanel HorizontalAlignment="Stretch" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Row="0" Width="Auto">
|
<DockPanel Name="NavDockPanel" HorizontalAlignment="Stretch" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Row="0" Width="Auto">
|
||||||
<StackPanel Name="NavLogoPanel" Orientation="Horizontal" HorizontalAlignment="Left" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Margin="10,0,20,0">
|
<StackPanel Name="NavLogoPanel" Orientation="Horizontal" HorizontalAlignment="Left" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Margin="10,0,20,0">
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
<ToggleButton Margin="0,0,5,0" HorizontalAlignment="Left" Height="{DynamicResource TabButtonHeight}" Width="{DynamicResource TabButtonWidth}"
|
||||||
@ -894,7 +957,7 @@
|
|||||||
</TextBlock>
|
</TextBlock>
|
||||||
</ToggleButton.Content>
|
</ToggleButton.Content>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<Grid Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
<Grid Name="GridBesideNavDockPanel" Background="{DynamicResource MainBackgroundColor}" ShowGridLines="False" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/> <!-- Main content area -->
|
<ColumnDefinition Width="*"/> <!-- Main content area -->
|
||||||
<ColumnDefinition Width="Auto"/><!-- Space for options button -->
|
<ColumnDefinition Width="Auto"/><!-- Space for options button -->
|
||||||
|
Reference in New Issue
Block a user