mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-07-03 19:53:50 -05:00
Compare commits
27 Commits
24.10.07
...
fc53ca802b
Author | SHA1 | Date | |
---|---|---|---|
fc53ca802b | |||
e6c1394b5d | |||
ce1ef2a519 | |||
77cb0a14c4 | |||
c254a43f77 | |||
640d2ca107 | |||
c186642998 | |||
47a4f1547e | |||
1caf3111d3 | |||
7dcdc4dbb7 | |||
fb21479531 | |||
411bc66d7e | |||
2b2b11e4f2 | |||
bfaba14191 | |||
5640f9d04c | |||
c6a832b006 | |||
fe19094395 | |||
fdd32f441f | |||
e4565f1f6f | |||
0e7a34c5e5 | |||
d535e7ebca | |||
15024434d9 | |||
46e457dde8 | |||
12446c5b83 | |||
ce5ebca87a | |||
cb21a39f62 | |||
b001842a61 |
@ -321,5 +321,5 @@
|
|||||||
"Order": "a084_",
|
"Order": "a084_",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300"
|
"ButtonWidth": "300"
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
"shared":{
|
"shared":{
|
||||||
"CustomDialogFontSize": "12",
|
"CustomDialogFontSize": "12",
|
||||||
"CustomDialogFontSizeHeader": "14",
|
"CustomDialogFontSizeHeader": "14",
|
||||||
"CustomDialogIconSize": "25",
|
"CustomDialogLogoSize": "25",
|
||||||
"CustomDialogWidth": "400",
|
"CustomDialogWidth": "400",
|
||||||
"CustomDialogHeight": "200",
|
"CustomDialogHeight": "200",
|
||||||
"FontSize": "12",
|
"FontSize": "12",
|
||||||
"FontFamily": "Arial",
|
"FontFamily": "Arial",
|
||||||
"FontSizeHeading": "16",
|
"HeadingFontSize": "16",
|
||||||
"HeaderFontFamily": "Consolas, Monaco",
|
"HeaderFontFamily": "Consolas, Monaco",
|
||||||
"CheckBoxBulletDecoratorSize": "14",
|
"CheckBoxBulletDecoratorSize": "14",
|
||||||
"CheckBoxMargin": "15,0,0,2",
|
"CheckBoxMargin": "15,0,0,2",
|
||||||
@ -27,7 +27,7 @@
|
|||||||
"ButtonFontFamily": "Arial",
|
"ButtonFontFamily": "Arial",
|
||||||
"ButtonWidth": "200",
|
"ButtonWidth": "200",
|
||||||
"ButtonHeight": "25",
|
"ButtonHeight": "25",
|
||||||
"ConfigTabButtonFontSize": "16",
|
"ConfigUpdateButtonFontSize": "14",
|
||||||
"SearchBarWidth": "200",
|
"SearchBarWidth": "200",
|
||||||
"SearchBarHeight": "26",
|
"SearchBarHeight": "26",
|
||||||
"SearchBarTextBoxFontSize": "12",
|
"SearchBarTextBoxFontSize": "12",
|
||||||
@ -44,7 +44,7 @@
|
|||||||
"MainForegroundColor": "#232629",
|
"MainForegroundColor": "#232629",
|
||||||
"MainBackgroundColor": "#F7F7F7",
|
"MainBackgroundColor": "#F7F7F7",
|
||||||
"LabelBackgroundColor": "#F7F7F7",
|
"LabelBackgroundColor": "#F7F7F7",
|
||||||
"LinkForegroundColor": "#232629",
|
"LinkForegroundColor": "#484848",
|
||||||
"LinkHoverForegroundColor": "#232629",
|
"LinkHoverForegroundColor": "#232629",
|
||||||
"ScrollBarBackgroundColor": "#4A4D52",
|
"ScrollBarBackgroundColor": "#4A4D52",
|
||||||
"ScrollBarHoverColor": "#5A5D62",
|
"ScrollBarHoverColor": "#5A5D62",
|
||||||
|
@ -2584,6 +2584,36 @@
|
|||||||
],
|
],
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot"
|
"link": "https://christitustech.github.io/winutil/dev/tweaks/z--Advanced-Tweaks---CAUTION/RemoveCopilot"
|
||||||
},
|
},
|
||||||
|
"WPFTweaksRecallOff": {
|
||||||
|
"Content": "Disable Recall",
|
||||||
|
"Description": "Turn Recall off",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a011_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
|
||||||
|
"Name": "DisableAIDataAnalysis",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "1",
|
||||||
|
"OriginalValue": "0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Disable Recall\"
|
||||||
|
DISM /Online /Disable-Feature /FeatureName:Recall
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Enable Recall\"
|
||||||
|
DISM /Online /Enable-Feature /FeatureName:Recall
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DisableRecall"
|
||||||
|
},
|
||||||
"WPFTweaksDisableLMS1": {
|
"WPFTweaksDisableLMS1": {
|
||||||
"Content": "Disable Intel MM (vPro LMS)",
|
"Content": "Disable Intel MM (vPro LMS)",
|
||||||
"Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.",
|
"Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.",
|
||||||
@ -3434,14 +3464,5 @@
|
|||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
"ButtonWidth": "300",
|
"ButtonWidth": "300",
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/RemoveUltPerf"
|
"link": "https://christitustech.github.io/winutil/dev/tweaks/Performance-Plans/RemoveUltPerf"
|
||||||
},
|
|
||||||
"WPFWinUtilShortcut": {
|
|
||||||
"Content": "Create WinUtil Shortcut",
|
|
||||||
"category": "Shortcuts",
|
|
||||||
"panel": "2",
|
|
||||||
"Order": "a082_",
|
|
||||||
"Type": "Button",
|
|
||||||
"ButtonWidth": "300",
|
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Shortcuts/Shortcut"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
91
docs/dev/tweaks/Essential-Tweaks/DisableRecall.md
Normal file
91
docs/dev/tweaks/Essential-Tweaks/DisableRecall.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# Disable Microsoft Recall
|
||||||
|
|
||||||
|
Last Updated: 2024-10-24
|
||||||
|
|
||||||
|
|
||||||
|
!!! info
|
||||||
|
The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.**
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Disables MS Recall built into Windows since 24H2.
|
||||||
|
|
||||||
|
<!-- BEGIN CUSTOM CONTENT -->
|
||||||
|
|
||||||
|
<!-- END CUSTOM CONTENT -->
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Preview Code</summary>
|
||||||
|
|
||||||
|
```json
|
||||||
|
"WPFTweaksRecallOff": {
|
||||||
|
"Content": "Disable Recall",
|
||||||
|
"Description": "Turn Recall off",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a011_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsAI",
|
||||||
|
"Name": "DisableAIDataAnalysis",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "1",
|
||||||
|
"OriginalValue": "0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Disable Recall\"
|
||||||
|
DISM /Online /Disable-Feature /FeatureName:Recall
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Enable Recall\"
|
||||||
|
DISM /Online /Enable-Feature /FeatureName:Recall
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"link": "https://christitustech.github.io/winutil/dev/tweaks/Essential-Tweaks/DisableRecall"
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Invoke Script
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
|
||||||
|
Write-Host "Disable Recall"
|
||||||
|
DISM /Online /Disable-Feature /FeatureName:Recall
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
## Undo Script
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
|
||||||
|
Write-Host "Enable Recall"
|
||||||
|
DISM /Online /Enable-Feature /FeatureName:Recall
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
## Registry Changes
|
||||||
|
Applications and System Components store and retrieve configuration data to modify windows settings, so we can use the registry to change many settings in one place.
|
||||||
|
|
||||||
|
|
||||||
|
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
|
||||||
|
|
||||||
|
### Registry Key: DisableAIDataAnalysis
|
||||||
|
|
||||||
|
**Type:** DWord
|
||||||
|
|
||||||
|
**Original Value:** 0
|
||||||
|
|
||||||
|
**New Value:** 1
|
||||||
|
|
||||||
|
<!-- BEGIN SECOND CUSTOM CONTENT -->
|
||||||
|
|
||||||
|
<!-- END SECOND CUSTOM CONTENT -->
|
||||||
|
|
||||||
|
|
||||||
|
[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
|
@ -1,113 +0,0 @@
|
|||||||
# Create WinUtil Shortcut
|
|
||||||
|
|
||||||
Last Updated: 2024-08-07
|
|
||||||
|
|
||||||
|
|
||||||
!!! info
|
|
||||||
The Development Documentation is auto generated for every compilation of WinUtil, meaning a part of it will always stay up-to-date. **Developers do have the ability to add custom content, which won't be updated automatically.**
|
|
||||||
|
|
||||||
|
|
||||||
<!-- BEGIN CUSTOM CONTENT -->
|
|
||||||
|
|
||||||
<!-- END CUSTOM CONTENT -->
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Preview Code</summary>
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"Content": "Create WinUtil Shortcut",
|
|
||||||
"category": "Shortcuts",
|
|
||||||
"panel": "2",
|
|
||||||
"Order": "a082_",
|
|
||||||
"Type": "Button",
|
|
||||||
"ButtonWidth": "300",
|
|
||||||
"link": "https://christitustech.github.io/winutil/dev/tweaks/Shortcuts/Shortcut"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
## Function: Invoke-WPFShortcut
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
function Invoke-WPFShortcut {
|
|
||||||
<#
|
|
||||||
|
|
||||||
.SYNOPSIS
|
|
||||||
Creates a shortcut and prompts for a save location
|
|
||||||
|
|
||||||
.PARAMETER ShortcutToAdd
|
|
||||||
The name of the shortcut to add
|
|
||||||
|
|
||||||
.PARAMETER RunAsAdmin
|
|
||||||
A boolean value to make 'Run as administrator' property on (true) or off (false), defaults to off
|
|
||||||
|
|
||||||
#>
|
|
||||||
param(
|
|
||||||
$ShortcutToAdd,
|
|
||||||
[bool]$RunAsAdmin = $false
|
|
||||||
)
|
|
||||||
|
|
||||||
# Preper the Shortcut Fields and add an a Custom Icon if it's available, else don't add a Custom Icon.
|
|
||||||
|
|
||||||
Switch ($ShortcutToAdd) {
|
|
||||||
"WinUtil" {
|
|
||||||
# Use Powershell 7 if installed and fallback to PS5 if not
|
|
||||||
if (Get-Command "pwsh" -ErrorAction SilentlyContinue) {
|
|
||||||
$shell = "pwsh.exe"
|
|
||||||
} else {
|
|
||||||
$shell = "powershell.exe"
|
|
||||||
}
|
|
||||||
|
|
||||||
$shellArgs = "-ExecutionPolicy Bypass -Command `"Start-Process $shell -verb runas -ArgumentList `'-Command `"irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1 | iex`"`'"
|
|
||||||
|
|
||||||
$DestinationName = "WinUtil.lnk"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show a File Dialog Browser, to let the User choose the Name and Location of where to save the Shortcut
|
|
||||||
$FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
|
|
||||||
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
|
|
||||||
$FileBrowser.Filter = "Shortcut Files (*.lnk)|*.lnk"
|
|
||||||
$FileBrowser.FileName = $DestinationName
|
|
||||||
|
|
||||||
# Do an Early Return if the Save Operation was canceled by User's Input.
|
|
||||||
$FileBrowserResult = $FileBrowser.ShowDialog()
|
|
||||||
$DialogResultEnum = New-Object System.Windows.Forms.DialogResult
|
|
||||||
if (-not ($FileBrowserResult -eq $DialogResultEnum::OK)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prepare the Shortcut paramter
|
|
||||||
$WshShell = New-Object -comObject WScript.Shell
|
|
||||||
$Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
|
|
||||||
$Shortcut.TargetPath = $shell
|
|
||||||
$Shortcut.Arguments = $shellArgs
|
|
||||||
if (Test-Path -Path $winutildir["logo.ico"]) {
|
|
||||||
$shortcut.IconLocation = $winutildir["logo.ico"]
|
|
||||||
}
|
|
||||||
|
|
||||||
# Save the Shortcut to disk
|
|
||||||
$Shortcut.Save()
|
|
||||||
|
|
||||||
if ($RunAsAdmin -eq $true) {
|
|
||||||
$bytes = [System.IO.File]::ReadAllBytes($FileBrowser.FileName)
|
|
||||||
# Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
|
|
||||||
$bytes[0x15] = $bytes[0x15] -bor 0x20
|
|
||||||
[System.IO.File]::WriteAllBytes($FileBrowser.FileName, $bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "Shortcut for $ShortcutToAdd has been saved to $($FileBrowser.FileName) with 'Run as administrator' set to $RunAsAdmin"
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
<!-- BEGIN SECOND CUSTOM CONTENT -->
|
|
||||||
|
|
||||||
<!-- END SECOND CUSTOM CONTENT -->
|
|
||||||
|
|
||||||
|
|
||||||
[View the JSON file](https://github.com/ChrisTitusTech/winutil/tree/main/config/tweaks.json)
|
|
||||||
|
|
@ -110,7 +110,6 @@ function Remove-Features() {
|
|||||||
$_.FeatureName -NotLike "*NFS*" -AND
|
$_.FeatureName -NotLike "*NFS*" -AND
|
||||||
$_.FeatureName -NotLike "*SearchEngine*" -AND
|
$_.FeatureName -NotLike "*SearchEngine*" -AND
|
||||||
$_.FeatureName -NotLike "*RemoteDesktop*" -AND
|
$_.FeatureName -NotLike "*RemoteDesktop*" -AND
|
||||||
$_.FeatureName -NotLike "*Recall*" -AND
|
|
||||||
$_.State -ne "Disabled"
|
$_.State -ne "Disabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,6 +276,31 @@ function Remove-ProvisionedPackages() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Get-LocalizedUsers
|
||||||
|
{
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Gets a localized user group representation for ICACLS commands (Port from DISMTools PE Helper)
|
||||||
|
.PARAMETER admins
|
||||||
|
Determines whether to get a localized user group representation for the Administrators user group
|
||||||
|
.OUTPUTS
|
||||||
|
A string containing the localized user group
|
||||||
|
.EXAMPLE
|
||||||
|
Get-LocalizedUsers -admins $true
|
||||||
|
#>
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true, Position = 0)] [bool]$admins
|
||||||
|
)
|
||||||
|
if ($admins)
|
||||||
|
{
|
||||||
|
return (Get-LocalGroup | Where-Object { $_.SID.Value -like "S-1-5-32-544" }).Name
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (Get-LocalGroup | Where-Object { $_.SID.Value -like "S-1-5-32-545" }).Name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function Copy-ToUSB([string]$fileToCopy) {
|
function Copy-ToUSB([string]$fileToCopy) {
|
||||||
foreach ($volume in Get-Volume) {
|
foreach ($volume in Get-Volume) {
|
||||||
if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
|
if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
|
||||||
@ -783,41 +807,6 @@ function New-FirstRun {
|
|||||||
Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk"
|
Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk"
|
||||||
Remove-Item -Path "$env:HOMEDRIVE\Users\Default\Desktop\*.lnk"
|
Remove-Item -Path "$env:HOMEDRIVE\Users\Default\Desktop\*.lnk"
|
||||||
|
|
||||||
# ************************************************
|
|
||||||
# Create WinUtil shortcut on the desktop
|
|
||||||
#
|
|
||||||
$desktopPath = "$($env:USERPROFILE)\Desktop"
|
|
||||||
# Specify the target PowerShell command
|
|
||||||
$command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
|
|
||||||
# Specify the path for the shortcut
|
|
||||||
$shortcutPath = Join-Path $desktopPath 'winutil.lnk'
|
|
||||||
# Create a shell object
|
|
||||||
$shell = New-Object -ComObject WScript.Shell
|
|
||||||
|
|
||||||
# Create a shortcut object
|
|
||||||
$shortcut = $shell.CreateShortcut($shortcutPath)
|
|
||||||
|
|
||||||
if (Test-Path -Path "$env:HOMEDRIVE\Windows\cttlogo.png") {
|
|
||||||
$shortcut.IconLocation = "$env:HOMEDRIVE\Windows\cttlogo.png"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set properties of the shortcut
|
|
||||||
$shortcut.TargetPath = "powershell.exe"
|
|
||||||
$shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
|
|
||||||
# Save the shortcut
|
|
||||||
$shortcut.Save()
|
|
||||||
|
|
||||||
# Make the shortcut have 'Run as administrator' property on
|
|
||||||
$bytes = [System.IO.File]::ReadAllBytes($shortcutPath)
|
|
||||||
# Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
|
|
||||||
$bytes[0x15] = $bytes[0x15] -bor 0x20
|
|
||||||
[System.IO.File]::WriteAllBytes($shortcutPath, $bytes)
|
|
||||||
|
|
||||||
Write-Host "Shortcut created at: $shortcutPath"
|
|
||||||
#
|
|
||||||
# Done create WinUtil shortcut on the desktop
|
|
||||||
# ************************************************
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if ((Get-WindowsOptionalFeature -Online | Where-Object { $_.FeatureName -like "Recall" }).Count -gt 0)
|
if ((Get-WindowsOptionalFeature -Online | Where-Object { $_.FeatureName -like "Recall" }).Count -gt 0)
|
||||||
|
@ -6,6 +6,9 @@ function Show-CustomDialog {
|
|||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
This function creates a custom dialog box with the specified message and additional elements such as an image, heading, and an OK button. The dialog box is designed with a green border, rounded corners, and a black background.
|
This function creates a custom dialog box with the specified message and additional elements such as an image, heading, and an OK button. The dialog box is designed with a green border, rounded corners, and a black background.
|
||||||
|
|
||||||
|
.PARAMETER Title
|
||||||
|
The Title to use for the dialog window's Title Bar, this will not be visible by the user, as window styling is set to None.
|
||||||
|
|
||||||
.PARAMETER Message
|
.PARAMETER Message
|
||||||
The message to be displayed in the dialog box.
|
The message to be displayed in the dialog box.
|
||||||
|
|
||||||
@ -16,60 +19,102 @@ function Show-CustomDialog {
|
|||||||
The height of the custom dialog window.
|
The height of the custom dialog window.
|
||||||
|
|
||||||
.PARAMETER FontSize
|
.PARAMETER FontSize
|
||||||
The Font Size for text shown inside the custom dialog window.
|
The Font Size of message shown inside custom dialog window.
|
||||||
|
|
||||||
.PARAMETER HeaderFontSize
|
.PARAMETER HeaderFontSize
|
||||||
The Font Size for the Header of the custom dialog window.
|
The Font Size for the Header of custom dialog window.
|
||||||
|
|
||||||
.PARAMETER IconSize
|
.PARAMETER LogoSize
|
||||||
The Size to use for Icon inside the custom dialog window.
|
The Size of the Logo used inside the custom dialog window.
|
||||||
|
|
||||||
|
.PARAMETER ForegroundColor
|
||||||
|
The Foreground Color of dialog window title & message.
|
||||||
|
|
||||||
|
.PARAMETER BackgroundColor
|
||||||
|
The Background Color of dialog window.
|
||||||
|
|
||||||
|
.PARAMETER BorderColor
|
||||||
|
The Color for dialog window border.
|
||||||
|
|
||||||
|
.PARAMETER ButtonBackgroundColor
|
||||||
|
The Background Color for Buttons in dialog window.
|
||||||
|
|
||||||
|
.PARAMETER ButtonForegroundColor
|
||||||
|
The Foreground Color for Buttons in dialog window.
|
||||||
|
|
||||||
|
.PARAMETER ShadowColor
|
||||||
|
The Color used when creating the Drop-down Shadow effect for dialog window.
|
||||||
|
|
||||||
|
.PARAMETER LogoColor
|
||||||
|
The Color of WinUtil Text found next to WinUtil's Logo inside dialog window.
|
||||||
|
|
||||||
|
.PARAMETER LinkForegroundColor
|
||||||
|
The Foreground Color for Links inside dialog window.
|
||||||
|
|
||||||
|
.PARAMETER LinkHoverForegroundColor
|
||||||
|
The Foreground Color for Links when the mouse pointer hovers over them inside dialog window.
|
||||||
|
|
||||||
.PARAMETER EnableScroll
|
.PARAMETER EnableScroll
|
||||||
A flag indicating whether to enable scrolling if the content exceeds the window size.
|
A flag indicating whether to enable scrolling if the content exceeds the window size.
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
Show-CustomDialog -Message "This is a custom dialog with a message and an image above." -Width 300 -Height 200
|
Show-CustomDialog -Title "My Custom Dialog" -Message "This is a custom dialog with a message and an image above." -Width 300 -Height 200
|
||||||
|
|
||||||
|
Makes a new Custom Dialog with the title 'My Custom Dialog' and a message 'This is a custom dialog with a message and an image above.', with dimensions of 300 by 200 pixels.
|
||||||
|
Other styling options are grabbed from '$sync.Form.Resources' global variable.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
$foregroundColor = New-Object System.Windows.Media.SolidColorBrush("#0088e5")
|
||||||
|
$backgroundColor = New-Object System.Windows.Media.SolidColorBrush("#1e1e1e")
|
||||||
|
$linkForegroundColor = New-Object System.Windows.Media.SolidColorBrush("#0088e5")
|
||||||
|
$linkHoverForegroundColor = New-Object System.Windows.Media.SolidColorBrush("#005289")
|
||||||
|
Show-CustomDialog -Title "My Custom Dialog" -Message "This is a custom dialog with a message and an image above." -Width 300 -Height 200 -ForegroundColor $foregroundColor -BackgroundColor $backgroundColor -LinkForegroundColor $linkForegroundColor -LinkHoverForegroundColor $linkHoverForegroundColor
|
||||||
|
|
||||||
|
Makes a new Custom Dialog with the title 'My Custom Dialog' and a message 'This is a custom dialog with a message and an image above.', with dimensions of 300 by 200 pixels, with a link foreground (and general foreground) colors of '#0088e5', background color of '#1e1e1e', and Link Color on Hover of '005289', all of which are in Hexadecimal (the '#' Symbol is required by SolidColorBrush Constructor).
|
||||||
|
Other styling options are grabbed from '$sync.Form.Resources' global variable.
|
||||||
|
|
||||||
#>
|
#>
|
||||||
param(
|
param(
|
||||||
|
[string]$Title,
|
||||||
[string]$Message,
|
[string]$Message,
|
||||||
[int]$Width = $sync.Form.Resources.CustomDialogWidth,
|
[int]$Width = $sync.Form.Resources.CustomDialogWidth,
|
||||||
[int]$Height = $sync.Form.Resources.CustomDialogHeight,
|
[int]$Height = $sync.Form.Resources.CustomDialogHeight,
|
||||||
|
|
||||||
|
[System.Windows.Media.FontFamily]$FontFamily = $sync.Form.Resources.FontFamily,
|
||||||
[int]$FontSize = $sync.Form.Resources.CustomDialogFontSize,
|
[int]$FontSize = $sync.Form.Resources.CustomDialogFontSize,
|
||||||
[int]$HeaderFontSize = $sync.Form.Resources.CustomDialogFontSizeHeader,
|
[int]$HeaderFontSize = $sync.Form.Resources.CustomDialogFontSizeHeader,
|
||||||
[int]$IconSize = $sync.Form.Resources.CustomDialogLogoSize,
|
[int]$LogoSize = $sync.Form.Resources.CustomDialogLogoSize,
|
||||||
|
|
||||||
|
[System.Windows.Media.Color]$ShadowColor = "#AAAAAAAA",
|
||||||
|
[System.Windows.Media.SolidColorBrush]$LogoColor = $sync.Form.Resources.LabelboxForegroundColor,
|
||||||
|
[System.Windows.Media.SolidColorBrush]$BorderColor = $sync.Form.Resources.BorderColor,
|
||||||
|
[System.Windows.Media.SolidColorBrush]$ForegroundColor = $sync.Form.Resources.MainForegroundColor,
|
||||||
|
[System.Windows.Media.SolidColorBrush]$BackgroundColor = $sync.Form.Resources.MainBackgroundColor,
|
||||||
|
[System.Windows.Media.SolidColorBrush]$ButtonForegroundColor = $sync.Form.Resources.ButtonInstallForegroundColor,
|
||||||
|
[System.Windows.Media.SolidColorBrush]$ButtonBackgroundColor = $sync.Form.Resources.ButtonInstallBackgroundColor,
|
||||||
|
[System.Windows.Media.SolidColorBrush]$LinkForegroundColor = $sync.Form.Resources.LinkForegroundColor,
|
||||||
|
[System.Windows.Media.SolidColorBrush]$LinkHoverForegroundColor = $sync.Form.Resources.LinkHoverForegroundColor,
|
||||||
|
|
||||||
[bool]$EnableScroll = $false
|
[bool]$EnableScroll = $false
|
||||||
)
|
)
|
||||||
|
|
||||||
Add-Type -AssemblyName PresentationFramework
|
|
||||||
|
|
||||||
# Define theme colors
|
|
||||||
$foregroundColor = $sync.Form.Resources.MainForegroundColor
|
|
||||||
$backgroundColor = $sync.Form.Resources.MainBackgroundColor
|
|
||||||
$font = New-Object Windows.Media.FontFamily("Consolas")
|
|
||||||
$borderColor = $sync.Form.Resources.BorderColor # ButtonInstallBackgroundColor
|
|
||||||
$buttonBackgroundColor = $sync.Form.Resources.ButtonInstallBackgroundColor
|
|
||||||
$buttonForegroundColor = $sync.Form.Resources.ButtonInstallForegroundColor
|
|
||||||
$shadowColor = [Windows.Media.ColorConverter]::ConvertFromString("#AAAAAAAA")
|
|
||||||
$logocolor = $sync.Form.Resources.LabelboxForegroundColor
|
|
||||||
|
|
||||||
# Create a custom dialog window
|
# Create a custom dialog window
|
||||||
$dialog = New-Object Windows.Window
|
$dialog = New-Object Windows.Window
|
||||||
$dialog.Title = "About"
|
$dialog.Title = $Title
|
||||||
$dialog.Height = $Height
|
$dialog.Height = $Height
|
||||||
$dialog.Width = $Width
|
$dialog.Width = $Width
|
||||||
$dialog.Margin = New-Object Windows.Thickness(10) # Add margin to the entire dialog box
|
$dialog.Margin = New-Object Windows.Thickness(10) # Add margin to the entire dialog box
|
||||||
$dialog.WindowStyle = [Windows.WindowStyle]::None # Remove title bar and window controls
|
$dialog.WindowStyle = [Windows.WindowStyle]::None # Remove title bar and window controls
|
||||||
$dialog.ResizeMode = [Windows.ResizeMode]::NoResize # Disable resizing
|
$dialog.ResizeMode = [Windows.ResizeMode]::NoResize # Disable resizing
|
||||||
$dialog.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen # Center the window
|
$dialog.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen # Center the window
|
||||||
$dialog.Foreground = $foregroundColor
|
$dialog.Foreground = $ForegroundColor
|
||||||
$dialog.Background = $backgroundColor
|
$dialog.Background = $BackgroundColor
|
||||||
$dialog.FontFamily = $font
|
$dialog.FontFamily = $FontFamily
|
||||||
$dialog.FontSize = $FontSize
|
$dialog.FontSize = $FontSize
|
||||||
|
|
||||||
# Create a Border for the green edge with rounded corners
|
# Create a Border for the green edge with rounded corners
|
||||||
$border = New-Object Windows.Controls.Border
|
$border = New-Object Windows.Controls.Border
|
||||||
$border.BorderBrush = $borderColor
|
$border.BorderBrush = $BorderColor
|
||||||
$border.BorderThickness = New-Object Windows.Thickness(1) # Adjust border thickness as needed
|
$border.BorderThickness = New-Object Windows.Thickness(1) # Adjust border thickness as needed
|
||||||
$border.CornerRadius = New-Object Windows.CornerRadius(10) # Adjust the radius for rounded corners
|
$border.CornerRadius = New-Object Windows.CornerRadius(10) # Adjust the radius for rounded corners
|
||||||
|
|
||||||
@ -89,7 +134,7 @@ function Show-CustomDialog {
|
|||||||
$grid = New-Object Windows.Controls.Grid
|
$grid = New-Object Windows.Controls.Grid
|
||||||
$border.Child = $grid
|
$border.Child = $grid
|
||||||
|
|
||||||
# Add the following line to show gridlines
|
# Uncomment the following line to show gridlines
|
||||||
#$grid.ShowGridLines = $true
|
#$grid.ShowGridLines = $true
|
||||||
|
|
||||||
# Add the following line to set the background color of the grid
|
# Add the following line to set the background color of the grid
|
||||||
@ -102,7 +147,6 @@ function Show-CustomDialog {
|
|||||||
$border.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch
|
$border.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch
|
||||||
$border.VerticalAlignment = [Windows.VerticalAlignment]::Stretch
|
$border.VerticalAlignment = [Windows.VerticalAlignment]::Stretch
|
||||||
|
|
||||||
|
|
||||||
# Set up Row Definitions
|
# Set up Row Definitions
|
||||||
$row0 = New-Object Windows.Controls.RowDefinition
|
$row0 = New-Object Windows.Controls.RowDefinition
|
||||||
$row0.Height = [Windows.GridLength]::Auto
|
$row0.Height = [Windows.GridLength]::Auto
|
||||||
@ -129,17 +173,18 @@ function Show-CustomDialog {
|
|||||||
[Windows.Controls.Grid]::SetRow($stackPanel, 0) # Set the row to the second row (0-based index)
|
[Windows.Controls.Grid]::SetRow($stackPanel, 0) # Set the row to the second row (0-based index)
|
||||||
|
|
||||||
# Add SVG path to the stack panel
|
# Add SVG path to the stack panel
|
||||||
$stackPanel.Children.Add((Invoke-WinUtilAssets -Type "logo" -Size 25))
|
$stackPanel.Children.Add((Invoke-WinUtilAssets -Type "logo" -Size $LogoSize))
|
||||||
|
|
||||||
# Add "Winutil" text
|
# Add "Winutil" text
|
||||||
$winutilTextBlock = New-Object Windows.Controls.TextBlock
|
$winutilTextBlock = New-Object Windows.Controls.TextBlock
|
||||||
$winutilTextBlock.Text = "Winutil"
|
$winutilTextBlock.Text = "Winutil"
|
||||||
$winutilTextBlock.FontSize = $HeaderFontSize
|
$winutilTextBlock.FontSize = $HeaderFontSize
|
||||||
$winutilTextBlock.Foreground = $logocolor
|
$winutilTextBlock.Foreground = $LogoColor
|
||||||
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 10, 10, 5) # Add margins around the text block
|
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 10, 10, 5) # Add margins around the text block
|
||||||
$stackPanel.Children.Add($winutilTextBlock)
|
$stackPanel.Children.Add($winutilTextBlock)
|
||||||
# Add TextBlock for information with text wrapping and margins
|
# Add TextBlock for information with text wrapping and margins
|
||||||
$messageTextBlock = New-Object Windows.Controls.TextBlock
|
$messageTextBlock = New-Object Windows.Controls.TextBlock
|
||||||
|
$messageTextBlock.FontSize = $FontSize
|
||||||
$messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping
|
$messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping
|
||||||
$messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left
|
$messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left
|
||||||
$messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top
|
$messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top
|
||||||
@ -162,7 +207,7 @@ function Show-CustomDialog {
|
|||||||
$hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value)
|
$hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value)
|
||||||
$hyperlink.Inlines.Add($match.Groups[2].Value)
|
$hyperlink.Inlines.Add($match.Groups[2].Value)
|
||||||
$hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline
|
$hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline
|
||||||
$hyperlink.Foreground = $sync.Form.Resources.LinkForegroundColor
|
$hyperlink.Foreground = $LinkForegroundColor
|
||||||
|
|
||||||
$hyperlink.Add_Click({
|
$hyperlink.Add_Click({
|
||||||
param($sender, $args)
|
param($sender, $args)
|
||||||
@ -170,11 +215,15 @@ function Show-CustomDialog {
|
|||||||
})
|
})
|
||||||
$hyperlink.Add_MouseEnter({
|
$hyperlink.Add_MouseEnter({
|
||||||
param($sender, $args)
|
param($sender, $args)
|
||||||
$sender.Foreground = $sync.Form.Resources.LinkHoverForegroundColor
|
$sender.Foreground = $LinkHoverForegroundColor
|
||||||
|
$sender.FontSize = ($FontSize + ($FontSize / 4))
|
||||||
|
$sender.FontWeight = "SemiBold"
|
||||||
})
|
})
|
||||||
$hyperlink.Add_MouseLeave({
|
$hyperlink.Add_MouseLeave({
|
||||||
param($sender, $args)
|
param($sender, $args)
|
||||||
$sender.Foreground = $sync.Form.Resources.LinkForegroundColor
|
$sender.Foreground = $LinkForegroundColor
|
||||||
|
$sender.FontSize = $FontSize
|
||||||
|
$sender.FontWeight = "Normal"
|
||||||
})
|
})
|
||||||
|
|
||||||
$messageTextBlock.Inlines.Add($hyperlink)
|
$messageTextBlock.Inlines.Add($hyperlink)
|
||||||
@ -218,7 +267,7 @@ function Show-CustomDialog {
|
|||||||
$okButton.Margin = New-Object Windows.Thickness(0, 0, 0, 10)
|
$okButton.Margin = New-Object Windows.Thickness(0, 0, 0, 10)
|
||||||
$okButton.Background = $buttonBackgroundColor
|
$okButton.Background = $buttonBackgroundColor
|
||||||
$okButton.Foreground = $buttonForegroundColor
|
$okButton.Foreground = $buttonForegroundColor
|
||||||
$okButton.BorderBrush = $borderColor
|
$okButton.BorderBrush = $BorderColor
|
||||||
$okButton.Add_Click({
|
$okButton.Add_Click({
|
||||||
$dialog.Close()
|
$dialog.Close()
|
||||||
})
|
})
|
||||||
|
@ -50,7 +50,6 @@ function Invoke-WPFButton {
|
|||||||
"WPFFixesNetwork" {Invoke-WPFFixesNetwork}
|
"WPFFixesNetwork" {Invoke-WPFFixesNetwork}
|
||||||
"WPFUpdatesdisable" {Invoke-WPFUpdatesdisable}
|
"WPFUpdatesdisable" {Invoke-WPFUpdatesdisable}
|
||||||
"WPFUpdatessecurity" {Invoke-WPFUpdatessecurity}
|
"WPFUpdatessecurity" {Invoke-WPFUpdatessecurity}
|
||||||
"WPFWinUtilShortcut" {Invoke-WPFShortcut -ShortcutToAdd "WinUtil" -RunAsAdmin $true}
|
|
||||||
"WPFGetInstalled" {Invoke-WPFGetInstalled -CheckBox "winget"}
|
"WPFGetInstalled" {Invoke-WPFGetInstalled -CheckBox "winget"}
|
||||||
"WPFGetInstalledTweaks" {Invoke-WPFGetInstalled -CheckBox "tweaks"}
|
"WPFGetInstalledTweaks" {Invoke-WPFGetInstalled -CheckBox "tweaks"}
|
||||||
"WPFGetIso" {Invoke-WPFGetIso}
|
"WPFGetIso" {Invoke-WPFGetIso}
|
||||||
|
@ -162,6 +162,35 @@ public class PowerManagement {
|
|||||||
Write-Host "Removing Appx Bloat"
|
Write-Host "Removing Appx Bloat"
|
||||||
Remove-ProvisionedPackages
|
Remove-ProvisionedPackages
|
||||||
|
|
||||||
|
# Detect Windows 11 24H2 and add dependency to FileExp to prevent Explorer look from going back - thanks @WitherOrNot and @thecatontheceiling
|
||||||
|
if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,26100,1))) -eq $true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Test-Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" -PathType Leaf)
|
||||||
|
{
|
||||||
|
# Found the culprit. Do the following:
|
||||||
|
|
||||||
|
# 1. Take ownership of the file, from TrustedInstaller to Administrators
|
||||||
|
takeown /F "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" /A
|
||||||
|
|
||||||
|
# 2. Set ACLs so that we can write to it
|
||||||
|
icacls "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" /grant "$(Get-LocalizedUsers -admins $true):(M)" | Out-Host
|
||||||
|
|
||||||
|
# 3. Open the file and do the modification
|
||||||
|
$appxManifest = Get-Content -Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml"
|
||||||
|
$originalLine = $appxManifest[13]
|
||||||
|
$dependency = "`n <PackageDependency Name=`"Microsoft.WindowsAppRuntime.CBS`" MinVersion=`"1.0.0.0`" Publisher=`"CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US`" />"
|
||||||
|
$appxManifest[13] = "$originalLine$dependency"
|
||||||
|
Set-Content -Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" -Value $appxManifest -Force -Encoding utf8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory
|
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
|
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory
|
||||||
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
|
Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory
|
||||||
|
54
functions/public/Invoke-WPFPopup.ps1
Normal file
54
functions/public/Invoke-WPFPopup.ps1
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
function Invoke-WPFPopup {
|
||||||
|
param (
|
||||||
|
[ValidateSet("Show", "Hide", "Toggle")]
|
||||||
|
[string]$Action = "",
|
||||||
|
|
||||||
|
[string[]]$Popups = @(),
|
||||||
|
|
||||||
|
[ValidateScript({
|
||||||
|
$invalid = $_.GetEnumerator() | Where-Object { $_.Value -notin @("Show", "Hide", "Toggle") }
|
||||||
|
if ($invalid) {
|
||||||
|
throw "Found invalid Popup-Action pair(s): " + ($invalid | ForEach-Object { "$($_.Key) = $($_.Value)" } -join "; ")
|
||||||
|
}
|
||||||
|
$true
|
||||||
|
})]
|
||||||
|
[hashtable]$PopupActionTable = @{}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (-not $PopupActionTable.Count -and (-not $Action -or -not $Popups.Count)) {
|
||||||
|
throw "Provide either 'PopupActionTable' or both 'Action' and 'Popups'."
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($PopupActionTable.Count -and ($Action -or $Popups.Count)) {
|
||||||
|
throw "Use 'PopupActionTable' on its own, or 'Action' with 'Popups'."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Collect popups and actions
|
||||||
|
$PopupsToProcess = if ($PopupActionTable.Count) {
|
||||||
|
$PopupActionTable.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ Name = "$($_.Key)Popup"; Action = $_.Value } }
|
||||||
|
} else {
|
||||||
|
$Popups | ForEach-Object { [PSCustomObject]@{ Name = "$_`Popup"; Action = $Action } }
|
||||||
|
}
|
||||||
|
|
||||||
|
$PopupsNotFound = @()
|
||||||
|
|
||||||
|
# Apply actions
|
||||||
|
foreach ($popupEntry in $PopupsToProcess) {
|
||||||
|
$popupName = $popupEntry.Name
|
||||||
|
|
||||||
|
if (-not $sync.$popupName) {
|
||||||
|
$PopupsNotFound += $popupName
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$sync.$popupName.IsOpen = switch ($popupEntry.Action) {
|
||||||
|
"Show" { $true }
|
||||||
|
"Hide" { $false }
|
||||||
|
"Toggle" { -not $sync.$popupName.IsOpen }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($PopupsNotFound.Count -gt 0) {
|
||||||
|
throw "Could not find the following popups: $($PopupsNotFound -join ', ')"
|
||||||
|
}
|
||||||
|
}
|
@ -1,72 +0,0 @@
|
|||||||
function Invoke-WPFShortcut {
|
|
||||||
<#
|
|
||||||
|
|
||||||
.SYNOPSIS
|
|
||||||
Creates a shortcut and prompts for a save location
|
|
||||||
|
|
||||||
.PARAMETER ShortcutToAdd
|
|
||||||
The name of the shortcut to add
|
|
||||||
|
|
||||||
.PARAMETER RunAsAdmin
|
|
||||||
A boolean value to make 'Run as administrator' property on (true) or off (false), defaults to off
|
|
||||||
|
|
||||||
#>
|
|
||||||
param(
|
|
||||||
$ShortcutToAdd,
|
|
||||||
[bool]$RunAsAdmin = $false
|
|
||||||
)
|
|
||||||
|
|
||||||
# Preper the Shortcut Fields and add an a Custom Icon if it's available, else don't add a Custom Icon.
|
|
||||||
|
|
||||||
Switch ($ShortcutToAdd) {
|
|
||||||
"WinUtil" {
|
|
||||||
# Use Powershell 7 if installed and fallback to PS5 if not
|
|
||||||
if (Get-Command "pwsh" -ErrorAction SilentlyContinue) {
|
|
||||||
$shell = "pwsh.exe"
|
|
||||||
} else {
|
|
||||||
$shell = "powershell.exe"
|
|
||||||
}
|
|
||||||
|
|
||||||
$shellArgs = "-ExecutionPolicy Bypass -Command `"Start-Process $shell -verb runas -ArgumentList `'-Command `"irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1 | iex`"`'"
|
|
||||||
|
|
||||||
$DestinationName = "WinUtil.lnk"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show a File Dialog Browser, to let the User choose the Name and Location of where to save the Shortcut
|
|
||||||
$FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
|
|
||||||
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
|
|
||||||
$FileBrowser.Filter = "Shortcut Files (*.lnk)|*.lnk"
|
|
||||||
$FileBrowser.FileName = $DestinationName
|
|
||||||
|
|
||||||
# Do an Early Return if the Save Operation was canceled by User's Input.
|
|
||||||
$FileBrowserResult = $FileBrowser.ShowDialog()
|
|
||||||
$DialogResultEnum = New-Object System.Windows.Forms.DialogResult
|
|
||||||
if (-not ($FileBrowserResult -eq $DialogResultEnum::OK)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prepare the Shortcut paramter
|
|
||||||
$WshShell = New-Object -comObject WScript.Shell
|
|
||||||
$Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
|
|
||||||
$Shortcut.TargetPath = $shell
|
|
||||||
$Shortcut.Arguments = $shellArgs
|
|
||||||
if (-NOT (Test-Path -Path $winutildir["logo.ico"])) {
|
|
||||||
Invoke-WebRequest -Uri "https://christitus.com/images/logo-full.ico" -OutFile $winutildir["logo.ico"]
|
|
||||||
}
|
|
||||||
if (Test-Path -Path $winutildir["logo.ico"]) {
|
|
||||||
$shortcut.IconLocation = $winutildir["logo.ico"]
|
|
||||||
}
|
|
||||||
|
|
||||||
# Save the Shortcut to disk
|
|
||||||
$Shortcut.Save()
|
|
||||||
|
|
||||||
if ($RunAsAdmin -eq $true) {
|
|
||||||
$bytes = [System.IO.File]::ReadAllBytes($FileBrowser.FileName)
|
|
||||||
# Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex
|
|
||||||
$bytes[0x15] = $bytes[0x15] -bor 0x20
|
|
||||||
[System.IO.File]::WriteAllBytes($FileBrowser.FileName, $bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "Shortcut for $ShortcutToAdd has been saved to $($FileBrowser.FileName) with 'Run as administrator' set to $RunAsAdmin"
|
|
||||||
}
|
|
@ -142,7 +142,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.FontSize = $theme.FontSizeHeading
|
$label.FontSize = $theme.HeadingFontSize
|
||||||
$label.FontFamily = $theme.HeaderFontFamily
|
$label.FontFamily = $theme.HeaderFontFamily
|
||||||
$stackPanel.Children.Add($label) | Out-Null
|
$stackPanel.Children.Add($label) | Out-Null
|
||||||
|
|
||||||
|
@ -42,4 +42,24 @@ function Invoke-WPFUpdatesdefault {
|
|||||||
Write-Host "==================================================="
|
Write-Host "==================================================="
|
||||||
Write-Host "--- Windows Update Settings Reset to Default ---"
|
Write-Host "--- Windows Update Settings Reset to Default ---"
|
||||||
Write-Host "==================================================="
|
Write-Host "==================================================="
|
||||||
|
|
||||||
|
Start-Process -FilePath "secedit" -ArgumentList "/configure /cfg $env:windir\inf\defltbase.inf /db defltbase.sdb /verbose" -Wait
|
||||||
|
Start-Process -FilePath "cmd.exe" -ArgumentList "/c RD /S /Q $env:WinDir\System32\GroupPolicyUsers" -Wait
|
||||||
|
Start-Process -FilePath "cmd.exe" -ArgumentList "/c RD /S /Q $env:WinDir\System32\GroupPolicy" -Wait
|
||||||
|
Start-Process -FilePath "gpupdate" -ArgumentList "/force" -Wait
|
||||||
|
Remove-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKCU:\Software\Microsoft\WindowsSelfHost" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKCU:\Software\Policies" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\Microsoft\Policies" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\Microsoft\WindowsSelfHost" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\Policies" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Policies" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
Write-Host "==================================================="
|
||||||
|
Write-Host "--- Windows Local Policies Reset to Default ---"
|
||||||
|
Write-Host "==================================================="
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
{{ 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 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.
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
113
scripts/main.ps1
113
scripts/main.ps1
@ -31,23 +31,20 @@ $sync.runspace.Open()
|
|||||||
|
|
||||||
# Create classes for different exceptions
|
# Create classes for different exceptions
|
||||||
|
|
||||||
class WingetFailedInstall : Exception {
|
class WingetFailedInstall : Exception {
|
||||||
[string]$additionalData
|
[string]$additionalData
|
||||||
|
|
||||||
WingetFailedInstall($Message) : base($Message) {}
|
WingetFailedInstall($Message) : base($Message) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChocoFailedInstall : Exception {
|
class ChocoFailedInstall : Exception {
|
||||||
[string]$additionalData
|
[string]$additionalData
|
||||||
|
|
||||||
ChocoFailedInstall($Message) : base($Message) {}
|
ChocoFailedInstall($Message) : base($Message) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GenericException : Exception {
|
class GenericException : Exception {
|
||||||
[string]$additionalData
|
[string]$additionalData
|
||||||
|
|
||||||
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'
|
||||||
@ -254,12 +251,7 @@ $commonKeyEvents = {
|
|||||||
$sync["Form"].Add_PreViewKeyDown($commonKeyEvents)
|
$sync["Form"].Add_PreViewKeyDown($commonKeyEvents)
|
||||||
|
|
||||||
$sync["Form"].Add_MouseLeftButtonDown({
|
$sync["Form"].Add_MouseLeftButtonDown({
|
||||||
# Hide Settings and Theme Popup on click anywhere else
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings", "Theme")
|
||||||
if ($sync.SettingsButton.IsOpen -or
|
|
||||||
$sync.ThemePopup.IsOpen) {
|
|
||||||
$sync.SettingsPopup.IsOpen = $false
|
|
||||||
$sync.ThemePopup.IsOpen = $false
|
|
||||||
}
|
|
||||||
$sync["Form"].DragMove()
|
$sync["Form"].DragMove()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -277,12 +269,7 @@ $sync["Form"].Add_MouseDoubleClick({
|
|||||||
|
|
||||||
$sync["Form"].Add_Deactivated({
|
$sync["Form"].Add_Deactivated({
|
||||||
Write-Debug "WinUtil lost focus"
|
Write-Debug "WinUtil lost focus"
|
||||||
# Hide Settings and Theme Popup on Winutil Focus Loss
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings", "Theme")
|
||||||
if ($sync.SettingsButton.IsOpen -or
|
|
||||||
$sync.ThemePopup.IsOpen) {
|
|
||||||
$sync.SettingsPopup.IsOpen = $false
|
|
||||||
$sync.ThemePopup.IsOpen = $false
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync["Form"].Add_ContentRendered({
|
$sync["Form"].Add_ContentRendered({
|
||||||
@ -521,101 +508,79 @@ Set-WinUtilTaskbaritem -overlay "logo"
|
|||||||
$sync["Form"].Add_Activated({
|
$sync["Form"].Add_Activated({
|
||||||
Set-WinUtilTaskbaritem -overlay "logo"
|
Set-WinUtilTaskbaritem -overlay "logo"
|
||||||
})
|
})
|
||||||
# Define event handler for ThemeButton click
|
|
||||||
$sync["ThemeButton"].Add_Click({
|
|
||||||
if ($sync.ThemePopup.IsOpen) {
|
|
||||||
$sync.ThemePopup.IsOpen = $false
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$sync.ThemePopup.IsOpen = $true
|
|
||||||
}
|
|
||||||
$sync.SettingsPopup.IsOpen = $false
|
|
||||||
})
|
|
||||||
|
|
||||||
# Define event handlers for menu items
|
$sync["ThemeButton"].Add_Click({
|
||||||
|
Write-Debug "ThemeButton clicked"
|
||||||
|
Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Hide"; "Theme" = "Toggle" }
|
||||||
|
$_.Handled = $false
|
||||||
|
})
|
||||||
$sync["AutoThemeMenuItem"].Add_Click({
|
$sync["AutoThemeMenuItem"].Add_Click({
|
||||||
$sync.ThemePopup.IsOpen = $false
|
Write-Debug "About clicked"
|
||||||
|
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
||||||
Invoke-WinutilThemeChange -theme "Auto"
|
Invoke-WinutilThemeChange -theme "Auto"
|
||||||
$_.Handled = $false
|
$_.Handled = $false
|
||||||
})
|
})
|
||||||
# Define event handlers for menu items
|
|
||||||
$sync["DarkThemeMenuItem"].Add_Click({
|
$sync["DarkThemeMenuItem"].Add_Click({
|
||||||
$sync.ThemePopup.IsOpen = $false
|
Write-Debug "Dark Theme clicked"
|
||||||
|
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
||||||
Invoke-WinutilThemeChange -theme "Dark"
|
Invoke-WinutilThemeChange -theme "Dark"
|
||||||
$_.Handled = $false
|
$_.Handled = $false
|
||||||
})
|
})
|
||||||
# Define event handlers for menu items
|
|
||||||
$sync["LightThemeMenuItem"].Add_Click({
|
$sync["LightThemeMenuItem"].Add_Click({
|
||||||
$sync.ThemePopup.IsOpen = $false
|
Write-Debug "Light Theme clicked"
|
||||||
|
Invoke-WPFPopup -Action "Hide" -Popups @("Theme")
|
||||||
Invoke-WinutilThemeChange -theme "Light"
|
Invoke-WinutilThemeChange -theme "Light"
|
||||||
$_.Handled = $false
|
$_.Handled = $false
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
# Define event handler for button click
|
|
||||||
$sync["SettingsButton"].Add_Click({
|
|
||||||
Write-Debug "SettingsButton clicked"
|
|
||||||
if ($sync.SettingsPopup.IsOpen) {
|
|
||||||
$sync.SettingsPopup.IsOpen = $false
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$sync.SettingsPopup.IsOpen = $true
|
|
||||||
}
|
|
||||||
$sync.ThemePopup.IsOpen = $false
|
|
||||||
$_.Handled = $false
|
|
||||||
})
|
})
|
||||||
|
|
||||||
# Define event handlers for menu items
|
|
||||||
|
$sync["SettingsButton"].Add_Click({
|
||||||
|
Write-Debug "SettingsButton clicked"
|
||||||
|
Invoke-WPFPopup -PopupActionTable @{ "Settings" = "Toggle"; "Theme" = "Hide" }
|
||||||
|
$_.Handled = $false
|
||||||
|
})
|
||||||
$sync["ImportMenuItem"].Add_Click({
|
$sync["ImportMenuItem"].Add_Click({
|
||||||
# Handle Import menu item click
|
|
||||||
Write-Debug "Import clicked"
|
Write-Debug "Import clicked"
|
||||||
$sync["SettingsPopup"].IsOpen = $false
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
||||||
Invoke-WPFImpex -type "import"
|
Invoke-WPFImpex -type "import"
|
||||||
$_.Handled = $false
|
$_.Handled = $false
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync["ExportMenuItem"].Add_Click({
|
$sync["ExportMenuItem"].Add_Click({
|
||||||
# Handle Export menu item click
|
|
||||||
Write-Debug "Export clicked"
|
Write-Debug "Export clicked"
|
||||||
$sync["SettingsPopup"].IsOpen = $false
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
||||||
Invoke-WPFImpex -type "export"
|
Invoke-WPFImpex -type "export"
|
||||||
$_.Handled = $false
|
$_.Handled = $false
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync["AboutMenuItem"].Add_Click({
|
$sync["AboutMenuItem"].Add_Click({
|
||||||
# Handle Export menu item click
|
|
||||||
Write-Debug "About clicked"
|
Write-Debug "About clicked"
|
||||||
$sync["SettingsPopup"].IsOpen = $false
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
||||||
|
|
||||||
$authorInfo = @"
|
$authorInfo = @"
|
||||||
Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a>
|
Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a>
|
||||||
Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a>
|
Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a>
|
||||||
MicroWin : <a href="https://github.com/KonTy">@KonTy</a>
|
MicroWin : <a href="https://github.com/KonTy">@KonTy</a>, <a href="https://github.com/CodingWonders">@CodingWonders</a>
|
||||||
GitHub : <a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech/winutil</a>
|
GitHub : <a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech/winutil</a>
|
||||||
Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sync.version)">$($sync.version)</a>
|
Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sync.version)">$($sync.version)</a>
|
||||||
"@
|
"@
|
||||||
|
Show-CustomDialog -Title "About" -Message $authorInfo
|
||||||
Show-CustomDialog -Message $authorInfo -LogoSize $LogoSize
|
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync["SponsorMenuItem"].Add_Click({
|
$sync["SponsorMenuItem"].Add_Click({
|
||||||
# Handle Export menu item click
|
|
||||||
Write-Debug "Sponsors clicked"
|
Write-Debug "Sponsors clicked"
|
||||||
$sync["SettingsPopup"].IsOpen = $false
|
Invoke-WPFPopup -Action "Hide" -Popups @("Settings")
|
||||||
|
|
||||||
$authorInfo = @"
|
$authorInfo = @"
|
||||||
<a href="https://github.com/sponsors/ChrisTitusTech">Current sponsors for ChrisTitusTech:</a>
|
<a href="https://github.com/sponsors/ChrisTitusTech">Current sponsors for ChrisTitusTech:</a>
|
||||||
"@
|
"@
|
||||||
$authorInfo += "`n"
|
$authorInfo += "`n"
|
||||||
try {
|
try {
|
||||||
# Call the function to get the sponsors
|
|
||||||
$sponsors = Invoke-WinUtilSponsors
|
$sponsors = Invoke-WinUtilSponsors
|
||||||
|
foreach ($sponsor in $sponsors) {
|
||||||
# Append the sponsors to the authorInfo
|
$authorInfo += "<a href=`"https://github.com/sponsors/ChrisTitusTech`">$sponsor</a>`n"
|
||||||
$sponsors | ForEach-Object { $authorInfo += "$_`n" }
|
}
|
||||||
} catch {
|
} catch {
|
||||||
$authorInfo += "An error occurred while fetching or processing the sponsors: $_`n"
|
$authorInfo += "An error occurred while fetching or processing the sponsors: $_`n"
|
||||||
}
|
}
|
||||||
|
Show-CustomDialog -Title "Sponsors" -Message $authorInfo -EnableScroll $true
|
||||||
Show-CustomDialog -Message $authorInfo -EnableScroll $true
|
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync["Form"].ShowDialog() | out-null
|
$sync["Form"].ShowDialog() | out-null
|
||||||
|
@ -1004,19 +1004,19 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Border Grid.Row="0" Grid.Column="0" Style="{StaticResource BorderStyle}">
|
<Border Grid.Row="0" Grid.Column="0" Style="{StaticResource BorderStyle}">
|
||||||
<StackPanel Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True">
|
<StackPanel Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||||
<Button Name="WPFUpdatesdefault" FontSize="{DynamicResource ConfigTabButtonFontSize}" Height="Auto" Width="Auto" Content="Default (Out of Box) Settings" Margin="20,4,20,10" Padding="10"/>
|
<Button Name="WPFUpdatesdefault" FontSize="{DynamicResource ConfigUpdateButtonFontSize}" Height="Auto" Width="Auto" Content="Default (Out of Box) Settings" Margin="20,4,20,10" Padding="10"/>
|
||||||
<TextBlock Foreground="{DynamicResource ComboBoxForegroundColor}" Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300">This is the default settings that come with Windows. <LineBreak/><LineBreak/> No modifications are made and will remove any custom windows update settings.<LineBreak/><LineBreak/>Note: If you still encounter update errors, reset all updates in the config tab. That will restore ALL Microsoft Update Services from their servers and reinstall them to default settings.</TextBlock>
|
<TextBlock Foreground="{DynamicResource ComboBoxForegroundColor}" Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300">This is the default settings that come with Windows. <LineBreak/><LineBreak/> No modifications are made and will remove any custom windows update settings.<LineBreak/><LineBreak/>Note: If you still encounter update errors, reset all updates in the config tab. That will restore ALL Microsoft Update Services from their servers and reinstall them to default settings.</TextBlock>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<Border Grid.Row="0" Grid.Column="1" Style="{StaticResource BorderStyle}">
|
<Border Grid.Row="0" Grid.Column="1" Style="{StaticResource BorderStyle}">
|
||||||
<StackPanel Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True">
|
<StackPanel Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||||
<Button Name="WPFUpdatessecurity" FontSize="{DynamicResource ConfigTabButtonFontSize}" Height="Auto" Width="Auto" Content="Security (Recommended) Settings" Margin="20,4,20,10" Padding="10"/>
|
<Button Name="WPFUpdatessecurity" FontSize="{DynamicResource ConfigUpdateButtonFontSize}" Height="Auto" Width="Auto" Content="Security (Recommended) Settings" Margin="20,4,20,10" Padding="10"/>
|
||||||
<TextBlock Foreground="{DynamicResource ComboBoxForegroundColor}" Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300">This is my recommended setting I use on all computers.<LineBreak/><LineBreak/> It will delay feature updates by 2 years and will install security updates 4 days after release.<LineBreak/><LineBreak/>Feature Updates: Adds features and often bugs to systems when they are released. You want to delay these as long as possible.<LineBreak/><LineBreak/>Security Updates: Typically these are pressing security flaws that need to be patched quickly. You only want to delay these a couple of days just to see if they are safe and don't break other systems. You don't want to go without these for ANY extended periods of time.</TextBlock>
|
<TextBlock Foreground="{DynamicResource ComboBoxForegroundColor}" Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300">This is my recommended setting I use on all computers.<LineBreak/><LineBreak/> It will delay feature updates by 2 years and will install security updates 4 days after release.<LineBreak/><LineBreak/>Feature Updates: Adds features and often bugs to systems when they are released. You want to delay these as long as possible.<LineBreak/><LineBreak/>Security Updates: Typically these are pressing security flaws that need to be patched quickly. You only want to delay these a couple of days just to see if they are safe and don't break other systems. You don't want to go without these for ANY extended periods of time.</TextBlock>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<Border Grid.Row="0" Grid.Column="2" Style="{StaticResource BorderStyle}">
|
<Border Grid.Row="0" Grid.Column="2" Style="{StaticResource BorderStyle}">
|
||||||
<StackPanel Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True">
|
<StackPanel Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||||
<Button Name="WPFUpdatesdisable" FontSize="{DynamicResource ConfigTabButtonFontSize}" Height="Auto" Width="Auto" Content="Disable ALL Updates (NOT RECOMMENDED!)" Margin="20,4,20,10" Padding="10,10,10,10"/>
|
<Button Name="WPFUpdatesdisable" FontSize="{DynamicResource ConfigUpdateButtonFontSize}" Height="Auto" Width="Auto" Content="Disable ALL Updates (NOT RECOMMENDED!)" Margin="20,4,20,10" Padding="10,10,10,10"/>
|
||||||
<TextBlock Foreground="{DynamicResource ComboBoxForegroundColor}" Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300">This completely disables ALL Windows Updates and is NOT RECOMMENDED.<LineBreak/><LineBreak/> However, it can be suitable if you use your system for a select purpose and do not actively browse the internet. <LineBreak/><LineBreak/>Note: Your system will be easier to hack and infect without security updates.</TextBlock>
|
<TextBlock Foreground="{DynamicResource ComboBoxForegroundColor}" Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300">This completely disables ALL Windows Updates and is NOT RECOMMENDED.<LineBreak/><LineBreak/> However, it can be suitable if you use your system for a select purpose and do not actively browse the internet. <LineBreak/><LineBreak/>Note: Your system will be easier to hack and infect without security updates.</TextBlock>
|
||||||
<TextBlock Text=" " Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300"/>
|
<TextBlock Text=" " Margin="20,0,20,0" Padding="10" TextWrapping="WrapWithOverflow" MaxWidth="300"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
Reference in New Issue
Block a user