Compare commits

..

4 Commits

Author SHA1 Message Date
78178b0fba Add 'ValidateRange' to 'Percent' Parameter for 'Update-Progress' Helper Function
This will insure that the passed value is neither below zero nor higher than 100

Co-authored-by: Martin Wiethan <47688561+Marterich@users.noreply.github.com>
2024-06-19 20:08:26 +03:00
bea7726587 Remove the Need to add 'WPFInstall' for every App Entry Name in 'applications.json' File 2024-06-19 17:39:38 +03:00
08847099b4 Add New Helper Function to be an Interface for writing Progress Bar when Compiling 2024-06-19 17:37:33 +03:00
37b4706ae7 Re-formate Comments to be a bit Clear-er 2024-06-19 16:18:31 +03:00
55 changed files with 2740 additions and 1877 deletions

9
.gitattributes vendored
View File

@ -1,12 +1,3 @@
* text=auto
*.ps1 text eol=crlf
*.json text eol=crlf
*.cfg text eol=crlf
*.png binary
*.jpg binary
config/* diff
config/applications.json diff
*.json diff

View File

@ -16,20 +16,8 @@ jobs:
- name: Close inactive issues
uses: actions/stale@v9.0.0
with:
# A list of labels to reference when looking through issues,
# and only when one (or even more) of these labels are found..
# then skip this issue, and never try to stale and/or close it.
exempt-issue-labels: "Keep Issue Open"
# Split it into two weeks, after one week the issue will be marked as stale,
# after another week have pasted without any update.. the issue will then be closed.
days-before-issue-stale: 7
days-before-issue-close: 7
# NEVER mark PRs as Stale or Close + this workflow should never have write permissions on PRs, EVER!
days-before-pr-stale: -1
days-before-pr-close: -1
# Sends a message for both the Stale and Close events of an issue.
stale-issue-message: "This issue was marked as stale because it has been inactive for 7 days"
close-issue-message: "This issue was closed because it has been inactive for 7 days since it was marked as stale"
# Make this field equal true if you want to test your configuration if it works correctly or not
debug-only: false
days-before-issue-close: 14
close-issue-message: "This issue was closed because it has been inactive for 14 days"
debug-only: false # Make this field equal true if you want to test your configuration if it works or not
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -5,7 +5,6 @@ on:
branches:
- main
- test*
workflow_dispatch: # Manual trigger added
jobs:
build-runspace:

View File

@ -1,46 +0,0 @@
name: Pre-Release WinUtil
on:
workflow_run:
workflows: ["Compile"] #Ensure Compile winget.ps1 is done
types:
- completed
workflow_dispatch: # Manual trigger added
jobs:
build-runspace:
runs-on: windows-latest
outputs:
version: ${{ steps.extract_version.outputs.version }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Extract Version from winutil.ps1
id: extract_version
run: |
$version = ''
Get-Content ./winutil.ps1 -TotalCount 30 | ForEach-Object {
if ($_ -match 'Version\s*:\s*(\d{2}\.\d{2}\.\d{2})') {
$version = $matches[1]
echo "version=$version" >> $GITHUB_ENV
echo "::set-output name=version::$version"
break
}
}
if (-not $version) {
Write-Error "Version not found in winutil.ps1"
exit 1
}
shell: pwsh
- name: Create and Upload Release
id: create_release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.extract_version.outputs.version }}
name: Pre-Release ${{ steps.extract_version.outputs.version }}
files: ./winutil.ps1
prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,7 +1,10 @@
name: Release WinUtil
on:
workflow_dispatch: # Manual trigger added
workflow_run:
workflows: ["Compile"] #Ensure Compile winget.ps1 is done
types:
- completed
jobs:
build-runspace:
@ -37,6 +40,5 @@ jobs:
tag_name: ${{ steps.extract_version.outputs.version }}
name: Release ${{ steps.extract_version.outputs.version }}
files: ./winutil.ps1
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,6 +1,5 @@
param (
[switch]$Debug,
[switch]$Run
[switch]$Debug
)
$OFS = "`r`n"
$scriptname = "winutil.ps1"
@ -68,11 +67,11 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) {
$firstLevelName = $firstLevelJsonList[$i]
if ($jsonAsObject.$firstLevelName.content -ne $null) {
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;').replace('—','&#8212;')
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;')
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&#39;&#39;',"&#39;") # resolves the Double Apostrophe caused by the first replace function in the main loop
}
if ($jsonAsObject.$firstLevelName.description -ne $null) {
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;').replace('—','&#8212;')
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&','&#38;').replace('“','&#8220;').replace('”','&#8221;').replace("'",'&#39;').replace('<','&#60;').replace('>','&#62;')
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&#39;&#39;',"&#39;") # resolves the Double Apostrophe caused by the first replace function in the main loop
}
}
@ -96,6 +95,13 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
$sync.configs.$($psitem.BaseName) = $json | convertfrom-json
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" ))
}
Update-Progress "Adding: Config *.cfg" 45
Get-ChildItem .\config | Where-Object {$PSItem.Extension -eq ".cfg"} | ForEach-Object {
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$(Get-Content $PSItem.FullName)'"))
}
Get-ChildItem .\config | Where-Object {$PSItem.Extension -eq ".cfg"} | ForEach-Object {
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$(Get-Content $PSItem.FullName)'"))
}
$xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''")
@ -132,14 +138,4 @@ else {
}
Set-Content -Path $scriptname -Value ($script_content -join "`r`n") -Encoding ascii
Write-Progress -Activity "Compiling" -Completed
if ($run){
try {
Start-Process -FilePath "pwsh" -ArgumentList ".\$scriptname"
}
catch {
Start-Process -FilePath "powershell" -ArgumentList ".\$scriptname"
}
}
Update-Progress "Finished" 100

View File

@ -13,9 +13,14 @@
```
Get-Service -Name "XboxGipSvc" | Set-Service -StartupType Automatic
```
- Windows Insider Builds not installing: Telemetry needs to be enabled
```
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0
```
- Winget requires interaction on first run: Manually type 'y' and 'enter' into the PowerShell console to continue
- (Windows 11) Quick Settings no longer works: Launch the Script and click 'Enable Action Center'
- Explorer no longer launches: Go to Control Panel, File Explorer Options, Change the 'Open File Explorer to' option to 'This PC'.
- Script doesn't run/PowerShell crashes:
1. Press Windows Key+X and select 'PowerShell (Admin)' (Windows 10) or 'Windows Terminal (Admin)' (Windows 11)
2. Run:

View File

@ -1,7 +1,5 @@
# Chris Titus Tech's Windows Utility
[![Version](https://img.shields.io/github/v/release/ChrisTitusTech/winutil?color=7a39fb)](https://github.com/ChrisTitusTech/winutil/releases/latest)
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.
![screen-install](screen-install.png)
@ -24,19 +22,24 @@ Winutil must be run in Admin mode because it performs system-wide tweaks. To ach
#### Simple way
```ps1
irm "https://christitus.com/win" | iex
```
Courtesy of the issue: [#144](/../../issues/144)
irm https://christitus.com/win | iex
```
Courtesy of the issue raised at: [#144](/../../issues/144)
If this site is not reachable from your country, please try running it directly from GitHub.
```ps1
irm "https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1" | iex
or by executing:
```
iwr -useb https://christitus.com/win | iex
```
if for some reason this site is not reachable from your country please try running it directly from github (replace `RELEASE_TAG` with current release that you are interested in, for example `v2024.06.05`)
```
irm "https://github.com/ChrisTitusTech/winutil/releases/download/RELEASE_TAG/winutil.ps1" | iex
```
#### Automation
Some features are available through automation. This allows you to save your config file pass it to Winutil walk away and come back to a finished system. Here is how you can set it up currently with Winutil >24.01.15
Some features are avaliable through automation. This allows you to save your config file pass it to Winutil walk away and come back to a finished system. Here is how you can set it up currently with Winutil >24.01.15
1. On the Install Tab, click "Get Installed", this will get all installed apps **supported by Winutil** on the system
![GetInstalled](/wiki/Get-Installed.png)

View File

@ -151,6 +151,14 @@
"link": "https://github.com/sharkdp/bat",
"winget": "sharkdp.bat"
},
"bitcomet": {
"category": "Utilities",
"choco": "bitcomet",
"content": "BitComet",
"description": "BitComet is a free and open-source BitTorrent client that supports HTTP/FTP downloads and provides download management features.",
"link": "https://www.bitcomet.com/",
"winget": "CometNetwork.BitComet"
},
"bitwarden": {
"category": "Utilities",
"choco": "bitwarden",
@ -175,6 +183,14 @@
"link": "https://www.blender.org/",
"winget": "BlenderFoundation.Blender"
},
"bluestacks": {
"category": "Games",
"choco": "bluestacks",
"content": "Bluestacks",
"description": "Bluestacks is an Android emulator for running mobile apps and games on a PC.",
"link": "https://www.bluestacks.com/",
"winget": "BlueStack.BlueStacks"
},
"brave": {
"category": "Browsers",
"choco": "brave",
@ -199,14 +215,6 @@
"link": "https://www.bulkrenameutility.co.uk",
"winget": "TGRMNSoftware.BulkRenameUtility"
},
"AdvancedRenamer": {
"category": "Utilities",
"choco": "advanced-renamer",
"content": "Advanced Renamer",
"description": "Advanced Renamer is a program for renaming multiple files and folders at once. By configuring renaming methods the names can be manipulated in various ways.",
"link": "https://www.advancedrenamer.com/",
"winget": "XP9MD3S1KFCPH1"
},
"calibre": {
"category": "Document",
"choco": "calibre",
@ -303,6 +311,14 @@
"link": "https://copyq.readthedocs.io/",
"winget": "hluk.CopyQ"
},
"ditto": {
"category": "Utilities",
"choco": "ditto",
"content": "Ditto (Clipboard Manager)",
"description": "Ditto is an extension to the Windows Clipboard. You copy something to the Clipboard and Ditto takes what you copied and stores it in a database to retrieve at a later time.",
"link": "https://github.com/sabrogden/Ditto",
"winget": "Ditto.Ditto"
},
"cpuz": {
"category": "Utilities",
"choco": "cpu-z",
@ -373,7 +389,7 @@
"content": "DevToys",
"description": "DevToys is a collection of development-related utilities and tools for Windows. It includes tools for file management, code formatting, and productivity enhancements for developers.",
"link": "https://devtoys.app/",
"winget": "DevToys-app.DevToys"
"winget": "9PGCV4V3BK4W"
},
"digikam": {
"category": "Multimedia Tools",
@ -396,7 +412,7 @@
"choco": "ditto",
"content": "Ditto",
"description": "Ditto is an extension to the standard windows clipboard.",
"link": "https://github.com/sabrogden/Ditto",
"link": "https://ditto-cp.sourceforge.io/",
"winget": "Ditto.Ditto"
},
"dockerdesktop": {
@ -551,14 +567,6 @@
"link": "https://www.falkon.org/",
"winget": "KDE.Falkon"
},
"fastfetch": {
"category": "Utilities",
"choco": "na",
"content": "Fastfetch",
"description": "Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way",
"link": "https://github.com/fastfetch-cli/fastfetch/",
"winget": "Fastfetch-cli.Fastfetch"
},
"ferdium": {
"category": "Communications",
"choco": "ferdium",
@ -687,6 +695,14 @@
"link": "https://www.freecadweb.org/",
"winget": "FreeCAD.FreeCAD"
},
"orcaslicer": {
"category": "Multimedia Tools",
"choco": "orcaslicer",
"content": "OrcaSlicer",
"description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)",
"link": "https://github.com/SoftFever/OrcaSlicer",
"winget": "SoftFever.OrcaSlicer"
},
"fxsound": {
"category": "Multimedia Tools",
"choco": "fxsound",
@ -733,7 +749,7 @@
"content": "Git Extensions",
"description": "Git Extensions is a graphical user interface for Git, providing additional features for easier source code management.",
"link": "https://gitextensions.github.io/",
"winget": "GitExtensionsTeam.GitExtensions"
"winget": "Git.Git;GitExtensionsTeam.GitExtensions"
},
"githubcli": {
"category": "Development",
@ -741,7 +757,7 @@
"content": "GitHub CLI",
"description": "GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal.",
"link": "https://cli.github.com/",
"winget": "GitHub.cli"
"winget": "Git.Git;GitHub.cli"
},
"githubdesktop": {
"category": "Development",
@ -749,7 +765,7 @@
"content": "GitHub Desktop",
"description": "GitHub Desktop is a visual Git client that simplifies collaboration on GitHub repositories with an easy-to-use interface.",
"link": "https://desktop.github.com/",
"winget": "GitHub.GitHubDesktop"
"winget": "Git.Git;GitHub.GitHubDesktop"
},
"gitkrakenclient": {
"category": "Development",
@ -783,20 +799,12 @@
"link": "https://www.gog.com/galaxy",
"winget": "GOG.Galaxy"
},
"gitify": {
"category": "Development",
"choco": "na",
"content": "Gitify",
"description": "GitHub notifications on your menu bar.",
"link": "https://www.gitify.io/",
"winget": "Gitify.Gitify"
},
"golang": {
"category": "Development",
"choco": "golang",
"content": "Go",
"description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.",
"link": "https://go.dev/",
"content": "GoLang",
"description": "GoLang (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.",
"link": "https://golang.org/",
"winget": "GoLang.Go"
},
"googledrive": {
@ -967,6 +975,14 @@
"link": "https://www.oracle.com/java/",
"winget": "EclipseAdoptium.Temurin.18.JRE"
},
"java20": {
"category": "Development",
"choco": "na",
"content": "Azul Zulu JDK 20",
"description": "Azul Zulu JDK 20 is a distribution of the OpenJDK with long-term support, performance enhancements, and security updates.",
"link": "https://www.azul.com/downloads/zulu-community/",
"winget": "Azul.Zulu.20.JDK"
},
"java21": {
"category": "Development",
"choco": "na",
@ -1271,17 +1287,9 @@
"link": "https://www.msi.com/Landing/afterburner",
"winget": "Guru3D.Afterburner"
},
"mullvadvpn": {
"category": "Pro Tools",
"choco": "mullvad-app",
"content": "Mullvad VPN",
"description": "This is the VPN client software for the Mullvad VPN service.",
"link": "https://github.com/mullvad/mullvadvpn-app",
"winget": "MullvadVPN.MullvadVPN"
},
"BorderlessGaming": {
"category": "Utilities",
"choco": "borderlessgaming",
"choco": "na",
"content": "Borderless Gaming",
"description": "Play your favorite games in a borderless window; no more time consuming alt-tabs.",
"link": "https://github.com/Codeusa/Borderless-Gaming",
@ -1295,6 +1303,14 @@
"link": "https://sourceforge.net/projects/equalizerapo",
"winget": "na"
},
"FreeFileSync": {
"category": "Utilities",
"choco": "freefilesync",
"content": "FreeFileSync",
"description": "Synchronize Files and Folders",
"link": "https://freefilesync.org",
"winget": "na"
},
"CompactGUI": {
"category": "Utilities",
"choco": "compactgui",
@ -1343,14 +1359,6 @@
"link": "https://www.mp3tag.de/en/",
"winget": "Mp3tag.Mp3tag"
},
"tagscanner": {
"category": "Multimedia Tools",
"choco": "tagscanner",
"content": "TagScanner (Tag Scanner)",
"description": "TagScanner is a powerful tool for organizing and managing your music collection",
"link": "https://www.xdlab.ru/en/",
"winget": "SergeySerkov.TagScanner"
},
"nanazip": {
"category": "Utilities",
"choco": "nanazip",
@ -1655,14 +1663,6 @@
"link": "https://www.plex.tv/your-media/",
"winget": "Plex.PlexMediaServer"
},
"plexdesktop": {
"category": "Multimedia Tools",
"choco": "plex",
"content": "Plex Desktop",
"description": "Plex Desktop for Windows is the front end for Plex Media Server.",
"link": "https://www.plex.tv",
"winget": "Plex.Plex"
},
"Portmaster": {
"category": "Pro Tools",
"choco": "portmaster",
@ -1751,14 +1751,6 @@
"link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon",
"winget": "Microsoft.Sysinternals.ProcessMonitor"
},
"orcaslicer": {
"category": "Utilities",
"choco": "orcaslicer",
"content": "OrcaSlicer",
"description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)",
"link": "https://github.com/SoftFever/OrcaSlicer",
"winget": "SoftFever.OrcaSlicer"
},
"prucaslicer": {
"category": "Utilities",
"choco": "prusaslicer",
@ -1799,14 +1791,6 @@
"link": "https://www.qbittorrent.org/",
"winget": "qBittorrent.qBittorrent"
},
"transmission": {
"category": "Utilities",
"choco": "transmission",
"content": "Transmission",
"description": "Transmission is a cross-platform BitTorrent client that is open source, easy, powerful, and lean.",
"link": "https://transmissionbt.com/",
"winget": "Transmission.Transmission"
},
"tixati": {
"category": "Utilities",
"choco": "tixati.portable",
@ -1847,14 +1831,6 @@
"link": "https://www.revouninstaller.com/",
"winget": "RevoUninstaller.RevoUninstaller"
},
"WiseProgramUninstaller": {
"category": "Utilities",
"choco": "na",
"content": "Wise Program Uninstaller (WiseCleaner)",
"description": "Wise Program Uninstaller is the perfect solution for uninstalling Windows programs, allowing you to uninstall applications quickly and completely using its simple and user-friendly interface.",
"link": "https://www.wisecleaner.com/wise-program-uninstaller.html",
"winget": "WiseCleaner.WiseProgramUninstaller"
},
"revolt": {
"category": "Communications",
"choco": "na",
@ -2215,14 +2191,6 @@
"link": "https://github.com/thonny/thonny",
"winget": "AivarAnnamaa.Thonny"
},
"MuEditor": {
"category": "Development",
"choco": "na",
"content": "Code With Mu (Mu Editor)",
"description": "Mu is a Python code editor for beginner programmers",
"link": "https://codewith.mu/",
"winget": "Mu.Mu"
},
"thorium": {
"category": "Browsers",
"choco": "na",
@ -2407,14 +2375,6 @@
"link": "https://voicemeeter.com/",
"winget": "VB-Audio.Voicemeeter"
},
"VoicemeeterPotato": {
"category": "Multimedia Tools",
"choco": "voicemeeter-potato",
"content": "Voicemeeter Potato",
"description": "Voicemeeter Potato is the ultimate version of the Voicemeeter Audio Mixer Application endowed with Virtual Audio Device to mix and manage any audio sources from or to any audio devices or applications.",
"link": "https://voicemeeter.com/",
"winget": "VB-Audio.Voicemeeter.Potato"
},
"vrdesktopstreamer": {
"category": "Games",
"choco": "na",
@ -2429,7 +2389,7 @@
"content": "VS Code",
"description": "Visual Studio Code is a free, open-source code editor with support for multiple programming languages.",
"link": "https://code.visualstudio.com/",
"winget": "Microsoft.VisualStudioCode"
"winget": "Git.Git;Microsoft.VisualStudioCode"
},
"vscodium": {
"category": "Development",
@ -2437,7 +2397,7 @@
"content": "VS Codium",
"description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.",
"link": "https://vscodium.com/",
"winget": "VSCodium.VSCodium"
"winget": "Git.Git;VSCodium.VSCodium"
},
"waterfox": {
"category": "Browsers",
@ -2463,6 +2423,14 @@
"link": "https://wezfurlong.org/wezterm/index.html",
"winget": "wez.wezterm"
},
"windirstat": {
"category": "Utilities",
"choco": "windirstat",
"content": "WinDirStat",
"description": "WinDirStat is a disk usage statistics viewer and cleanup tool for Windows.",
"link": "https://windirstat.net/",
"winget": "WinDirStat.WinDirStat"
},
"windowspchealth": {
"category": "Utilities",
"choco": "na",
@ -2471,14 +2439,6 @@
"link": "https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844",
"winget": "Microsoft.WindowsPCHealthCheck"
},
"WindowGrid": {
"category": "Utilities",
"choco": "windowgrid",
"content": "WindowGrid",
"description": "WindowGrid is a modern window management program for Windows that allows the user to quickly and easily layout their windows on a dynamic grid using just the mouse.",
"link": "http://windowgrid.net/",
"winget": "na"
},
"wingetui": {
"category": "Utilities",
"choco": "wingetui",
@ -2543,14 +2503,6 @@
"link": "https://toys.wisecleaner.com/",
"winget": "WiseCleaner.WiseToys"
},
"TeraCopy": {
"category": "Utilities",
"choco": "TeraCopy",
"content": "TeraCopy",
"description": "Copy your files faster and more securely",
"link": "https://codesector.com/teracopy",
"winget": "CodeSector.TeraCopy"
},
"wizfile": {
"category": "Utilities",
"choco": "na",
@ -2775,14 +2727,6 @@
"link": "https://github.com/AutoDarkMode/Windows-Auto-Night-Mode",
"winget": "Armin2208.WindowsAutoNightMode"
},
"AmbieWhiteNoise": {
"category": "Utilities",
"choco": "na",
"content": "Ambie White Noise",
"description": "Ambie is the ultimate app to help you focus, study, or relax. We use white noise and nature sounds combined with an innovative focus timer to keep you concentrated on doing your best work.",
"link": "https://ambieapp.com/",
"winget": "9P07XNM5CHP0"
},
"magicwormhole": {
"category": "Utilities",
"choco": "magic-wormhole",
@ -2791,14 +2735,6 @@
"link": "https://github.com/magic-wormhole/magic-wormhole",
"winget": "magic-wormhole.magic-wormhole"
},
"croc": {
"category": "Utilities",
"choco": "croc",
"content": "croc",
"description": "Easily and securely send things from one computer to another.",
"link": "https://github.com/schollz/croc",
"winget": "schollz.croc"
},
"qgis": {
"category": "Multimedia Tools",
"choco": "qgis",
@ -2850,19 +2786,11 @@
"ForceAutoHDR": {
"category": "Utilities",
"choco": "na",
"content": "ForceAutoHDR",
"content": "GUI That Forces Auto HDR In Unsupported Games",
"description": "ForceAutoHDR simplifies the process of adding games to the AutoHDR list in the Windows Registry",
"link": "https://github.com/7gxycn08/ForceAutoHDR",
"winget": "ForceAutoHDR.7gxycn08"
},
"JoyToKey": {
"category": "Utilities",
"choco": "joytokey",
"content": "JoyToKey",
"description": "enables PC game controllers to emulate the keyboard and mouse input",
"link": "https://joytokey.net/en/",
"winget": "JTKsoftware.JoyToKey"
},
"nditools": {
"category": "Multimedia Tools",
"choco": "na",
@ -2870,37 +2798,5 @@
"description":"NDI, or Network Device Interface, is a video connectivity standard that enables multimedia systems to identify and communicate with one another over IP and to encode, transmit, and receive high-quality, low latency, frame-accurate video and audio, and exchange metadata in real-time.",
"link": "https://ndi.video/",
"winget": "NDI.NDITools"
},
"kicad": {
"category": "Pro Tools",
"choco": "na",
"content": "Kicad",
"description":"Kicad is an open-source EDA tool. It's a good starting point for those who want to do electrical design and is even used by professionals in the industry.",
"link": "https://www.kicad.org/",
"winget": "KiCad.KiCad"
},
"FormatFactory": {
"category": "Utilities",
"choco": "formatfactory",
"content": "Format Factory",
"description":"FormatFactory is an ad-supported freeware multimedia converter that can convert video, audio, and picture files. It is also capable of ripping DVDs and CDs to other file formats, as well as creating .iso images. It can also join multiple video files together into one.",
"link": "http://www.pcfreetime.com/formatfactory/",
"winget": "na"
},
"dropox": {
"category": "Utilities",
"choco": "na",
"content": "Dropbox",
"description":"The Dropbox desktop app! Save hard drive space, share and edit files and send for signature all without the distraction of countless browser tabs.",
"link": "https://www.dropbox.com/en_GB/desktop",
"winget": "Dropbox.Dropbox"
},
"OFGB": {
"category": "Utilities",
"choco": "ofgb",
"content": "OFGB (Oh Frick Go Back)",
"description":"GUI Tool To Removes Ads From Various Places Around Windows 11",
"link": "https://github.com/xM4ddy/OFGB",
"winget": "xM4ddy.OFGB"
}
}

View File

@ -0,0 +1,227 @@
############################################################################
# This file was created with O&O ShutUp10++ V1.9.1436
# and can be imported onto another computer.
#
# Download the application at https://www.oo-software.com/shutup10
# You can then import the file from within the program.
#
# Alternatively you can import it automatically over a command line.
# Simply use the following parameter:
# OOSU10.exe <path to file>
#
# Selecting the Option /quiet ends the app right after the import and the
# user does not get any feedback about the import.
#
# We are always happy to answer any questions you may have!
# © 2015-2023 O&O Software GmbH, Berlin. All rights reserved.
# https://www.oo-software.com/
############################################################################
P001 -
P002 -
P003 -
P004 -
P005 -
P006 -
P008 -
P026 -
P027 -
P028 -
P064 -
P065 -
P066 -
P067 -
P070 -
P069 -
P009 -
P010 -
P015 -
P068 -
P016 -
A001 -
A002 -
A003 -
A004 -
A006 -
A005 -
P007 -
P036 -
P025 -
P033 -
P023 -
P056 -
P057 -
P012 -
P034 -
P013 -
P035 -
P062 -
P063 -
P081 -
P047 -
P019 -
P048 -
P049 -
P020 -
P037 -
P011 -
P038 -
P050 -
P051 -
P018 -
P039 -
P021 -
P040 -
P022 -
P041 -
P014 -
P042 -
P052 -
P053 -
P054 -
P055 -
P029 -
P043 -
P030 -
P044 -
P031 -
P045 -
P032 -
P046 -
P058 -
P059 -
P060 -
P061 -
P071 -
P072 -
P073 -
P074 -
P075 -
P076 -
P077 -
P078 -
P079 -
P080 -
P024 -
S001 -
S002 -
S003 -
S008 -
E101 -
E201 -
E115 -
E215 -
E118 -
E218 -
E107 -
E207 -
E111 -
E211 -
E112 -
E212 -
E109 -
E209 -
E121 -
E221 -
E103 -
E203 -
E123 -
E223 -
E124 -
E224 -
E128 -
E228 -
E119 -
E219 -
E120 -
E220 -
E122 -
E222 -
E125 -
E225 -
E126 -
E226 -
E106 -
E206 -
E127 -
E227 -
E001 -
E002 -
E003 -
E008 -
E007 -
E010 -
E011 +
E012 +
E009 -
E004 -
E005 -
E013 -
E014 -
E006 -
Y001 -
Y002 -
Y003 -
Y004 -
Y005 -
Y006 -
Y007 -
C012 -
C002 -
C013 -
C007 -
C008 -
C009 -
C010 -
C011 -
C014 -
C015 -
C101 -
C201 -
C102 -
L001 -
L003 -
L004 -
L005 -
U001 -
U004 -
U005 -
U006 -
U007 -
W001 -
W011 -
W004 -
W005 -
W010 -
W009 -
P017 -
W006 -
W008 -
M006 -
M011 -
M010 -
O003 -
O001 -
S012 -
S013 -
S014 -
K001 -
K002 -
K005 -
M003 -
M015 -
M016 -
M017 -
M018 -
M019 -
M020 -
M021 -
M022 -
M001 -
M004 -
M005 -
M024 -
M012 -
M013 -
M014 -
N001 -

View File

@ -0,0 +1,231 @@
############################################################################
# This file was created with O&O ShutUp10++ V1.9.1438
# and can be imported onto another computer.
#
# Download the application at https://www.oo-software.com/shutup10
# You can then import the file from within the program.
#
# Alternatively you can import it automatically over a command line.
# Simply use the following parameter:
# OOSU10.exe <path to file>
#
# Selecting the Option /quiet ends the app right after the import and the
# user does not get any feedback about the import.
#
# We are always happy to answer any questions you may have!
# © 2015-2024 O&O Software GmbH, Berlin. All rights reserved.
# https://www.oo-software.com/
############################################################################
P001 +
P002 +
P003 +
P004 +
P005 +
P006 +
P008 +
P026 +
P027 +
P028 +
P064 +
P065 +
P066 +
P067 +
P070 +
P069 +
P009 -
P010 +
P015 +
P068 -
P016 -
A001 +
A002 +
A003 +
A004 +
A006 +
A005 +
P007 +
P036 +
P025 +
P033 +
P023 +
P056 +
P057 -
P012 -
P034 -
P013 -
P035 -
P062 -
P063 -
P081 -
P047 -
P019 -
P048 -
P049 -
P020 -
P037 -
P011 -
P038 -
P050 -
P051 -
P018 -
P039 -
P021 -
P040 -
P022 -
P041 -
P014 -
P042 -
P052 -
P053 -
P054 -
P055 -
P029 -
P043 -
P030 -
P044 -
P031 -
P045 -
P032 -
P046 -
P058 -
P059 -
P060 -
P061 -
P071 -
P072 -
P073 -
P074 -
P075 -
P076 -
P077 -
P078 -
P079 -
P080 -
P024 +
S001 +
S002 +
S003 +
S008 -
E101 +
E201 +
E115 +
E215 +
E118 +
E218 +
E107 +
E207 +
E111 +
E211 +
E112 +
E212 +
E109 +
E209 +
E121 +
E221 +
E103 +
E203 +
E123 +
E223 +
E124 +
E224 +
E128 +
E228 +
E119 -
E219 -
E120 -
E220 -
E122 -
E222 -
E125 -
E225 -
E126 -
E226 -
E106 -
E206 -
E127 -
E227 -
E001 +
E002 +
E003 +
E008 +
E007 +
E010 +
E011 +
E012 +
E009 -
E004 -
E005 -
E013 -
E014 -
E006 -
Y001 +
Y002 +
Y003 +
Y004 +
Y005 +
Y006 +
Y007 +
C012 +
C002 +
C013 +
C007 +
C008 +
C009 +
C010 +
C011 +
C014 +
C015 +
C101 +
C201 +
C102 +
C103 +
C203 +
L001 +
L003 +
L004 -
L005 -
U001 +
U004 +
U005 +
U006 +
U007 +
W001 +
W011 +
W004 -
W005 -
W010 -
W009 -
P017 +
W006 -
W008 -
M006 +
M011 -
M010 +
O003 -
O001 -
S012 -
S013 -
S014 -
K001 +
K002 +
K005 +
M003 +
M015 +
M016 +
M017 -
M018 +
M019 -
M020 +
M021 +
M022 +
M001 +
M004 +
M005 +
M024 +
M026 +
M027 +
M012 -
M013 -
M014 -
N001 -

View File

@ -1,11 +1,11 @@
{
"Standard": [
"WPFTweaksAH",
"WPFTweaksConsumerFeatures",
"WPFTweaksDVR",
"WPFTweaksHiber",
"WPFTweaksHome",
"WPFTweaksLoc",
"WPFTweaksOO",
"WPFTweaksServices",
"WPFTweaksStorage",
"WPFTweaksTele",
@ -17,8 +17,8 @@
"WPFTweaksTeredo"
],
"Minimal": [
"WPFTweaksConsumerFeatures",
"WPFTweaksHome",
"WPFTweaksOO",
"WPFTweaksServices",
"WPFTweaksTele"
]

View File

@ -58,7 +58,7 @@
"powercfg.exe /hibernate on"
]
},
"WPFTweaksLaptopHibernation": {
"WPFToggleTweaksLaptopHybernation": {
"Content": "Set Hibernation as default (good for laptops)",
"Description": "Most modern laptops have connected stadby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399",
"category": "Essential Tweaks",
@ -1223,6 +1223,11 @@
"StartupType": "Automatic",
"OriginalType": "Automatic"
},
{
"Name": "WwanSvc",
"StartupType": "Manual",
"OriginalType": "Manual"
},
{
"Name": "XblAuthManager",
"StartupType": "Manual",
@ -1580,22 +1585,6 @@
}
]
},
"WPFTweaksConsumerFeatures":{
"Content": "Disable ConsumerFeatures",
"Description": "Windows 10 will not automatically install any games, third-party apps, or application links from the Windows Store for the signed-in user. Some default Apps will be inaccessible (eg. Phone Link)",
"category": "Essential Tweaks",
"panel": "1",
"Order": "a003_",
"registry": [
{
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
"OriginalValue": "0",
"Name": "DisableWindowsConsumerFeatures",
"Value": "1",
"Type": "DWord"
}
]
},
"WPFTweaksTele": {
"Content": "Disable Telemetry",
"Description": "Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.",
@ -1754,6 +1743,13 @@
"Value": "0",
"Type": "DWord"
},
{
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
"OriginalValue": "0",
"Name": "DisableWindowsConsumerFeatures",
"Value": "1",
"Type": "DWord"
},
{
"Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules",
"OriginalValue": "0",
@ -2317,6 +2313,20 @@
"Invoke-WPFTweakPS7 -action \"PS5\""
]
},
"WPFTweaksOO": {
"Content": "Run OO Shutup",
"Description": "Runs OO Shutup and applies the recommended Tweaks. https://www.oo-software.com/en/shutup10",
"category": "Essential Tweaks",
"panel": "1",
"Order": "a009_",
"ToolTip": "Runs OO Shutup and applies the recommended Tweaks https://www.oo-software.com/en/shutup10",
"InvokeScript": [
"Invoke-WPFOOSU -action \"recommended\""
],
"UndoScript": [
"Invoke-WPFOOSU -action \"undo\""
]
},
"WPFTweaksStorage": {
"Content": "Disable Storage Sense",
"Description": "Storage Sense deletes temp files automatically.",
@ -2332,15 +2342,17 @@
},
"WPFTweaksRemoveEdge": {
"Content": "Remove Microsoft Edge - NOT RECOMMENDED",
"Description": "Removes MS Edge when it gets reinstalled by updates. Credit: AveYo",
"Description": "Removes MS Edge when it gets reinstalled by updates.",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a029_",
"InvokeScript": [
"
#:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
Invoke-WebRequest -Uri \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -OutFile \"$ENV:TEMP\\edgeremoval.bat\"
curl.exe -s \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -o $ENV:temp\\edgeremoval.bat
Start-Process $ENV:temp\\edgeremoval.bat
"
],
"UndoScript": [
@ -2396,12 +2408,12 @@
"WPFTweaksDisableLMS1": {
"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.",
"category": "z__Advanced Tweaks - CAUTION",
"category": "Essential Tweaks",
"panel": "1",
"Order": "a026_",
"Order": "a0015_",
"InvokeScript": [
"
Write-Host \"Kill LMS\"
Write-Host \"Kill OneDrive process\"
$serviceName = \"LMS\"
Write-Host \"Stopping and disabling service: $serviceName\"
Stop-Service -Name $serviceName -Force -ErrorAction SilentlyContinue;
@ -2445,45 +2457,39 @@
],
"UndoScript": [
"
Write-Host \"LMS vPro needs to be redownloaded from intel.com\"
Write-Host \"Install Microsoft Edge\"
taskkill.exe /F /IM \"OneDrive.exe\"
"
]
},
"WPFTweaksRemoveOnedrive": {
"Content": "Remove OneDrive",
"Description": "Moves OneDrive files to Default Home Folders and Uninstalls it.",
"Description": "Copies OneDrive files to Default Home Folders and Uninstalls it.",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a030_",
"InvokeScript": [
"
$OneDrivePath = $($env:OneDrive)
Write-Host \"Removing OneDrive\"
$regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\"
if (Test-Path $regPath){
$OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\"
$OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \")
Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait
}
else{
Write-Host \"Onedrive dosn't seem to be installed anymore\" -ForegroundColor Red
return
}
# Check if OneDrive got Uninstalled
if (-not (Test-Path $regPath)){
Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\"
Start-Process -FilePath powershell -ArgumentList \"robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\\' /mov /e /xj\" -NoNewWindow -Wait
Write-Host \"Kill OneDrive process\"
taskkill.exe /F /IM \"OneDrive.exe\"
taskkill.exe /F /IM \"explorer.exe\"
Write-Host \"Copy all OneDrive to Root UserProfile\"
Start-Process -FilePath powershell -ArgumentList \"robocopy '$($env:USERPROFILE.TrimEnd())\\OneDrive' '$($env:USERPROFILE.TrimEnd())\\' /e /xj\" -NoNewWindow -Wait
Write-Host \"Remove OneDrive\"
Start-Process -FilePath winget -ArgumentList \"uninstall -e --purge --force --silent Microsoft.OneDrive \" -NoNewWindow -Wait
Write-Host \"Removing OneDrive leftovers\"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\Microsoft\\OneDrive\"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\OneDrive\"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:programdata\\Microsoft OneDrive\"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\"
reg delete \"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\" -f
# check if directory is empty before removing:
If ((Get-ChildItem \"$OneDrivePath\" -Recurse | Measure-Object).Count -eq 0) {
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$OneDrivePath\"
If ((Get-ChildItem \"$env:userprofile\\OneDrive\" -Recurse | Measure-Object).Count -eq 0) {
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:userprofile\\OneDrive\"
}
Write-Host \"Remove Onedrive from explorer sidebar\"
@ -2526,17 +2532,11 @@
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{F42EE2D3-909F-4907-8871-4C22FC0BF756}\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{0DDD015D-B06C-45D5-8C4C-F59713854639}\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
Write-Host \"Restarting explorer\"
taskkill.exe /F /IM \"explorer.exe\"
Start-Process \"explorer.exe\"
Write-Host \"Waiting for explorer to complete loading\"
Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow
Write-Host \"Please Note - OneDrive folder may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
Start-Sleep 5
}
else{
Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red
}
"
],
"UndoScript": [
@ -2719,7 +2719,7 @@
},
"WPFTweaksBlockAdobeNet": {
"Content": "Adobe Network Block",
"Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs",
"Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. ",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a021_",
@ -2982,6 +2982,28 @@
}
]
},
"WPFTweaksEnableipsix": {
"Content": "Enable IPv6",
"Description": "Enables IPv6.",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a023_",
"registry": [
{
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
"Name": "DisabledComponents",
"Value": "0",
"OriginalValue": "0",
"Type": "DWord"
}
],
"InvokeScript": [
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
],
"UndoScript": [
"Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
]
},
"WPFToggleDarkMode": {
"Content": "Dark Theme",
"Description": "Enable/Disable Dark Mode.",
@ -3059,19 +3081,11 @@
"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",
"panel": "2",
"Order": "a070_",
"Type": "Toggle"
},
"WPFToggleTaskbarSearch": {
"Content": "Taskbar Search",
"Description": "If Enabled Search Button will be on the taskbar.",
"category": "Customize Preferences",
"panel": "2",
"Order": "a068_",
"Order": "a069_",
"Type": "Toggle"
},
"WPFOOSUbutton": {
"Content": "Run OO Shutup 10",
"Content": "Customize OO Shutup Tweaks",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a039_",
@ -3082,7 +3096,7 @@
"Description": "If Enabled then Widgets Icon in Taskbar will be shown.",
"category": "Customize Preferences",
"panel": "2",
"Order": "a069_",
"Order": "a068_",
"Type": "Toggle"
},
"WPFchangedns": {
@ -3127,13 +3141,5 @@
"panel": "2",
"Order": "a082_",
"Type": "300"
},
"WPFToggleTaskView": {
"Content": "Task View",
"Description": "If Enabled then Task View Icon in Taskbar will be shown.",
"category": "Customize Preferences",
"panel": "2",
"Order": "a069_",
"Type": "Toggle"
}
}

View File

@ -30,5 +30,58 @@ function Get-LocalizedYesNo {
Write-Debug "According to takeown.exe local Yes is $charactersArray[0]"
# Return the array of characters
return $charactersArray
}
function Get-LocalizedYesNoTakeown {
<#
.SYNOPSIS
This function runs takeown.exe and captures its output to extract yes no in a localized Windows
.DESCRIPTION
The function retrieves lines from the output of takeown.exe until there are at least 2 characters
captured in a specific format, such as "Yes=<first character>, No=<second character>".
.EXAMPLE
$yesNoArray = Get-LocalizedYesNo
Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])"
#>
# Run takeown.exe and capture its output
$takeownOutput = & takeown.exe /? | Out-String
# Parse the output and retrieve lines until there are at least 2 characters in the array
$found = $false
$charactersArray = @()
foreach ($line in $takeownOutput -split "`r`n")
{
# skip everything before /D flag help
if ($found)
{
# now that /D is found start looking for a single character in double quotes
# in help text there is another string in double quotes but it is not a single character
$regexPattern = '"([a-zA-Z])"'
$charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value }
# if ($charactersArray.Count -gt 0) {
# Write-Output "Extracted symbols: $($matches -join ', ')"
# } else {
# Write-Output "No matches found."
# }
if ($charactersArray.Count -ge 2)
{
break
}
}
elseif ($line -match "/D ")
{
$found = $true
}
}
Write-Debug "According to takeown.exe local Yes is $charactersArray[0]"
# Return the array of characters
return $charactersArray
}

View File

@ -61,19 +61,19 @@ function Get-TabXaml {
$paneltotal = $columncount
}
# add ColumnDefinitions to evenly draw colums
$blockXml="<Grid.ColumnDefinitions>`r`n"+("<ColumnDefinition Width=""*""/>`r`n"*($paneltotal))+"</Grid.ColumnDefinitions>`r`n"
$blockXml="<Grid.ColumnDefinitions>`n"+("<ColumnDefinition Width=""*""/>`n"*($paneltotal))+"</Grid.ColumnDefinitions>`n"
# Iterate through organizedData by panel, category, and application
$count = 0
foreach ($panel in ($organizedData.Keys | Sort-Object)) {
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n"
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
$panelcount++
foreach ($category in ($organizedData[$panel].Keys | Sort-Object)) {
$count++
if ($columncount -gt 0) {
$panelcount2 = [Int](($count)/$maxcount-0.5)
if ($panelcount -eq $panelcount2 ) {
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n"
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n"
$blockXml +="`n</StackPanel>`n</Border>`n"
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
$panelcount++
}
}
@ -83,49 +83,49 @@ function Get-TabXaml {
$categorycontent = $($category -replace '^.__', '')
$categoryname = Get-WPFObjectName -type "Label" -name $categorycontent
$blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`r`n"
$blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`n"
$sortedApps = $organizedData[$panel][$category].Keys | Sort-Object
foreach ($appName in $sortedApps) {
$count++
if ($columncount -gt 0) {
$panelcount2 = [Int](($count)/$maxcount-0.5)
if ($panelcount -eq $panelcount2 ) {
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n"
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n"
$blockXml +="`n</StackPanel>`n</Border>`n"
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
$panelcount++
}
}
$appInfo = $organizedData[$panel][$category][$appName]
if ("Toggle" -eq $appInfo.Type) {
$blockXml += "<DockPanel LastChildFill=`"True`">`r`n<Label Content=`"$($appInfo.Content)`" ToolTip=`"$($appInfo.Description)`" HorizontalAlignment=`"Left`"/>`r`n"
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`" HorizontalAlignment=`"Right`"/>`r`n</DockPanel>`r`n"
$blockXml += "<DockPanel LastChildFill=`"True`">`n<Label Content=`"$($appInfo.Content)`" ToolTip=`"$($appInfo.Description)`" HorizontalAlignment=`"Left`"/>`n"
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`" HorizontalAlignment=`"Right`"/>`n</DockPanel>`n"
} elseif ("Combobox" -eq $appInfo.Type) {
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,5,0,0`">`r`n<Label Content=`"$($appInfo.Content)`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`"/>`r`n"
$blockXml += "<ComboBox Name=`"$($appInfo.Name)`" Height=`"32`" Width=`"186`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`" Margin=`"5,5`">`r`n"
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,5,0,0`">`n<Label Content=`"$($appInfo.Content)`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`"/>`n"
$blockXml += "<ComboBox Name=`"$($appInfo.Name)`" Height=`"32`" Width=`"186`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`" Margin=`"5,5`">`n"
$addfirst="IsSelected=`"True`""
foreach ($comboitem in ($appInfo.ComboItems -split " ")) {
$blockXml += "<ComboBoxItem $addfirst Content=`"$comboitem`"/>`r`n"
$blockXml += "<ComboBoxItem $addfirst Content=`"$comboitem`"/>`n"
$addfirst=""
}
$blockXml += "</ComboBox>`r`n</StackPanel>"
$blockXml += "</ComboBox>`n</StackPanel>"
# If it is a digit, type is button and button length is digits
} elseif ($appInfo.Type -match "^[\d\.]+$") {
$blockXml += "<Button Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" HorizontalAlignment = `"Left`" Width=`"$($appInfo.Type)`" Margin=`"5`" Padding=`"20,5`" />`r`n"
$blockXml += "<Button Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" HorizontalAlignment = `"Left`" Width=`"$($appInfo.Type)`" Margin=`"5`" Padding=`"20,5`" />`n"
# else it is a checkbox
} else {
$checkedStatus = If ($null -eq $appInfo.Checked) {""} Else {"IsChecked=`"$($appInfo.Checked)`" "}
if ($null -eq $appInfo.Link)
{
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" $($checkedStatus)Margin=`"5,0`" ToolTip=`"$($appInfo.Description)`"/>`r`n"
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" $($checkedStatus)Margin=`"5,0`" ToolTip=`"$($appInfo.Description)`"/>`n"
}
else
{
$blockXml += "<StackPanel Orientation=""Horizontal"">`r`n<CheckBox Name=""$($appInfo.Name)"" Content=""$($appInfo.Content)"" $($checkedStatus)ToolTip=""$($appInfo.Description)"" Margin=""0,0,2,0""/><TextBlock Name=""$($appInfo.Name)Link"" Style=""{StaticResource HoverTextBlockStyle}"" Text=""(?)"" ToolTip=""$($appInfo.Link)"" />`r`n</StackPanel>`r`n"
$blockXml += "<StackPanel Orientation=""Horizontal"">`n<CheckBox Name=""$($appInfo.Name)"" Content=""$($appInfo.Content)"" $($checkedStatus)ToolTip=""$($appInfo.Description)"" Margin=""0,0,2,0""/><TextBlock Name=""$($appInfo.Name)Link"" Style=""{StaticResource HoverTextBlockStyle}"" Text=""(?)"" ToolTip=""$($appInfo.Link)"" />`n</StackPanel>`n"
}
}
}
}
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n"
$blockXml +="`n</StackPanel>`n</Border>`n"
}
return ($blockXml)
}

View File

@ -98,15 +98,6 @@ Function Get-WinUtilToggleStatus {
return $false
}
}
if($ToggleSwitch -eq "WPFToggleTaskbarSearch"){
$SearchButton = (Get-ItemProperty -path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search").SearchboxTaskbarMode
if($SearchButton -eq 0){
return $false
}
else{
return $true
}
}
if ($ToggleSwitch -eq "WPFToggleStickyKeys") {
$StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags
if($StickyKeys -eq 58){
@ -116,15 +107,6 @@ Function Get-WinUtilToggleStatus {
return $true
}
}
if ($ToggleSwitch -eq "WPFToggleTaskView") {
$TaskView = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').ShowTaskViewButton
if($TaskView -eq 0){
return $false
}
else{
return $true
}
}
if ($ToggleSwitch -eq "WPFToggleTaskbarWidgets") {
$TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa
if($TaskbarWidgets -eq 0) {

View File

@ -11,7 +11,9 @@ function Get-WinUtilVariables {
[Parameter()]
[string[]]$Type
)
$keys = ($sync.keys).where{ $_ -like "WPF*" }
$keys = $sync.keys | Where-Object { $_ -like "WPF*" }
if ($Type) {
$output = $keys | ForEach-Object {
Try {

View File

@ -1,3 +1,19 @@
function Invoke-MicroWin-Helper {
<#
.SYNOPSIS
checking unit tests
.PARAMETER Name
no parameters
.EXAMPLE
placeholder
#>
}
function Test-CompatibleImage() {
<#
@ -159,14 +175,8 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
{
$status = "Removing Provisioned $($appx.PackageName)"
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
try {
Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
}
catch {
Write-Host "Application $($appx.PackageName) could not be removed"
continue
}
}
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
}
else

View File

@ -1,21 +1,29 @@
function Invoke-WinUtilGPU {
$gpuInfo = Get-CimInstance Win32_VideoController
# GPUs to blacklist from using Demanding Theming
$lowPowerGPUs = (
"*NVIDIA GeForce*M*",
"*NVIDIA GeForce*Laptop*",
"*NVIDIA GeForce*GT*",
"*AMD Radeon(TM)*",
"*UHD*"
)
foreach ($gpu in $gpuInfo) {
$gpuName = $gpu.Name
if ($gpuName -like "*NVIDIA*") {
return $true # NVIDIA GPU found
}
}
foreach ($gpu in $gpuInfo) {
foreach ($gpuPattern in $lowPowerGPUs){
if ($gpu.Name -like $gpuPattern) {
return $false
$gpuName = $gpu.Name
if ($gpuName -like "*AMD Radeon RX*") {
return $true # AMD GPU Found
}
}
foreach ($gpu in $gpuInfo) {
$gpuName = $gpu.Name
if ($gpuName -like "*UHD*") {
return $false # Intel Intergrated GPU Found
}
}
foreach ($gpu in $gpuInfo) {
$gpuName = $gpu.Name
if ($gpuName -like "*AMD Radeon(TM)*") {
return $false # AMD Intergrated GPU Found
}
}
}
return $true
}

View File

@ -1,34 +0,0 @@
function Invoke-WinUtilTaskView {
<#
.SYNOPSIS
Enable/Disable Task View
.PARAMETER Enabled
Indicates whether to enable or disable Task View
#>
Param($Enabled)
Try{
if ($Enabled -eq $false){
Write-Host "Enabling Task View"
$value = 1
}
else {
Write-Host "Disabling Task View"
$value = 0
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value
}
Catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
}
Catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
}
Catch{
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
}

View File

@ -1,34 +0,0 @@
function Invoke-WinUtilTaskbarSearch {
<#
.SYNOPSIS
Enable/Disable Taskbar Widgets
.PARAMETER Enabled
Indicates whether to enable or disable Taskbar Widgets
#>
Param($Enabled)
Try{
if ($Enabled -eq $false){
Write-Host "Enabling Search Button"
$value = 1
}
else {
Write-Host "Disabling Search Button"
$value = 0
}
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\"
Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value
}
Catch [System.Security.SecurityException] {
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
}
Catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $psitem.Exception.ErrorRecord
}
Catch{
Write-Warning "Unable to set $Name due to unhandled exception"
Write-Warning $psitem.Exception.StackTrace
}
}

View File

@ -178,67 +178,17 @@ $cttLogoPath = @"
$winutilTextBlock.Foreground = $foregroundColor
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block
$stackPanel.Children.Add($winutilTextBlock)
# Add TextBlock for information with text wrapping and margins
$messageTextBlock = New-Object Windows.Controls.TextBlock
$messageTextBlock.Text = $Message
$messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping
$messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left
$messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top
$messageTextBlock.Margin = New-Object Windows.Thickness(10) # Add margins around the text block
# Define the Regex to find hyperlinks formatted as HTML <a> tags
$regex = [regex]::new('<a href="([^"]+)">([^<]+)</a>')
$lastPos = 0
# Iterate through each match and add regular text and hyperlinks
foreach ($match in $regex.Matches($Message)) {
# Add the text before the hyperlink, if any
$textBefore = $Message.Substring($lastPos, $match.Index - $lastPos)
if ($textBefore.Length -gt 0) {
$messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textBefore)))
}
# Create and add the hyperlink
$hyperlink = New-Object Windows.Documents.Hyperlink
$hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value)
$hyperlink.Inlines.Add($match.Groups[2].Value)
$hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline
$hyperlink.Foreground = $foregroundColor
$hyperlink.Add_Click({
param($sender, $args)
Start-Process $sender.NavigateUri.AbsoluteUri
})
$hyperlink.Add_MouseEnter({
param($sender, $args)
$sender.Foreground = [Windows.Media.Brushes]::LightGray
})
$hyperlink.Add_MouseLeave({
param($sender, $args)
$sender.Foreground = $foregroundColor
})
$messageTextBlock.Inlines.Add($hyperlink)
# Update the last position
$lastPos = $match.Index + $match.Length
}
# Add any remaining text after the last hyperlink
if ($lastPos -lt $Message.Length) {
$textAfter = $Message.Substring($lastPos)
$messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textAfter)))
}
# If no matches, add the entire message as a run
if ($regex.Matches($Message).Count -eq 0) {
$messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($Message)))
}
# Add the TextBlock to the Grid
$grid.Children.Add($messageTextBlock)
[Windows.Controls.Grid]::SetRow($messageTextBlock, 1) # Set the row to the second row (0-based index)
# Add OK button
$okButton = New-Object Windows.Controls.Button
$okButton.Content = "OK"

View File

@ -26,7 +26,7 @@ function Invoke-WPFButton {
"WPFclear" {Invoke-WPFPresets -preset $null -imported $true}
"WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"}
"WPFtweaksbutton" {Invoke-WPFtweaksbutton}
"WPFOOSUbutton" {Invoke-WPFOOSU}
"WPFOOSUbutton" {Invoke-WPFOOSU -action "customize"}
"WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enabled"}
"WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disabled"}
"WPFundoall" {Invoke-WPFundoall}

View File

@ -1,20 +1,43 @@
function Invoke-WPFOOSU {
<#
.SYNOPSIS
Downloads and runs OO Shutup 10
Downloads and runs OO Shutup 10 with or without config files
.PARAMETER action
Specifies how OOSU should be started
customize: Opens the OOSU GUI
recommended: Loads and applies the recommended OOSU policies silently
undo: Resets all policies to factory silently
#>
try {
param (
[ValidateSet("customize", "recommended", "undo")]
[string]$action
)
$OOSU_filepath = "$ENV:temp\OOSU10.exe"
$Initial_ProgressPreference = $ProgressPreference
$ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest
Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath
switch ($action)
{
"customize"{
Write-Host "Starting OO Shutup 10 ..."
Start-Process $OOSU_filepath
}
catch {
Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red
"recommended"{
$oosu_config = "$ENV:temp\ooshutup10_recommended.cfg"
$sync.configs.ooshutup10_recommended | Out-File -FilePath $oosu_config -Force
Write-Host "Applying recommended OO Shutup 10 Policies"
Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait
}
"undo"{
$oosu_config = "$ENV:temp\ooshutup10_factory.cfg"
$sync.configs.ooshutup10_factory | Out-File -FilePath $oosu_config -Force
Write-Host "Resetting all OO Shutup 10 Policies"
Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait
}
}
finally {
$ProgressPreference = $Initial_ProgressPreference
}
}

View File

@ -5,8 +5,6 @@ function Invoke-WPFPanelAutologin {
Enables autologin using Sysinternals Autologon.exe
#>
# Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe"
cmd /c "$env:temp\autologin.exe" /accepteula
curl.exe -ss "https://live.sysinternals.com/Autologon.exe" -o $env:temp\autologin.exe # Official Microsoft recommendation https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
cmd /c $env:temp\autologin.exe /accepteula
}

View File

@ -28,7 +28,5 @@ function Invoke-WPFToggle {
"WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)}
"WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)}
"WPFToggleTaskbarWidgets" {Invoke-WinUtilTaskbarWidgets $(Get-WinUtilToggleStatus WPFToggleTaskbarWidgets)}
"WPFToggleTaskbarSearch" {Invoke-WinUtilTaskbarSearch $(Get-WinUtilToggleStatus WPFToggleTaskbarSearch)}
"WPFToggleTaskView" {Invoke-WinUtilTaskView $(Get-WinUtilToggleStatus WPFToggleTaskView)}
}
}

View File

@ -15,7 +15,7 @@ function Invoke-WPFUnInstall {
$PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
if ($PackagesToInstall.Count -eq 0) {
$WarningMsg = "Please select the program(s) to uninstall"
$WarningMsg = "Please select the program(s) to install"
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}

0
logs/test Normal file
View File

View File

@ -10,7 +10,7 @@ $InitialSessionState = [System.Management.Automation.Runspaces.InitialSessionSta
$InitialSessionState.Variables.Add($hashVars)
# Get every private function and add them to the session state
$functions = (Get-ChildItem function:\).where{$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
$functions = Get-ChildItem function:\ | Where-Object {$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
foreach ($function in $functions){
$functionDefinition = Get-Content function:\$($function.name)
$functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition
@ -133,17 +133,9 @@ $sync.keys | ForEach-Object {
# Load computer information in the background
Invoke-WPFRunspace -ScriptBlock {
try{
$oldProgressPreference = $ProgressPreference
$ProgressPreference = "SilentlyContinue"
$sync.ConfigLoaded = $False
$sync.ComputerInfo = Get-ComputerInfo
$sync.ConfigLoaded = $True
}
finally{
$ProgressPreference = "Continue"
}
} | Out-Null
#===========================================================================
@ -153,6 +145,9 @@ Invoke-WPFRunspace -ScriptBlock {
# Print the logo
Invoke-WPFFormVariables
# Install Winget if not already present
Install-WinUtilWinget
# Set the titlebar
$sync["Form"].title = $sync["Form"].title + " " + $sync.version
# Set the commands that will run when the form is closed
@ -276,7 +271,7 @@ Add-Type @"
"@
}
foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) {
foreach ($proc in (Get-Process | Where-Object { $_.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)"
@ -287,37 +282,19 @@ Add-Type @"
}
}
# Using a TaskbarItem Overlay until someone figures out how to replace the icon correctly
# URL of the image
$imageUrl = "https://christitus.com/images/logo-full.png"
# Download the image
$imagePath = "$env:TEMP\logo-full.png"
Invoke-WebRequest -Uri $imageUrl -OutFile $imagePath
# Read the image file as a byte array
$imageBytes = [System.IO.File]::ReadAllBytes($imagePath)
# Convert the byte array to a Base64 string
$base64String = [System.Convert]::ToBase64String($imageBytes)
# Create a streaming image by streaming the base64 string to a bitmap streamsource
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage
$bitmap.BeginInit()
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64String)
$bitmap.EndInit()
$bitmap.Freeze()
# Ensure TaskbarItemInfo is created if not already
if (-not $sync["Form"].TaskbarItemInfo) {
$sync["Form"].TaskbarItemInfo = New-Object System.Windows.Shell.TaskbarItemInfo
}
# Set the overlay icon for the taskbar
$sync["Form"].TaskbarItemInfo.Overlay = $bitmap
# need to experiemnt more
# setting icon for the windows is still not working
# $pngUrl = "https://christitus.com/images/logo-full.png"
# $pngPath = "$env:TEMP\cttlogo.png"
# $iconPath = "$env:TEMP\cttlogo.ico"
# # Download the PNG file
# Invoke-WebRequest -Uri $pngUrl -OutFile $pngPath
# if (Test-Path -Path $pngPath) {
# ConvertTo-Icon -bitmapPath $pngPath -iconPath $iconPath
# }
# $icon = [System.Drawing.Icon]::ExtractAssociatedIcon($iconPath)
# Write-Host $icon.Handle
# [Window]::SendMessage($windowHandle, 0x80, [IntPtr]::Zero, $icon.Handle)
$rect = New-Object RECT
[Window]::GetWindowRect($windowHandle, [ref]$rect)
@ -392,11 +369,11 @@ Add-Type @"
# Load Checkboxes and Labels outside of the Filter fuction only once on startup for performance reasons
$filter = Get-WinUtilVariables -Type CheckBox
$CheckBoxes = ($sync.GetEnumerator()).where{ $psitem.Key -in $filter }
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter }
$filter = Get-WinUtilVariables -Type Label
$labels = @{}
($sync.GetEnumerator()).where{$PSItem.Key -in $filter} | ForEach-Object {$labels[$_.Key] = $_.Value}
$sync.GetEnumerator() | Where-Object {$PSItem.Key -in $filter} | ForEach-Object {$labels[$_.Key] = $_.Value}
$allCategories = $checkBoxes.Name | ForEach-Object {$sync.configs.applications.$_} | Select-Object -Unique -ExpandProperty category
@ -490,14 +467,17 @@ $sync["AboutMenuItem"].Add_Click({
# Handle Export menu item click
Write-Debug "About clicked"
$sync["SettingsPopup"].IsOpen = $false
# Example usage
$authorInfo = @"
Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a>
Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a>
MicroWin : <a href="https://github.com/KonTy">@KonTy</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>
Author : @christitustech
Runspace : @DeveloperDurp
GUI : @KonTy
MicroWin : @KonTy
GitHub : https://github.com/ChrisTitusTech/winutil
Version : $($sync.version)
"@
Show-CustomDialog -Message $authorInfo -Width 400
})
$sync["Form"].ShowDialog() | out-null
Stop-Transcript

View File

@ -1,40 +0,0 @@
<#
.SYNOPSIS
This Script is used as a target for the https://christitus.com/windev alias.
It queries the latest winget release (no matter if Pre-Release, Draft or Full Release) and invokes It
.DESCRIPTION
This Script provides a simple way to always start the bleeding edge release even if it's not yet a full release.
This function should be run with administrative privileges.
Because this way of recursively invoking scripts via Invoke-Expression it might very well happen that AV Programs flag this because it's a common way of mulitstage exploits to run
.EXAMPLE
irm https://christitus.com/windev | iex
OR
Run in Admin Powershell > ./windev.ps1
#>
# Function to fetch the latest release tag from the GitHub API
function Get-LatestRelease {
try {
$releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/ChrisTitusTech/winutil/releases'
$latestRelease = $releases | Select-Object -First 1
return $latestRelease.tag_name
} catch {
Write-Host "Error fetching release data: $_" -ForegroundColor Red
return $null
}
}
# Function to redirect to the latest pre-release version
function RedirectToLatestPreRelease {
$latestRelease = Get-LatestRelease
if ($latestRelease) {
$url = "https://raw.githubusercontent.com/ChrisTitusTech/winutil/$latestRelease/winutil.ps1"
Invoke-RestMethod $url | Invoke-Expression
} else {
Write-Host 'Unable to determine latest pre-release version.' -ForegroundColor Red
}
}
# Call the redirect function
RedirectToLatestPreRelease

File diff suppressed because it is too large Load Diff

View File

@ -571,18 +571,6 @@
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ScrollVisibilityRectangle" TargetType="Rectangle">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=ComputedHorizontalScrollBarVisibility, ElementName=scrollViewer}" Value="Visible"/>
<Condition Binding="{Binding Path=ComputedVerticalScrollBarVisibility, ElementName=scrollViewer}" Value="Visible"/>
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Background="{MainBackgroundColor}" ShowGridLines="False" Name="WPFMainGrid" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
@ -713,20 +701,18 @@
<StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.ColumnSpan="3" Margin="5">
<Button Name="WPFinstall" Content=" Install/Upgrade Selected" Margin="2" />
<Button Name="WPFInstallUpgrade" Content=" Upgrade All" Margin="2"/>
<Button Name="WPFuninstall" Content=" Uninstall Selected" Margin="2"/>
<Button Name="WPFuninstall" Content=" Uninstall Selection" Margin="2"/>
<Button Name="WPFGetInstalled" Content=" Get Installed" Margin="2"/>
<Button Name="WPFclearWinget" Content=" Clear Selection" Margin="2"/>
</StackPanel>
<ScrollViewer x:Name="scrollViewer" Grid.Row="1" Grid.Column="0" Padding="-1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
<ScrollViewer Grid.Row="1" Grid.Column="0" Padding="-1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
BorderBrush="Transparent" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
{{InstallPanel_applications}}
</Grid>
</ScrollViewer>
<Rectangle Grid.Row="1" Grid.Column="0" Width="18" Height="18" Fill="{MainBackgroundColor}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Style="{StaticResource ScrollVisibilityRectangle}"/>
</Grid>
</TabItem>
<TabItem Header="Tweaks" Visibility="Collapsed" Name="WPFTab2">