mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-07-01 02:22:34 -05:00
Compare commits
41 Commits
832f08c18b
...
24.06.11
Author | SHA1 | Date | |
---|---|---|---|
3a83203298 | |||
09b1e56967 | |||
af94adbabe | |||
a609f771c8 | |||
2b80e14bf9 | |||
1325ef54b8 | |||
8a76641d20 | |||
3dca1ee43e | |||
7b6decb28a | |||
774b64b092 | |||
02ea93c80f | |||
5e10883547 | |||
a8af90a112 | |||
2354645b47 | |||
9ef050442d | |||
c8ae4a812e | |||
ad080f267e | |||
fec5b68b10 | |||
57ff8b0188 | |||
9eceae6751 | |||
88a622c368 | |||
4a7c8a35bf | |||
c3b12e89f8 | |||
f776717f67 | |||
54a575274d | |||
5cd75c0ed6 | |||
6e7c5336c2 | |||
ca9c764cd7 | |||
23af79852a | |||
7bfcd7cb25 | |||
4de1ac39ef | |||
4ac5b79fc8 | |||
420f37f205 | |||
c6c3f0cd03 | |||
dd2e4fb337 | |||
31c6622926 | |||
e745d798b1 | |||
a29364984b | |||
07eeed310b | |||
8e00077e50 | |||
fc505872d2 |
60
.github/workflows/close-old-issues.yaml
vendored
60
.github/workflows/close-old-issues.yaml
vendored
@ -4,62 +4,20 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * *' # Run daily
|
- cron: '0 0 * * *' # Run daily
|
||||||
workflow_dispatch: # This line enables manual triggering
|
workflow_dispatch: # This line enables manual triggering
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
close-issues:
|
close-issues:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
issues: write # Ensure necessary permissions for issues
|
issues: write # Ensure necessary permissions for issues
|
||||||
|
pull-requests: none
|
||||||
|
contents: none
|
||||||
steps:
|
steps:
|
||||||
- name: Close inactive issues
|
- name: Close inactive issues
|
||||||
uses: actions/github-script@v7
|
uses: actions/stale@v9.0.0
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
exempt-issue-labels: "Keep Issue Open"
|
||||||
script: |
|
days-before-issue-close: 14
|
||||||
const octokit = github;
|
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
|
||||||
// Get the repository owner and name
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
const { owner, repo } = context.repo;
|
|
||||||
|
|
||||||
// Define the inactivity period (14 days)
|
|
||||||
const inactivityPeriod = new Date();
|
|
||||||
inactivityPeriod.setDate(inactivityPeriod.getDate() - 14);
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Get all open issues with pagination
|
|
||||||
for await (const response of octokit.paginate.iterator(octokit.rest.issues.listForRepo, {
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
state: 'open',
|
|
||||||
})) {
|
|
||||||
const issues = response.data;
|
|
||||||
|
|
||||||
// Close issues inactive for more than the inactivity period
|
|
||||||
for (const issue of issues) {
|
|
||||||
const lastCommentDate = issue.updated_at;
|
|
||||||
if (new Date(lastCommentDate) < inactivityPeriod) {
|
|
||||||
try {
|
|
||||||
// Close the issue
|
|
||||||
await octokit.rest.issues.update({
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
issue_number: issue.number,
|
|
||||||
state: 'closed',
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add a comment
|
|
||||||
await octokit.rest.issues.createComment({
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
issue_number: issue.number,
|
|
||||||
body: 'Closed due to inactivity',
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Error updating or commenting on issue #${issue.number}: ${error}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Error fetching issues: ${error}`);
|
|
||||||
}
|
|
||||||
|
24
.github/workflows/compile.yaml
vendored
Normal file
24
.github/workflows/compile.yaml
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
name: Compile
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- test*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-runspace:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.head_ref }}
|
||||||
|
- name: Compile project
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
Set-ExecutionPolicy Bypass -Scope Process -Force; ./Compile.ps1
|
||||||
|
continue-on-error: false # Directly fail the job on error, removing the need for a separate check
|
||||||
|
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||||
|
with:
|
||||||
|
commit_message: Compile Winutil
|
||||||
|
if: success()
|
47
.github/workflows/release.yaml
vendored
47
.github/workflows/release.yaml
vendored
@ -1,21 +1,44 @@
|
|||||||
name: Update Branch
|
name: Release WinUtil
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
workflow_run:
|
||||||
branches:
|
workflows: ["Compile"] #Ensure Compile winget.ps1 is done
|
||||||
- main
|
types:
|
||||||
- test*
|
- completed
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-runspace:
|
build-runspace:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
outputs:
|
||||||
|
version: ${{ steps.extract_version.outputs.version }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Checkout Repository
|
||||||
with:
|
uses: actions/checkout@v4
|
||||||
ref: ${{ github.head_ref }}
|
|
||||||
- name: Create local changes
|
- name: Extract Version from winutil.ps1
|
||||||
|
id: extract_version
|
||||||
run: |
|
run: |
|
||||||
powershell.exe -f Compile.ps1
|
$version = ''
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4.16.0
|
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:
|
with:
|
||||||
commit_message: Compile Winutil
|
tag_name: ${{ steps.extract_version.outputs.version }}
|
||||||
|
name: Release ${{ steps.extract_version.outputs.version }}
|
||||||
|
files: ./winutil.ps1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
4
.github/workflows/unittests.yaml
vendored
4
.github/workflows/unittests.yaml
vendored
@ -27,13 +27,13 @@ jobs:
|
|||||||
- name: Install Pester
|
- name: Install Pester
|
||||||
run: |
|
run: |
|
||||||
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
|
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
|
||||||
Install-Module -Name Pester -Force -AllowClobber
|
Install-Module -Name Pester -Force -SkipPublisherCheck -AllowClobber
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- name: Run Pester tests
|
- name: Run Pester tests
|
||||||
run: |
|
run: |
|
||||||
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
|
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
|
||||||
Invoke-Pester -Path 'pester/*.Tests.ps1' -EnableExit
|
Invoke-Pester -Path 'pester/*.Tests.ps1' -Output Detailed
|
||||||
|
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
env:
|
env:
|
||||||
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -15,6 +15,11 @@ winutil.pdb
|
|||||||
# Folder config file
|
# Folder config file
|
||||||
[Dd]esktop.ini
|
[Dd]esktop.ini
|
||||||
|
|
||||||
|
# Ignore Generated XAML Files
|
||||||
|
xaml/inputApp.xaml
|
||||||
|
xaml/inputFeatures.xaml
|
||||||
|
xaml/inputTweaks.xaml
|
||||||
|
|
||||||
# Executables and Configs
|
# Executables and Configs
|
||||||
winget.msixbundle
|
winget.msixbundle
|
||||||
pester.ps1
|
pester.ps1
|
||||||
@ -39,3 +44,4 @@ Microsoft.PowerShell.ConsoleHost.dll
|
|||||||
microwin.log
|
microwin.log
|
||||||
True
|
True
|
||||||
test.ps1
|
test.ps1
|
||||||
|
winutil.ps1
|
||||||
|
110
Compile.ps1
110
Compile.ps1
@ -1,47 +1,109 @@
|
|||||||
|
param (
|
||||||
|
[switch]$Debug
|
||||||
|
)
|
||||||
$OFS = "`r`n"
|
$OFS = "`r`n"
|
||||||
$scriptname = "winutil.ps1"
|
$scriptname = "winutil.ps1"
|
||||||
|
|
||||||
# Variable to sync between runspaces
|
# Variable to sync between runspaces
|
||||||
$sync = [Hashtable]::Synchronized(@{})
|
$sync = [Hashtable]::Synchronized(@{})
|
||||||
$sync.PSScriptRoot = $PSScriptRoot
|
$sync.PSScriptRoot = $PSScriptRoot
|
||||||
$sync.configs = @{}
|
$sync.configs = @{}
|
||||||
|
|
||||||
if (Test-Path -Path "$($scriptname)")
|
$header = @"
|
||||||
{
|
|
||||||
Remove-Item -Force "$($scriptname)"
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-output '
|
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
### ###
|
### ###
|
||||||
### WARNING: This file is automatically generated DO NOT modify this file directly as it will be overwritten ###
|
### WARNING: This file is automatically generated DO NOT modify this file directly as it will be overwritten ###
|
||||||
### ###
|
### ###
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
' | Out-File ./$scriptname -Append -Encoding ascii
|
"@
|
||||||
|
|
||||||
(Get-Content .\scripts\start.ps1).replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)") | Out-File ./$scriptname -Append -Encoding ascii
|
# Create the script in memory.
|
||||||
|
$script_content = [System.Collections.Generic.List[string]]::new()
|
||||||
|
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Adding: Header" -PercentComplete 5
|
||||||
|
$script_content.Add($header)
|
||||||
|
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Adding: Version" -PercentComplete 10
|
||||||
|
$script_content.Add($(Get-Content .\scripts\start.ps1).replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)"))
|
||||||
|
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Adding: Functions" -PercentComplete 20
|
||||||
Get-ChildItem .\functions -Recurse -File | ForEach-Object {
|
Get-ChildItem .\functions -Recurse -File | ForEach-Object {
|
||||||
Get-Content $psitem.FullName | Out-File ./$scriptname -Append -Encoding ascii
|
$script_content.Add($(Get-Content $psitem.FullName))
|
||||||
|
}
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Adding: Config *.json" -PercentComplete 40
|
||||||
|
Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object {
|
||||||
|
|
||||||
|
$json = (Get-Content $psitem.FullName).replace("'","''")
|
||||||
|
|
||||||
|
# Replace every XML Special Character so it'll render correctly in final build
|
||||||
|
# Only do so if json files has content to be displayed (for example the applications, tweaks, features json files)
|
||||||
|
# Some Type Convertion using Casting and Cleaning Up of the convertion result using 'Replace' Method
|
||||||
|
$jsonAsObject = $json | convertfrom-json
|
||||||
|
$firstLevelJsonList = ([System.String]$jsonAsObject).split('=;') | ForEach-Object {
|
||||||
|
$_.Replace('=}','').Replace('@{','').Replace(' ','')
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) {
|
||||||
|
$firstLevelName = $firstLevelJsonList[$i]
|
||||||
|
# Note: Avoid using HTML Entity Codes (for example '”' (stands for "Right Double Quotation Mark")), and use HTML decimal/hex codes instead.
|
||||||
|
# as using HTML Entity Codes will result in XML parse Error when running the compiled script.
|
||||||
|
if ($jsonAsObject.$firstLevelName.content -ne $null) {
|
||||||
|
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&','&').replace('“','“').replace('”','”').replace("'",''').replace('<','<').replace('>','>')
|
||||||
|
$jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('''',"'") # 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('&','&').replace('“','“').replace('”','”').replace("'",''').replace('<','<').replace('>','>')
|
||||||
|
$jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('''',"'") # resolves the Double Apostrophe caused by the first replace function in the main loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# The replace at the end is required, as without it the output of converto-json will be somewhat weird for Multiline String
|
||||||
|
# Most Notably is the scripts in json files, making it harder for users who want to review these scripts that are found in the final compiled script
|
||||||
|
$json = ($jsonAsObject | convertto-json -Depth 3).replace('\r\n',"`r`n")
|
||||||
|
|
||||||
|
$sync.configs.$($psitem.BaseName) = $json | convertfrom-json
|
||||||
|
$script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" ))
|
||||||
|
}
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Adding: Config *.cfg" -PercentComplete 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("'","''")
|
$xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''")
|
||||||
Write-output "`$inputXML = '$xaml'" | Out-File ./$scriptname -Append -Encoding ascii
|
|
||||||
|
|
||||||
Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object {
|
|
||||||
$json = (Get-Content $psitem.FullName).replace("'","''")
|
|
||||||
$sync.configs.$($psitem.BaseName) = $json | convertfrom-json
|
|
||||||
Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" | Out-File ./$scriptname -Append -Encoding ascii
|
|
||||||
}
|
|
||||||
|
|
||||||
# Dot-source the Get-TabXaml function
|
# Dot-source the Get-TabXaml function
|
||||||
. .\functions\private\Get-TabXaml.ps1
|
. .\functions\private\Get-TabXaml.ps1
|
||||||
|
|
||||||
## Xaml Manipulation
|
Write-Progress -Activity "Compiling" -Status "Building: Xaml " -PercentComplete 75
|
||||||
$tabColumns = Get-TabXaml "applications" 5
|
$appXamlContent = Get-TabXaml "applications" 5
|
||||||
$tabColumns | Out-File -FilePath ".\xaml\inputApp.xaml" -Encoding ascii
|
$tweaksXamlContent = Get-TabXaml "tweaks"
|
||||||
$tabColumns = Get-TabXaml "tweaks"
|
$featuresXamlContent = Get-TabXaml "feature"
|
||||||
$tabColumns | Out-File -FilePath ".\xaml\inputTweaks.xaml" -Encoding ascii
|
|
||||||
$tabColumns = Get-TabXaml "feature"
|
|
||||||
$tabColumns | Out-File -FilePath ".\xaml\inputFeatures.xaml" -Encoding ascii
|
|
||||||
|
|
||||||
Get-Content .\scripts\main.ps1 | Out-File ./$scriptname -Append -Encoding ascii
|
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Adding: Xaml " -PercentComplete 90
|
||||||
|
# Replace the placeholder in $inputXML with the content of inputApp.xaml
|
||||||
|
$xaml = $xaml -replace "{{InstallPanel_applications}}", $appXamlContent
|
||||||
|
$xaml = $xaml -replace "{{InstallPanel_tweaks}}", $tweaksXamlContent
|
||||||
|
$xaml = $xaml -replace "{{InstallPanel_features}}", $featuresXamlContent
|
||||||
|
|
||||||
|
$script_content.Add($(Write-output "`$inputXML = '$xaml'"))
|
||||||
|
|
||||||
|
$script_content.Add($(Get-Content .\scripts\main.ps1))
|
||||||
|
|
||||||
|
if ($Debug){
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Writing debug files" -PercentComplete 95
|
||||||
|
$appXamlContent | Out-File -FilePath ".\xaml\inputApp.xaml" -Encoding ascii
|
||||||
|
$tweaksXamlContent | Out-File -FilePath ".\xaml\inputTweaks.xaml" -Encoding ascii
|
||||||
|
$featuresXamlContent | Out-File -FilePath ".\xaml\inputFeatures.xaml" -Encoding ascii
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Progress -Activity "Compiling" -Status "Removing temporary files" -PercentComplete 99
|
||||||
|
Remove-Item ".\xaml\inputApp.xaml" -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item ".\xaml\inputTweaks.xaml" -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item ".\xaml\inputFeatures.xaml" -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
|
||||||
|
Set-Content -Path $scriptname -Value ($script_content -join "`r`n") -Encoding ascii
|
||||||
|
Write-Progress -Activity "Compiling" -Completed
|
26
README.md
26
README.md
@ -10,7 +10,7 @@ Winutil must be run in Admin mode because it performs system-wide tweaks. To ach
|
|||||||
|
|
||||||
1. **Right-Click Method:**
|
1. **Right-Click Method:**
|
||||||
- Right-click on the start menu.
|
- Right-click on the start menu.
|
||||||
- Choose "PowerShell As Admin" (for Windows 10) or "Windows Terminal As Admin" (for Windows 11).
|
- Choose "Windows PowerShell (Admin)" (for Windows 10) or "Terminal (Admin)" (for Windows 11).
|
||||||
|
|
||||||
2. **Search and Launch Method:**
|
2. **Search and Launch Method:**
|
||||||
- Press the Windows key.
|
- Press the Windows key.
|
||||||
@ -22,19 +22,19 @@ Winutil must be run in Admin mode because it performs system-wide tweaks. To ach
|
|||||||
|
|
||||||
#### Simple way
|
#### Simple way
|
||||||
|
|
||||||
```
|
|
||||||
iwr -useb https://christitus.com/win | iex
|
|
||||||
```
|
|
||||||
or by executing:
|
|
||||||
```
|
```
|
||||||
irm https://christitus.com/win | iex
|
irm https://christitus.com/win | iex
|
||||||
```
|
```
|
||||||
Courtesy of the issue raised at: [#144](/../../issues/144)
|
Courtesy of the issue raised at: [#144](/../../issues/144)
|
||||||
|
|
||||||
if for some reason this site is not reachable from your country please try running it directly from github
|
or by executing:
|
||||||
|
|
||||||
```
|
```
|
||||||
irm https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/winutil.ps1 | iex
|
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
|
#### Automation
|
||||||
@ -50,7 +50,7 @@ Some features are avaliable through automation. This allows you to save your con
|
|||||||
5. Install the Windows image.
|
5. Install the Windows image.
|
||||||
6. In the new Windows, Open PowerShell in the admin mode and run command to automatically apply tweaks and install apps from the config file.
|
6. In the new Windows, Open PowerShell in the admin mode and run command to automatically apply tweaks and install apps from the config file.
|
||||||
```
|
```
|
||||||
irm https://christitus.com/win -Config [path-to-your-config] -Run | iex
|
iex "& { $(irm christitus.com/win) } -Config [path-to-your-config] -Run"
|
||||||
```
|
```
|
||||||
7. Have a cup of coffee! Come back when it's done.
|
7. Have a cup of coffee! Come back when it's done.
|
||||||
|
|
||||||
@ -97,7 +97,9 @@ If you are still having issues try changing your DNS provider to 1.1.1.1 || 1.0.
|
|||||||
|
|
||||||
- Essential Tweaks: Offers a collection of essential tweaks aimed at improving system performance, privacy, and resource utilization. These tweaks include creating a system restore point, disabling telemetry, Wi-Fi Sense, setting services to manual, disabling location tracking, and HomeGroup, among others.
|
- Essential Tweaks: Offers a collection of essential tweaks aimed at improving system performance, privacy, and resource utilization. These tweaks include creating a system restore point, disabling telemetry, Wi-Fi Sense, setting services to manual, disabling location tracking, and HomeGroup, among others.
|
||||||
|
|
||||||
- Misc. Tweaks: Encompasses a range of various tweaks to further optimize the system. These tweaks include enabling/disabling power throttling, enabling num lock on startup, removing Cortana and Edge, disabling User Account Control (UAC), notification panel, and configuring TPM during updates, among others.
|
- Advanced Tweaks: Encompasses a range of various advanced power user tweaks to further optimize the system. These tweaks include removing OneDrive and Edge, disabling User Account Control (UAC), notification panel, among others.
|
||||||
|
|
||||||
|
- Toggles: Adds easy to use, one click shortcuts for toggling dark mode, NumLock on startup, file extensions, sticky keys, among others.
|
||||||
|
|
||||||
- Additional Tweaks: Introduces various other tweaks such as enabling dark mode, changing DNS settings, adding an Ultimate Performance mode, and creating shortcuts for WinUtil tools. These tweaks provide users with additional customization options to tailor their system to their preferences.
|
- Additional Tweaks: Introduces various other tweaks such as enabling dark mode, changing DNS settings, adding an Ultimate Performance mode, and creating shortcuts for WinUtil tools. These tweaks provide users with additional customization options to tailor their system to their preferences.
|
||||||
|
|
||||||
@ -125,7 +127,9 @@ If you encounter any challenges or problems with the script, I kindly request th
|
|||||||
|
|
||||||
## Contribute Code
|
## Contribute Code
|
||||||
|
|
||||||
To contribute new code, please ensure that it is submitted to the **TEST BRANCH**. Please note that merges will not be performed directly on the MAIN branch.
|
If you adding, changing, or deleting an Application... submit to **APPLICATIONS branch**. We batch these in at the end of the month.
|
||||||
|
|
||||||
|
If doing a code change and you can submit a PR to main branch, but I am very selective about these. Do not use a code formatter, massive amounts of line changes, and make multiple feature changes. EACH FEATURE CHANGE SHOULD BE IT'S OWN Pull Request!
|
||||||
|
|
||||||
When creating pull requests, it is essential to thoroughly document all changes made. This includes documenting any additions made to the tweaks section and ensuring that corresponding undo measures are in place to remove the newly added tweaks if necessary. Failure to adhere to this format may result in denial of the pull request. Additionally, comprehensive documentation is required for all code changes. Any code lacking sufficient documentation may also be denied.
|
When creating pull requests, it is essential to thoroughly document all changes made. This includes documenting any additions made to the tweaks section and ensuring that corresponding undo measures are in place to remove the newly added tweaks if necessary. Failure to adhere to this format may result in denial of the pull request. Additionally, comprehensive documentation is required for all code changes. Any code lacking sufficient documentation may also be denied.
|
||||||
|
|
||||||
|
736
config/applications.json
Executable file → Normal file
736
config/applications.json
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
227
config/ooshutup10_factory.cfg
Normal file
227
config/ooshutup10_factory.cfg
Normal 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 -
|
@ -1,5 +1,5 @@
|
|||||||
############################################################################
|
############################################################################
|
||||||
# This file was created with O&O ShutUp10++ V1.9.1435
|
# This file was created with O&O ShutUp10++ V1.9.1438
|
||||||
# and can be imported onto another computer.
|
# and can be imported onto another computer.
|
||||||
#
|
#
|
||||||
# Download the application at https://www.oo-software.com/shutup10
|
# Download the application at https://www.oo-software.com/shutup10
|
||||||
@ -13,7 +13,7 @@
|
|||||||
# user does not get any feedback about the import.
|
# user does not get any feedback about the import.
|
||||||
#
|
#
|
||||||
# We are always happy to answer any questions you may have!
|
# We are always happy to answer any questions you may have!
|
||||||
# © 2015-2023 O&O Software GmbH, Berlin. All rights reserved.
|
# © 2015-2024 O&O Software GmbH, Berlin. All rights reserved.
|
||||||
# https://www.oo-software.com/
|
# https://www.oo-software.com/
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
@ -34,15 +34,15 @@ P067 +
|
|||||||
P070 +
|
P070 +
|
||||||
P069 +
|
P069 +
|
||||||
P009 -
|
P009 -
|
||||||
P010 -
|
P010 +
|
||||||
P015 +
|
P015 +
|
||||||
P068 -
|
P068 -
|
||||||
P016 -
|
P016 -
|
||||||
A001 +
|
A001 +
|
||||||
A002 +
|
A002 +
|
||||||
A003 +
|
A003 +
|
||||||
A004 -
|
A004 +
|
||||||
A006 -
|
A006 +
|
||||||
A005 +
|
A005 +
|
||||||
P007 +
|
P007 +
|
||||||
P036 +
|
P036 +
|
||||||
@ -102,35 +102,35 @@ P077 -
|
|||||||
P078 -
|
P078 -
|
||||||
P079 -
|
P079 -
|
||||||
P080 -
|
P080 -
|
||||||
P024 -
|
P024 +
|
||||||
S001 +
|
S001 +
|
||||||
S002 +
|
S002 +
|
||||||
S003 +
|
S003 +
|
||||||
S008 -
|
S008 -
|
||||||
E101 +
|
E101 +
|
||||||
E201 -
|
E201 +
|
||||||
E115 +
|
E115 +
|
||||||
E215 -
|
E215 +
|
||||||
E118 +
|
E118 +
|
||||||
E218 -
|
E218 +
|
||||||
E107 +
|
E107 +
|
||||||
E207 -
|
E207 +
|
||||||
E111 +
|
E111 +
|
||||||
E211 -
|
E211 +
|
||||||
E112 +
|
E112 +
|
||||||
E212 +
|
E212 +
|
||||||
E109 +
|
E109 +
|
||||||
E209 +
|
E209 +
|
||||||
E121 +
|
E121 +
|
||||||
E221 -
|
E221 +
|
||||||
E103 -
|
E103 +
|
||||||
E203 -
|
E203 +
|
||||||
E123 -
|
E123 +
|
||||||
E223 +
|
E223 +
|
||||||
E124 -
|
E124 +
|
||||||
E224 -
|
E224 +
|
||||||
E128 -
|
E128 +
|
||||||
E228 -
|
E228 +
|
||||||
E119 -
|
E119 -
|
||||||
E219 -
|
E219 -
|
||||||
E120 -
|
E120 -
|
||||||
@ -147,10 +147,10 @@ E127 -
|
|||||||
E227 -
|
E227 -
|
||||||
E001 +
|
E001 +
|
||||||
E002 +
|
E002 +
|
||||||
E003 -
|
E003 +
|
||||||
E008 +
|
E008 +
|
||||||
E007 +
|
E007 +
|
||||||
E010 -
|
E010 +
|
||||||
E011 +
|
E011 +
|
||||||
E012 +
|
E012 +
|
||||||
E009 -
|
E009 -
|
||||||
@ -175,6 +175,12 @@ C009 +
|
|||||||
C010 +
|
C010 +
|
||||||
C011 +
|
C011 +
|
||||||
C014 +
|
C014 +
|
||||||
|
C015 +
|
||||||
|
C101 +
|
||||||
|
C201 +
|
||||||
|
C102 +
|
||||||
|
C103 +
|
||||||
|
C203 +
|
||||||
L001 +
|
L001 +
|
||||||
L003 +
|
L003 +
|
||||||
L004 -
|
L004 -
|
||||||
@ -182,7 +188,7 @@ L005 -
|
|||||||
U001 +
|
U001 +
|
||||||
U004 +
|
U004 +
|
||||||
U005 +
|
U005 +
|
||||||
U006 -
|
U006 +
|
||||||
U007 +
|
U007 +
|
||||||
W001 +
|
W001 +
|
||||||
W011 +
|
W011 +
|
||||||
@ -204,19 +210,22 @@ S014 -
|
|||||||
K001 +
|
K001 +
|
||||||
K002 +
|
K002 +
|
||||||
K005 +
|
K005 +
|
||||||
|
M003 +
|
||||||
|
M015 +
|
||||||
|
M016 +
|
||||||
|
M017 -
|
||||||
|
M018 +
|
||||||
|
M019 -
|
||||||
|
M020 +
|
||||||
|
M021 +
|
||||||
M022 +
|
M022 +
|
||||||
M001 +
|
M001 +
|
||||||
M004 +
|
M004 +
|
||||||
M005 +
|
M005 +
|
||||||
M024 -
|
M024 +
|
||||||
M003 -
|
M026 +
|
||||||
|
M027 +
|
||||||
M012 -
|
M012 -
|
||||||
M013 -
|
M013 -
|
||||||
M014 -
|
M014 -
|
||||||
M015 +
|
|
||||||
M017 +
|
|
||||||
M018 +
|
|
||||||
M019 -
|
|
||||||
M020 +
|
|
||||||
M021 -
|
|
||||||
N001 -
|
N001 -
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"desktop": [
|
"Standard": [
|
||||||
"WPFTweaksAH",
|
"WPFTweaksAH",
|
||||||
"WPFTweaksDVR",
|
"WPFTweaksDVR",
|
||||||
"WPFTweaksHiber",
|
"WPFTweaksHiber",
|
||||||
@ -10,21 +10,13 @@
|
|||||||
"WPFTweaksStorage",
|
"WPFTweaksStorage",
|
||||||
"WPFTweaksTele",
|
"WPFTweaksTele",
|
||||||
"WPFTweaksWifi",
|
"WPFTweaksWifi",
|
||||||
"WPFMiscTweaksPower"
|
"WPFTweaksDiskCleanup",
|
||||||
|
"WPFTweaksDeleteTempFiles",
|
||||||
|
"WPFTweaksEndTaskOnTaskbar",
|
||||||
|
"WPFTweaksRestorePoint",
|
||||||
|
"WPFTweaksTeredo"
|
||||||
],
|
],
|
||||||
"laptop": [
|
"Minimal": [
|
||||||
"WPFTweaksAH",
|
|
||||||
"WPFTweaksDVR",
|
|
||||||
"WPFTweaksHome",
|
|
||||||
"WPFTweaksLoc",
|
|
||||||
"WPFTweaksOO",
|
|
||||||
"WPFTweaksServices",
|
|
||||||
"WPFTweaksStorage",
|
|
||||||
"WPFTweaksTele",
|
|
||||||
"WPFTweaksWifi",
|
|
||||||
"WPFMiscTweaksLapPower"
|
|
||||||
],
|
|
||||||
"minimal": [
|
|
||||||
"WPFTweaksHome",
|
"WPFTweaksHome",
|
||||||
"WPFTweaksOO",
|
"WPFTweaksOO",
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
"ButtonBackgroundMouseoverColor": "#C2C2C2",
|
"ButtonBackgroundMouseoverColor": "#C2C2C2",
|
||||||
"ButtonBackgroundSelectedColor": "#F0F0F0",
|
"ButtonBackgroundSelectedColor": "#F0F0F0",
|
||||||
"ButtonForegroundColor": "#000000",
|
"ButtonForegroundColor": "#000000",
|
||||||
|
"ToggleButtonOnColor": "#2e77ff",
|
||||||
"ButtonBorderThickness": "1",
|
"ButtonBorderThickness": "1",
|
||||||
"ButtonMargin": "1",
|
"ButtonMargin": "1",
|
||||||
"ButtonCornerRadius": "2",
|
"ButtonCornerRadius": "2",
|
||||||
@ -53,6 +54,7 @@
|
|||||||
"ButtonBackgroundMouseoverColor": "#A55A64",
|
"ButtonBackgroundMouseoverColor": "#A55A64",
|
||||||
"ButtonBackgroundSelectedColor": "#FF5733",
|
"ButtonBackgroundSelectedColor": "#FF5733",
|
||||||
"ButtonForegroundColor": "#9CCC65",
|
"ButtonForegroundColor": "#9CCC65",
|
||||||
|
"ToggleButtonOnColor": "#2e77ff",
|
||||||
"ButtonBorderThickness": "1",
|
"ButtonBorderThickness": "1",
|
||||||
"ButtonMargin": "1",
|
"ButtonMargin": "1",
|
||||||
"ButtonCornerRadius": "2",
|
"ButtonCornerRadius": "2",
|
||||||
@ -60,5 +62,36 @@
|
|||||||
"BorderColor": "#FFAC1C",
|
"BorderColor": "#FFAC1C",
|
||||||
"BorderOpacity": "0.8",
|
"BorderOpacity": "0.8",
|
||||||
"ShadowPulse": "0:0:3"
|
"ShadowPulse": "0:0:3"
|
||||||
|
},
|
||||||
|
"Dark": {
|
||||||
|
"ComboBoxBackgroundColor": "#000000",
|
||||||
|
"LabelboxForegroundColor": "#FFEE58",
|
||||||
|
"MainForegroundColor": "#9CCC65",
|
||||||
|
"MainBackgroundColor": "#000000",
|
||||||
|
"LabelBackgroundColor": "#000000",
|
||||||
|
"LinkForegroundColor": "#add8e6",
|
||||||
|
"LinkHoverForegroundColor": "#FFFFFF",
|
||||||
|
"ComboBoxForegroundColor": "#FFEE58",
|
||||||
|
"ButtonInstallBackgroundColor": "#222222",
|
||||||
|
"ButtonTweaksBackgroundColor": "#333333",
|
||||||
|
"ButtonConfigBackgroundColor": "#444444",
|
||||||
|
"ButtonUpdatesBackgroundColor": "#555555",
|
||||||
|
"ButtonInstallForegroundColor": "#FFFFFF",
|
||||||
|
"ButtonTweaksForegroundColor": "#FFFFFF",
|
||||||
|
"ButtonConfigForegroundColor": "#FFFFFF",
|
||||||
|
"ButtonUpdatesForegroundColor": "#FFFFFF",
|
||||||
|
"ButtonBackgroundColor": "#000019",
|
||||||
|
"ButtonBackgroundPressedColor": "#9CCC65",
|
||||||
|
"ButtonBackgroundMouseoverColor": "#FF5733",
|
||||||
|
"ButtonBackgroundSelectedColor": "#FF5733",
|
||||||
|
"ButtonForegroundColor": "#9CCC65",
|
||||||
|
"ToggleButtonOnColor": "#2e77ff",
|
||||||
|
"ButtonBorderThickness": "1",
|
||||||
|
"ButtonMargin": "1",
|
||||||
|
"ButtonCornerRadius": "2",
|
||||||
|
"ToggleButtonHeight": "25",
|
||||||
|
"BorderColor": "#FFAC1C",
|
||||||
|
"BorderOpacity": "0.2",
|
||||||
|
"ShadowPulse": "Forever"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -34,7 +34,7 @@
|
|||||||
"Description": "Hibernation is really meant for laptops as it saves what's in memory before turning the pc off. It really should never be used, but some people are lazy and rely on it. Don't be like Bob. Bob likes hibernation.",
|
"Description": "Hibernation is really meant for laptops as it saves what's in memory before turning the pc off. It really should never be used, but some people are lazy and rely on it. Don't be like Bob. Bob likes hibernation.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a011_",
|
"Order": "a005_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\System\\CurrentControlSet\\Control\\Session Manager\\Power",
|
"Path": "HKLM:\\System\\CurrentControlSet\\Control\\Session Manager\\Power",
|
||||||
@ -53,6 +53,56 @@
|
|||||||
],
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"powercfg.exe /hibernate off"
|
"powercfg.exe /hibernate off"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"powercfg.exe /hibernate on"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a014_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0",
|
||||||
|
"OriginalValue": "1",
|
||||||
|
"Name": "Attributes",
|
||||||
|
"Value": "2",
|
||||||
|
"Type": "DWord"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\abfc2519-3608-4c2a-94ea-171b0ed546ab\\94ac6d29-73ce-41a6-809f-6363ba21b47e",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"Name": "Attributes ",
|
||||||
|
"Value": "2",
|
||||||
|
"Type": "DWord"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Turn on Hibernation\"
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/hibernate on\" -NoNewWindow -Wait
|
||||||
|
|
||||||
|
# Set hibernation as the default action
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-ac 60\" -NoNewWindow -Wait
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-dc 60\" -NoNewWindow -Wait
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-ac 10\" -NoNewWindow -Wait
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 1\" -NoNewWindow -Wait
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Turn off Hibernation\"
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/hibernate off\" -NoNewWindow -Wait
|
||||||
|
|
||||||
|
# Set standby to detault values
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-ac 15\" -NoNewWindow -Wait
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change standby-timeout-dc 15\" -NoNewWindow -Wait
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-ac 15\" -NoNewWindow -Wait
|
||||||
|
Start-Process -FilePath powercfg -ArgumentList \"/change monitor-timeout-dc 15\" -NoNewWindow -Wait
|
||||||
|
"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"WPFTweaksHome": {
|
"WPFTweaksHome": {
|
||||||
@ -60,7 +110,7 @@
|
|||||||
"Description": "Disables HomeGroup - HomeGroup is a password-protected home networking service that lets you share your stuff with other PCs that are currently running and connected to your network.",
|
"Description": "Disables HomeGroup - HomeGroup is a password-protected home networking service that lets you share your stuff with other PCs that are currently running and connected to your network.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a009_",
|
"Order": "a005_",
|
||||||
"service": [
|
"service": [
|
||||||
{
|
{
|
||||||
"Name": "HomeGroupListener",
|
"Name": "HomeGroupListener",
|
||||||
@ -79,7 +129,7 @@
|
|||||||
"Description": "Disables Location Tracking...DUH!",
|
"Description": "Disables Location Tracking...DUH!",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a008_",
|
"Order": "a005_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location",
|
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location",
|
||||||
@ -1870,25 +1920,11 @@
|
|||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks\\Games",
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\UserProfileEngagement",
|
||||||
"OriginalValue": "1",
|
"OriginalValue": "1",
|
||||||
"Name": "GPU Priority",
|
"Name": "ScoobeSystemSettingEnabled",
|
||||||
"Value": "8",
|
"Value": "0",
|
||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
},
|
|
||||||
{
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks\\Games",
|
|
||||||
"OriginalValue": "1",
|
|
||||||
"Name": "Priority",
|
|
||||||
"Value": "6",
|
|
||||||
"Type": "DWord"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks\\Games",
|
|
||||||
"OriginalValue": "High",
|
|
||||||
"Name": "Scheduling Category",
|
|
||||||
"Value": "High",
|
|
||||||
"Type": "String"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
@ -1932,7 +1968,7 @@
|
|||||||
"Description": "Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location.",
|
"Description": "Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a004_",
|
"Order": "a005_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowWiFiHotSpotReporting",
|
"Path": "HKLM:\\Software\\Microsoft\\PolicyManager\\default\\WiFi\\AllowWiFiHotSpotReporting",
|
||||||
@ -1955,7 +1991,7 @@
|
|||||||
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.",
|
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a022_",
|
"Order": "a027_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation",
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation",
|
||||||
@ -1971,7 +2007,7 @@
|
|||||||
"Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
|
"Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a021_",
|
"Order": "a027_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKCU:\\Control Panel\\Desktop",
|
"Path": "HKCU:\\Control Panel\\Desktop",
|
||||||
@ -2077,7 +2113,7 @@
|
|||||||
"Description": "USE WITH CAUTION!!!!! This will remove ALL Microsoft store apps other than the essentials to make winget work. Games installed by MS Store ARE INCLUDED!",
|
"Description": "USE WITH CAUTION!!!!! This will remove ALL Microsoft store apps other than the essentials to make winget work. Games installed by MS Store ARE INCLUDED!",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a025_",
|
"Order": "a028_",
|
||||||
"appx": [
|
"appx": [
|
||||||
"Microsoft.Microsoft3DViewer",
|
"Microsoft.Microsoft3DViewer",
|
||||||
"Microsoft.AppConnector",
|
"Microsoft.AppConnector",
|
||||||
@ -2196,7 +2232,7 @@
|
|||||||
"Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications",
|
"Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Checked": "True",
|
"Checked": "False",
|
||||||
"Order": "a001_",
|
"Order": "a001_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
@ -2221,8 +2257,21 @@
|
|||||||
Set-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -Value \"0\" -Type DWord -Force -ErrorAction Stop | Out-Null
|
Set-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -Value \"0\" -Type DWord -Force -ErrorAction Stop | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Attempt to load the required module for Get-ComputerRestorePoint
|
||||||
|
try {
|
||||||
|
Import-Module Microsoft.PowerShell.Management -ErrorAction Stop
|
||||||
|
} catch {
|
||||||
|
Write-Host \"Failed to load the Microsoft.PowerShell.Management module: $_\"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
# Get all the restore points for the current day
|
# Get all the restore points for the current day
|
||||||
|
try {
|
||||||
$existingRestorePoints = Get-ComputerRestorePoint | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date }
|
$existingRestorePoints = Get-ComputerRestorePoint | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date }
|
||||||
|
} catch {
|
||||||
|
Write-Host \"Failed to retrieve restore points: $_\"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
# Check if there is already a restore point created today
|
# Check if there is already a restore point created today
|
||||||
if ($existingRestorePoints.Count -eq 0) {
|
if ($existingRestorePoints.Count -eq 0) {
|
||||||
@ -2234,19 +2283,48 @@
|
|||||||
"
|
"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"WPFTweaksOO": {
|
"WPFTweaksEndTaskOnTaskbar": {
|
||||||
"Content": "Run OO Shutup",
|
"Content": "Enable End Task With Right Click",
|
||||||
"Description": "Runs OO Shutup from https://www.oo-software.com/en/shutup10",
|
"Description": "Enables option to end task when right clicking a program in the taskbar",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a002_",
|
"Order": "a006_",
|
||||||
"Content": "Run OO Shutup",
|
|
||||||
"ToolTip": "Runs OO Shutup from https://www.oo-software.com/en/shutup10",
|
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"curl.exe -s \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/ooshutup10_winutil_settings.cfg\" -o $ENV:temp\\ooshutup10.cfg
|
|
||||||
curl.exe -s \"https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe\" -o $ENV:temp\\OOSU10.exe
|
|
||||||
Start-Process $ENV:temp\\OOSU10.exe -ArgumentList \"\"\"$ENV:temp\\ooshutup10.cfg\"\" /quiet\"
|
|
||||||
"
|
"
|
||||||
|
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\" -Name \"TaskbarEndTask\" -Type \"DWord\" -Value \"1\"
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings\" -Name \"TaskbarEndTask\" -Type \"DWord\" -Value \"0\"
|
||||||
|
"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"WPFTweaksPowershell7": {
|
||||||
|
"Content": "Replace Default Powershell 5 to Powershell 7",
|
||||||
|
"Description": "This will edit the config file of the Windows Terminal Replacing the Powershell 5 to Powershell 7 and install Powershell 7 if necessary",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a009_",
|
||||||
|
"InvokeScript": [
|
||||||
|
"Invoke-WPFTweakPS7 -action \"PS7\""
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"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": {
|
"WPFTweaksStorage": {
|
||||||
@ -2254,13 +2332,12 @@
|
|||||||
"Description": "Storage Sense deletes temp files automatically.",
|
"Description": "Storage Sense deletes temp files automatically.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a010_",
|
"Order": "a005_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"Remove-Item -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Recurse -ErrorAction SilentlyContinue"
|
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 0 -Type Dword -Force"
|
||||||
],
|
],
|
||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"New-Item -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" | Out-Null
|
"Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy\" -Name \"01\" -Value 1 -Type Dword -Force"
|
||||||
"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"WPFTweaksRemoveEdge": {
|
"WPFTweaksRemoveEdge": {
|
||||||
@ -2268,7 +2345,7 @@
|
|||||||
"Description": "Removes MS Edge when it gets reinstalled by updates.",
|
"Description": "Removes MS Edge when it gets reinstalled by updates.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a026_",
|
"Order": "a029_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
#:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
|
#:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
|
||||||
@ -2285,12 +2362,113 @@
|
|||||||
"
|
"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"WPFTweaksRemoveCopilot": {
|
||||||
|
"Content": "Disable Microsoft Copilot",
|
||||||
|
"Description": "Disables MS Copilot AI built into Windows since 23H2.",
|
||||||
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a025_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsCopilot",
|
||||||
|
"Name": "TurnOffWindowsCopilot",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "1",
|
||||||
|
"OriginalValue": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\WindowsCopilot",
|
||||||
|
"Name": "TurnOffWindowsCopilot",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "1",
|
||||||
|
"OriginalValue": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
||||||
|
"Name": "ShowCopilotButton",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "0",
|
||||||
|
"OriginalValue": "1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Remove Copilot\"
|
||||||
|
dism /online /remove-package /package-name:Microsoft.Windows.Copilot
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Install Copilot\"
|
||||||
|
dism /online /add-package /package-name:Microsoft.Windows.Copilot
|
||||||
|
"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a0015_",
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Kill OneDrive process\"
|
||||||
|
$serviceName = \"LMS\"
|
||||||
|
Write-Host \"Stopping and disabling service: $serviceName\"
|
||||||
|
Stop-Service -Name $serviceName -Force -ErrorAction SilentlyContinue;
|
||||||
|
Set-Service -Name $serviceName -StartupType Disabled -ErrorAction SilentlyContinue;
|
||||||
|
|
||||||
|
Write-Host \"Removing service: $serviceName\";
|
||||||
|
sc.exe delete $serviceName;
|
||||||
|
|
||||||
|
Write-Host \"Removing LMS driver packages\";
|
||||||
|
$lmsDriverPackages = Get-ChildItem -Path \"C:\\Windows\\System32\\DriverStore\\FileRepository\" -Recurse -Filter \"lms.inf*\";
|
||||||
|
foreach ($package in $lmsDriverPackages) {
|
||||||
|
Write-Host \"Removing driver package: $($package.Name)\";
|
||||||
|
pnputil /delete-driver $($package.Name) /uninstall /force;
|
||||||
|
}
|
||||||
|
if ($lmsDriverPackages.Count -eq 0) {
|
||||||
|
Write-Host \"No LMS driver packages found in the driver store.\";
|
||||||
|
} else {
|
||||||
|
Write-Host \"All found LMS driver packages have been removed.\";
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host \"Searching and deleting LMS executable files\";
|
||||||
|
$programFilesDirs = @(\"C:\\Program Files\", \"C:\\Program Files (x86)\");
|
||||||
|
$lmsFiles = @();
|
||||||
|
foreach ($dir in $programFilesDirs) {
|
||||||
|
$lmsFiles += Get-ChildItem -Path $dir -Recurse -Filter \"LMS.exe\" -ErrorAction SilentlyContinue;
|
||||||
|
}
|
||||||
|
foreach ($file in $lmsFiles) {
|
||||||
|
Write-Host \"Taking ownership of file: $($file.FullName)\";
|
||||||
|
& icacls $($file.FullName) /grant Administrators:F /T /C /Q;
|
||||||
|
& takeown /F $($file.FullName) /A /R /D Y;
|
||||||
|
Write-Host \"Deleting file: $($file.FullName)\";
|
||||||
|
Remove-Item $($file.FullName) -Force -ErrorAction SilentlyContinue;
|
||||||
|
}
|
||||||
|
if ($lmsFiles.Count -eq 0) {
|
||||||
|
Write-Host \"No LMS.exe files found in Program Files directories.\";
|
||||||
|
} else {
|
||||||
|
Write-Host \"All found LMS.exe files have been deleted.\";
|
||||||
|
}
|
||||||
|
Write-Host 'Intel LMS vPro service has been disabled, removed, and blocked.';
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
Write-Host \"Install Microsoft Edge\"
|
||||||
|
taskkill.exe /F /IM \"OneDrive.exe\"
|
||||||
|
|
||||||
|
"
|
||||||
|
]
|
||||||
|
},
|
||||||
"WPFTweaksRemoveOnedrive": {
|
"WPFTweaksRemoveOnedrive": {
|
||||||
"Content": "Remove OneDrive",
|
"Content": "Remove OneDrive",
|
||||||
"Description": "Copies 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",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a027_",
|
"Order": "a030_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
|
|
||||||
@ -2299,13 +2477,14 @@
|
|||||||
taskkill.exe /F /IM \"explorer.exe\"
|
taskkill.exe /F /IM \"explorer.exe\"
|
||||||
|
|
||||||
Write-Host \"Copy all OneDrive to Root UserProfile\"
|
Write-Host \"Copy all OneDrive to Root UserProfile\"
|
||||||
Start-Process -FilePath robocopy -ArgumentList \"$env:USERPROFILE\\OneDrive $env:USERPROFILE /e /xj\" -NoNewWindow -Wait
|
Start-Process -FilePath powershell -ArgumentList \"robocopy '$($env:USERPROFILE.TrimEnd())\\OneDrive' '$($env:USERPROFILE.TrimEnd())\\' /e /xj\" -NoNewWindow -Wait
|
||||||
|
|
||||||
Write-Host \"Remove OneDrive\"
|
Write-Host \"Remove OneDrive\"
|
||||||
Start-Process -FilePath winget -ArgumentList \"uninstall -e --purge --force --silent Microsoft.OneDrive \" -NoNewWindow -Wait
|
Start-Process -FilePath winget -ArgumentList \"uninstall -e --purge --force --silent Microsoft.OneDrive \" -NoNewWindow -Wait
|
||||||
|
|
||||||
Write-Host \"Removing OneDrive leftovers\"
|
Write-Host \"Removing OneDrive leftovers\"
|
||||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\Microsoft\\OneDrive\"
|
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:programdata\\Microsoft OneDrive\"
|
||||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\"
|
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\"
|
||||||
# check if directory is empty before removing:
|
# check if directory is empty before removing:
|
||||||
@ -2372,7 +2551,7 @@
|
|||||||
"Description": "Disables all Notifications INCLUDING Calendar",
|
"Description": "Disables all Notifications INCLUDING Calendar",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a024_",
|
"Order": "a026_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\Explorer",
|
"Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\Explorer",
|
||||||
@ -2390,19 +2569,288 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"WPFTweaksDebloatAdobe": {
|
||||||
|
"Content": "Adobe Debloat",
|
||||||
|
"Description": "Manages Adobe Services, Adobe Desktop Service, and Acrobat Updates",
|
||||||
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a021_",
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
function CCStopper {
|
||||||
|
$path = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe\"
|
||||||
|
|
||||||
|
# Test if the path exists before proceeding
|
||||||
|
if (Test-Path $path) {
|
||||||
|
Takeown /f $path
|
||||||
|
$acl = Get-Acl $path
|
||||||
|
$acl.SetOwner([System.Security.Principal.NTAccount]\"Administrators\")
|
||||||
|
$acl | Set-Acl $path
|
||||||
|
|
||||||
|
Rename-Item -Path $path -NewName \"Adobe Desktop Service.exe.old\" -Force
|
||||||
|
} else {
|
||||||
|
Write-Host \"Adobe Desktop Service is not in the default location.\"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function AcrobatUpdates {
|
||||||
|
# Editing Acrobat Updates. The last folder before the key is dynamic, therefore using a script.
|
||||||
|
# Possible Values for the edited key:
|
||||||
|
# 0 = Do not download or install updates automatically
|
||||||
|
# 2 = Automatically download updates but let the user choose when to install them
|
||||||
|
# 3 = Automatically download and install updates (default value)
|
||||||
|
# 4 = Notify the user when an update is available but don't download or install it automatically
|
||||||
|
# = It notifies the user using Windows Notifications. It runs on startup without having to have a Service/Acrobat/Reader running, therefore 0 is the next best thing.
|
||||||
|
|
||||||
|
$rootPath = \"HKLM:\\SOFTWARE\\WOW6432Node\\Adobe\\Adobe ARM\\Legacy\\Acrobat\"
|
||||||
|
|
||||||
|
# Get all subkeys under the specified root path
|
||||||
|
$subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like \"{*}\" }
|
||||||
|
|
||||||
|
# Loop through each subkey
|
||||||
|
foreach ($subKey in $subKeys) {
|
||||||
|
# Get the full registry path
|
||||||
|
$fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
|
||||||
|
try {
|
||||||
|
Set-ItemProperty -Path $fullPath -Name Mode -Value 0
|
||||||
|
Write-Host \"Acrobat Updates have been disabled.\"
|
||||||
|
} catch {
|
||||||
|
Write-Host \"Registry Key for changing Acrobat Updates does not exist in $fullPath\"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CCStopper
|
||||||
|
AcrobatUpdates
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
function RestoreCCService {
|
||||||
|
$originalPath = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe.old\"
|
||||||
|
$newPath = \"C:\\Program Files (x86)\\Common Files\\Adobe\\Adobe Desktop Common\\ADS\\Adobe Desktop Service.exe\"
|
||||||
|
|
||||||
|
if (Test-Path -Path $originalPath) {
|
||||||
|
Rename-Item -Path $originalPath -NewName \"Adobe Desktop Service.exe\" -Force
|
||||||
|
Write-Host \"Adobe Desktop Service has been restored.\"
|
||||||
|
} else {
|
||||||
|
Write-Host \"Backup file does not exist. No changes were made.\"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function AcrobatUpdates {
|
||||||
|
# Default Value:
|
||||||
|
# 3 = Automatically download and install updates
|
||||||
|
|
||||||
|
$rootPath = \"HKLM:\\SOFTWARE\\WOW6432Node\\Adobe\\Adobe ARM\\Legacy\\Acrobat\"
|
||||||
|
|
||||||
|
# Get all subkeys under the specified root path
|
||||||
|
$subKeys = Get-ChildItem -Path $rootPath | Where-Object { $_.PSChildName -like \"{*}\" }
|
||||||
|
|
||||||
|
# Loop through each subkey
|
||||||
|
foreach ($subKey in $subKeys) {
|
||||||
|
# Get the full registry path
|
||||||
|
$fullPath = Join-Path -Path $rootPath -ChildPath $subKey.PSChildName
|
||||||
|
try {
|
||||||
|
Set-ItemProperty -Path $fullPath -Name Mode -Value 3
|
||||||
|
} catch {
|
||||||
|
Write-Host \"Registry Key for changing Acrobat Updates does not exist in $fullPath\"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RestoreCCService
|
||||||
|
AcrobatUpdates
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"service": [
|
||||||
|
{
|
||||||
|
"Name": "AGSService",
|
||||||
|
"StartupType": "Disabled",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AGMService",
|
||||||
|
"StartupType": "Disabled",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AdobeUpdateService",
|
||||||
|
"StartupType": "Manual",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Adobe Acrobat Update",
|
||||||
|
"StartupType": "Manual",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Adobe Genuine Monitor Service",
|
||||||
|
"StartupType": "Disabled",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AdobeARMservice",
|
||||||
|
"StartupType": "Manual",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Adobe Licensing Console",
|
||||||
|
"StartupType": "Manual",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CCXProcess",
|
||||||
|
"StartupType": "Manual",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AdobeIPCBroker",
|
||||||
|
"StartupType": "Manual",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CoreSync",
|
||||||
|
"StartupType": "Manual",
|
||||||
|
"OriginalType": "Automatic"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"WPFTweaksBlockAdobeNet": {
|
||||||
|
"Content": "Adobe Network Block",
|
||||||
|
"Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. ",
|
||||||
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a021_",
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
# Define the URL of the remote HOSTS file and the local paths
|
||||||
|
$remoteHostsUrl = \"https://raw.githubusercontent.com/Ruddernation-Designs/Adobe-URL-Block-List/master/hosts\"
|
||||||
|
$localHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\hosts\"
|
||||||
|
$tempHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\temp_hosts\"
|
||||||
|
|
||||||
|
# Download the remote HOSTS file to a temporary location
|
||||||
|
try {
|
||||||
|
Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath
|
||||||
|
Write-Output \"Downloaded the remote HOSTS file to a temporary location.\"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error \"Failed to download the HOSTS file. Error: $_\"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the AdobeNetBlock has already been started
|
||||||
|
try {
|
||||||
|
$localHostsContent = Get-Content $localHostsPath -ErrorAction Stop
|
||||||
|
|
||||||
|
# Check if AdobeNetBlock markers exist
|
||||||
|
$blockStartExists = $localHostsContent -like \"*#AdobeNetBlock-start*\"
|
||||||
|
if ($blockStartExists) {
|
||||||
|
Write-Output \"AdobeNetBlock-start already exists. Skipping addition of new block.\"
|
||||||
|
} else {
|
||||||
|
# Load the new block from the downloaded file
|
||||||
|
$newBlockContent = Get-Content $tempHostsPath -ErrorAction Stop
|
||||||
|
$newBlockContent = $newBlockContent | Where-Object { $_ -notmatch \"^\\s*#\" -and $_ -ne \"\" } # Exclude empty lines and comments
|
||||||
|
$newBlockHeader = \"#AdobeNetBlock-start\"
|
||||||
|
$newBlockFooter = \"#AdobeNetBlock-end\"
|
||||||
|
|
||||||
|
# Combine the contents, ensuring new block is properly formatted
|
||||||
|
$combinedContent = $localHostsContent + $newBlockHeader, $newBlockContent, $newBlockFooter | Out-String
|
||||||
|
|
||||||
|
# Write the combined content back to the original HOSTS file
|
||||||
|
$combinedContent | Set-Content $localHostsPath -Encoding ASCII
|
||||||
|
Write-Output \"Successfully added the AdobeNetBlock.\"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error \"Error during processing: $_\"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clean up temporary file
|
||||||
|
Remove-Item $tempHostsPath -ErrorAction Ignore
|
||||||
|
|
||||||
|
# Flush the DNS resolver cache
|
||||||
|
try {
|
||||||
|
Invoke-Expression \"ipconfig /flushdns\"
|
||||||
|
Write-Output \"DNS cache flushed successfully.\"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error \"Failed to flush DNS cache. Error: $_\"
|
||||||
|
}
|
||||||
|
"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"
|
||||||
|
# Define the local path of the HOSTS file
|
||||||
|
$localHostsPath = \"C:\\Windows\\System32\\drivers\\etc\\hosts\"
|
||||||
|
|
||||||
|
# Load the content of the HOSTS file
|
||||||
|
try {
|
||||||
|
$hostsContent = Get-Content $localHostsPath -ErrorAction Stop
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error \"Failed to load the HOSTS file. Error: $_\"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# Initialize flags and buffer for new content
|
||||||
|
$recording = $true
|
||||||
|
$newContent = @()
|
||||||
|
|
||||||
|
# Iterate over each line of the HOSTS file
|
||||||
|
foreach ($line in $hostsContent) {
|
||||||
|
if ($line -match \"#AdobeNetBlock-start\") {
|
||||||
|
$recording = $false
|
||||||
|
}
|
||||||
|
if ($recording) {
|
||||||
|
$newContent += $line
|
||||||
|
}
|
||||||
|
if ($line -match \"#AdobeNetBlock-end\") {
|
||||||
|
$recording = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Write the filtered content back to the HOSTS file
|
||||||
|
try {
|
||||||
|
$newContent | Set-Content $localHostsPath -Encoding ASCII
|
||||||
|
Write-Output \"Successfully removed the AdobeNetBlock section from the HOSTS file.\"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error \"Failed to write back to the HOSTS file. Error: $_\"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Flush the DNS resolver cache
|
||||||
|
try {
|
||||||
|
Invoke-Expression \"ipconfig /flushdns\"
|
||||||
|
Write-Output \"DNS cache flushed successfully.\"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error \"Failed to flush DNS cache. Error: $_\"
|
||||||
|
}
|
||||||
|
"
|
||||||
|
]
|
||||||
|
},
|
||||||
"WPFTweaksRightClickMenu": {
|
"WPFTweaksRightClickMenu": {
|
||||||
"Content": "Set Classic Right-Click Menu ",
|
"Content": "Set Classic Right-Click Menu ",
|
||||||
"Description": "Great Windows 11 tweak to bring back good context menus when right clicking things in explorer.",
|
"Description": "Great Windows 11 tweak to bring back good context menus when right clicking things in explorer.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a028_",
|
"Order": "a027_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"New-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Name \"InprocServer32\" -force -value \"\" "
|
"
|
||||||
|
New-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Name \"InprocServer32\" -force -value \"\"
|
||||||
|
Write-Host Restarting explorer.exe ...
|
||||||
|
$process = Get-Process -Name \"explorer\"
|
||||||
|
Stop-Process -InputObject $process
|
||||||
|
"
|
||||||
],
|
],
|
||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
"
|
"
|
||||||
Remove-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Recurse -Confirm:$false -Force
|
Remove-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Recurse -Confirm:$false -Force
|
||||||
Write-Host Restart Needed for change
|
# Restarting Explorer in the Undo Script might not be necessary, as the Registry change without restarting Explorer does work, but just to make sure.
|
||||||
|
Write-Host Restarting explorer.exe ...
|
||||||
|
$process = Get-Process -Name \"explorer\"
|
||||||
|
Stop-Process -InputObject $process
|
||||||
"
|
"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -2411,7 +2859,7 @@
|
|||||||
"Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.",
|
"Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a007_",
|
"Order": "a009_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
cleanmgr.exe /d C: /VERYLOWDISK
|
cleanmgr.exe /d C: /VERYLOWDISK
|
||||||
@ -2419,28 +2867,12 @@
|
|||||||
"
|
"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableUAC": {
|
|
||||||
"Content": "Disable UAC",
|
|
||||||
"Description": "Disables User Account Control. Only recommended for Expert Users.",
|
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
|
||||||
"panel": "1",
|
|
||||||
"Order": "a023_",
|
|
||||||
"registry": [
|
|
||||||
{
|
|
||||||
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",
|
|
||||||
"OriginalValue": "5",
|
|
||||||
"Name": "ConsentPromptBehaviorAdmin",
|
|
||||||
"Value": "0",
|
|
||||||
"Type": "DWord"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"WPFTweaksDeleteTempFiles": {
|
"WPFTweaksDeleteTempFiles": {
|
||||||
"Content": "Delete Temporary Files",
|
"Content": "Delete Temporary Files",
|
||||||
"Description": "Erases TEMP Folders",
|
"Description": "Erases TEMP Folders",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a006_",
|
"Order": "a002_",
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
|
"Get-ChildItem -Path \"C:\\Windows\\Temp\" *.* -Recurse | Remove-Item -Force -Recurse
|
||||||
Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
|
Get-ChildItem -Path $env:TEMP *.* -Recurse | Remove-Item -Force -Recurse"
|
||||||
@ -2451,7 +2883,7 @@
|
|||||||
"Description": "GameDVR is a Windows App that is a dependency for some Store Games. I've never met someone that likes it, but it's there for the XBOX crowd.",
|
"Description": "GameDVR is a Windows App that is a dependency for some Store Games. I've never met someone that likes it, but it's there for the XBOX crowd.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a012_",
|
"Order": "a005_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKCU:\\System\\GameConfigStore",
|
"Path": "HKCU:\\System\\GameConfigStore",
|
||||||
@ -2467,13 +2899,6 @@
|
|||||||
"OriginalValue": "1",
|
"OriginalValue": "1",
|
||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Path": "HKCU:\\System\\GameConfigStore",
|
|
||||||
"Name": "GameDVR_DXGIHonorFSEWindowsCompatible",
|
|
||||||
"Value": "1",
|
|
||||||
"OriginalValue": "0",
|
|
||||||
"Type": "DWord"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Path": "HKCU:\\System\\GameConfigStore",
|
"Path": "HKCU:\\System\\GameConfigStore",
|
||||||
"Name": "GameDVR_HonorUserFSEBehaviorMode",
|
"Name": "GameDVR_HonorUserFSEBehaviorMode",
|
||||||
@ -2502,8 +2927,7 @@
|
|||||||
"Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency.",
|
"Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a029_",
|
"Order": "a005_",
|
||||||
"Order": "a013_",
|
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||||
@ -2525,7 +2949,16 @@
|
|||||||
"Description": "Disables IPv6.",
|
"Description": "Disables IPv6.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a031_",
|
"Order": "a023_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||||
|
"Name": "DisabledComponents",
|
||||||
|
"Value": "255",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"Type": "DWord"
|
||||||
|
}
|
||||||
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
"Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
||||||
],
|
],
|
||||||
@ -2533,12 +2966,37 @@
|
|||||||
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"WPFTweaksDisableFSO": {
|
||||||
|
"Content": "Disable Fullscreen Optimizations",
|
||||||
|
"Description": "Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen",
|
||||||
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a024_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\System\\GameConfigStore",
|
||||||
|
"Name": "GameDVR_DXGIHonorFSEWindowsCompatible",
|
||||||
|
"Value": "1",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"Type": "DWord"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"WPFTweaksEnableipsix": {
|
"WPFTweaksEnableipsix": {
|
||||||
"Content": "Enable IPv6",
|
"Content": "Enable IPv6",
|
||||||
"Description": "Enables IPv6.",
|
"Description": "Enables IPv6.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a030_",
|
"Order": "a023_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||||
|
"Name": "DisabledComponents",
|
||||||
|
"Value": "0",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"Type": "DWord"
|
||||||
|
}
|
||||||
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
||||||
],
|
],
|
||||||
@ -2586,12 +3044,28 @@
|
|||||||
"Order": "a064_",
|
"Order": "a064_",
|
||||||
"Type": "Toggle"
|
"Type": "Toggle"
|
||||||
},
|
},
|
||||||
|
"WPFToggleSnapWindow": {
|
||||||
|
"Content": "Snap Window",
|
||||||
|
"Description": "If enabled you can align windows by dragging them. | Relogin Required",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Order": "a065_",
|
||||||
|
"Type": "Toggle"
|
||||||
|
},
|
||||||
"WPFToggleSnapFlyout": {
|
"WPFToggleSnapFlyout": {
|
||||||
"Content": "Snap Assist Flyout",
|
"Content": "Snap Assist Flyout",
|
||||||
"Description": "If enabled then Snap preview is disabled when maximize button is hovered.",
|
"Description": "If enabled then Snap preview is disabled when maximize button is hovered.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a065_",
|
"Order": "a066_",
|
||||||
|
"Type": "Toggle"
|
||||||
|
},
|
||||||
|
"WPFToggleSnapSuggestion": {
|
||||||
|
"Content": "Snap Assist Suggestion",
|
||||||
|
"Description": "If enabled then you will get suggestions to snap other applications in the left over spaces.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Order": "a067_",
|
||||||
"Type": "Toggle"
|
"Type": "Toggle"
|
||||||
},
|
},
|
||||||
"WPFToggleMouseAcceleration": {
|
"WPFToggleMouseAcceleration": {
|
||||||
@ -2599,7 +3073,7 @@
|
|||||||
"Description": "If Enabled then Cursor movement is affected by the speed of your physical mouse movements.",
|
"Description": "If Enabled then Cursor movement is affected by the speed of your physical mouse movements.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a066_",
|
"Order": "a068_",
|
||||||
"Type": "Toggle"
|
"Type": "Toggle"
|
||||||
},
|
},
|
||||||
"WPFToggleStickyKeys": {
|
"WPFToggleStickyKeys": {
|
||||||
@ -2607,7 +3081,22 @@
|
|||||||
"Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
|
"Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
"Order": "a067_",
|
"Order": "a069_",
|
||||||
|
"Type": "Toggle"
|
||||||
|
},
|
||||||
|
"WPFOOSUbutton": {
|
||||||
|
"Content": "Customize OO Shutup Tweaks",
|
||||||
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a039_",
|
||||||
|
"Type": "220"
|
||||||
|
},
|
||||||
|
"WPFToggleTaskbarWidgets": {
|
||||||
|
"Content": "Taskbar Widgets",
|
||||||
|
"Description": "If Enabled then Widgets Icon in Taskbar will be shown.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Order": "a068_",
|
||||||
"Type": "Toggle"
|
"Type": "Toggle"
|
||||||
},
|
},
|
||||||
"WPFchangedns": {
|
"WPFchangedns": {
|
||||||
|
477
edgeremoval.ps1
477
edgeremoval.ps1
@ -15,11 +15,6 @@ if ($also_remove_webview -eq 1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Administrative Privileges Check
|
# Administrative Privileges Check
|
||||||
|
|
||||||
# Get the 'SetPrivilege' method from System.Diagnostics.Process type
|
|
||||||
$setPrivilegeMethod = [System.Diagnostics.Process].GetMethod('SetPrivilege', [System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Static)
|
|
||||||
|
|
||||||
# List of privileges to set
|
|
||||||
$privileges = @(
|
$privileges = @(
|
||||||
'SeSecurityPrivilege',
|
'SeSecurityPrivilege',
|
||||||
'SeTakeOwnershipPrivilege',
|
'SeTakeOwnershipPrivilege',
|
||||||
@ -27,44 +22,34 @@ $privileges = @(
|
|||||||
'SeRestorePrivilege'
|
'SeRestorePrivilege'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Invoke the method for each privilege
|
|
||||||
foreach ($privilege in $privileges) {
|
foreach ($privilege in $privileges) {
|
||||||
$setPrivilegeMethod.Invoke($null, @($privilege, 2))
|
[System.Diagnostics.Process]::SetPrivilege($privilege, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Edge Removal Procedures
|
# Edge Removal Procedures
|
||||||
|
|
||||||
# Define processes to shut down
|
|
||||||
$processesToShutdown = @(
|
$processesToShutdown = @(
|
||||||
'explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge',
|
'explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge',
|
||||||
'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp'
|
'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Kill explorer process
|
|
||||||
Stop-Process -Name "explorer" -Force -ErrorAction SilentlyContinue
|
Stop-Process -Name "explorer" -Force -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
# Kill the processes from the list
|
|
||||||
$processesToShutdown | ForEach-Object {
|
$processesToShutdown | ForEach-Object {
|
||||||
Stop-Process -Name $_ -Force -ErrorAction SilentlyContinue
|
Stop-Process -Name $_ -Force -ErrorAction SilentlyContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set path for Edge executable
|
|
||||||
$MS = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application\msedge.exe'
|
$MS = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application\msedge.exe'
|
||||||
|
|
||||||
# Clean up certain registry entries
|
|
||||||
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -Recurse -ErrorAction SilentlyContinue
|
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -Recurse -ErrorAction SilentlyContinue
|
||||||
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue
|
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue
|
||||||
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -Recurse -ErrorAction SilentlyContinue
|
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -Recurse -ErrorAction SilentlyContinue
|
||||||
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -Recurse -ErrorAction SilentlyContinue
|
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -Recurse -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
# Create new registry entries
|
|
||||||
New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force -ErrorAction SilentlyContinue
|
New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force -ErrorAction SilentlyContinue
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force -ErrorAction SilentlyContinue
|
New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force -ErrorAction SilentlyContinue
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
# Remove certain registry properties
|
|
||||||
$registryPaths = @('HKLM:\SOFTWARE\Policies', 'HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\WOW6432Node')
|
$registryPaths = @('HKLM:\SOFTWARE\Policies', 'HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\WOW6432Node')
|
||||||
$edgeProperties = @('InstallDefault', 'Install{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}', 'Install{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}')
|
$edgeProperties = @('InstallDefault', 'Install{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}', 'Install{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}')
|
||||||
foreach ($path in $registryPaths) {
|
foreach ($path in $registryPaths) {
|
||||||
@ -84,7 +69,6 @@ foreach ($base in $registryBases) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clear specific registry keys
|
|
||||||
$registryPaths = @('HKCU:', 'HKLM:')
|
$registryPaths = @('HKCU:', 'HKLM:')
|
||||||
$nodes = @('', '\Wow6432Node')
|
$nodes = @('', '\Wow6432Node')
|
||||||
foreach ($regPath in $registryPaths) {
|
foreach ($regPath in $registryPaths) {
|
||||||
@ -97,7 +81,6 @@ foreach ($regPath in $registryPaths) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Locate setup.exe and ie_to_edge_stub.exe
|
|
||||||
$foldersToSearch = @('LocalApplicationData', 'ProgramFilesX86', 'ProgramFiles') | ForEach-Object {
|
$foldersToSearch = @('LocalApplicationData', 'ProgramFilesX86', 'ProgramFiles') | ForEach-Object {
|
||||||
[Environment]::GetFolderPath($_)
|
[Environment]::GetFolderPath($_)
|
||||||
}
|
}
|
||||||
@ -112,7 +95,6 @@ foreach ($folder in $foldersToSearch) {
|
|||||||
Where-Object { $_.FullName -notlike '*EdgeWebView*' }
|
Where-Object { $_.FullName -notlike '*EdgeWebView*' }
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create directory and copy ie_to_edge_stub.exe to it
|
|
||||||
$destinationDir = "$env:SystemDrive\Scripts"
|
$destinationDir = "$env:SystemDrive\Scripts"
|
||||||
New-Item -Path $destinationDir -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
|
New-Item -Path $destinationDir -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
|
||||||
@ -125,342 +107,147 @@ foreach ($bhoFile in $bhoFiles) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
## Work on Appx Removals
|
## Work on Appx Removals
|
||||||
|
|
||||||
# Retrieve AppX provisioned packages and all AppX packages
|
|
||||||
$provisioned = Get-AppxProvisionedPackage -Online
|
$provisioned = Get-AppxProvisionedPackage -Online
|
||||||
$appxpackage = Get-AppxPackage -AllUsers
|
$appxpackage = Get-AppxPackage -AllUsers
|
||||||
|
|
||||||
# Initialize empty array for EndOfLife packages
|
|
||||||
$eol = @()
|
$eol = @()
|
||||||
|
|
||||||
# Define user SIDs and retrieve them from the registry
|
$store = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Store'
|
||||||
$store = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore'
|
$storeP = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Store\InstalledApplications'
|
||||||
$users = @('S-1-5-18')
|
foreach ($app in $appxpackage) {
|
||||||
if (Test-Path $store) {
|
$name = $app.Name
|
||||||
$users += (Get-ChildItem $store -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -like '*S-1-5-21*' }).PSChildName
|
if ($app.Name -eq "Microsoft.Edge") {
|
||||||
}
|
$eol += $name
|
||||||
|
} elseif ($app.Name -eq "Microsoft.EdgeBeta" -or $app.Name -eq "Microsoft.EdgeDev" -or $app.Name -eq "Microsoft.EdgeCanary" -or $app.Name -eq "Microsoft.MicrosoftEdge") {
|
||||||
# Process AppX packages for removal
|
$eol += $name
|
||||||
foreach ($choice in $remove_appx) {
|
|
||||||
if ([string]::IsNullOrWhiteSpace($choice)) { continue }
|
|
||||||
|
|
||||||
# Process provisioned packages
|
|
||||||
$provisioned | Where-Object { $_.PackageName -like "*$choice*" } | ForEach-Object {
|
|
||||||
if ($skip -Contains $_.PackageName) { return }
|
|
||||||
|
|
||||||
$PackageName = $_.PackageName
|
|
||||||
$PackageFamilyName = ($appxpackage | Where-Object { $_.Name -eq $_.DisplayName }).PackageFamilyName
|
|
||||||
|
|
||||||
# Add registry entries
|
|
||||||
New-Item -Path "$store\Deprovisioned\$PackageFamilyName" -Force -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
$users | ForEach-Object {
|
|
||||||
New-Item -Path "$store\EndOfLife\$_\$PackageName" -Force -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
}
|
|
||||||
$eol += $PackageName
|
|
||||||
|
|
||||||
# Modify non-removable app policy and remove package
|
|
||||||
dism /online /set-nonremovableapppolicy /packagefamily:$PackageFamilyName /nonremovable:0 | Out-Null
|
|
||||||
Remove-AppxProvisionedPackage -PackageName $PackageName -Online -AllUsers | Out-Null
|
|
||||||
}
|
|
||||||
|
|
||||||
# Process all AppX packages
|
|
||||||
$appxpackage | Where-Object { $_.PackageFullName -like "*$choice*" } | ForEach-Object {
|
|
||||||
if ($skip -Contains $_.PackageFullName) { return }
|
|
||||||
|
|
||||||
$PackageFullName = $_.PackageFullName
|
|
||||||
|
|
||||||
# Add registry entries
|
|
||||||
New-Item -Path "$store\Deprovisioned\$_.PackageFamilyName" -Force -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
$users | ForEach-Object {
|
|
||||||
New-Item -Path "$store\EndOfLife\$_\$PackageFullName" -Force -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
}
|
|
||||||
$eol += $PackageFullName
|
|
||||||
|
|
||||||
# Modify non-removable app policy and remove package
|
|
||||||
dism /online /set-nonremovableapppolicy /packagefamily:$PackageFamilyName /nonremovable:0 | Out-Null
|
|
||||||
Remove-AppxPackage -Package $PackageFullName -AllUsers | Out-Null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
## Run Edge setup uninstaller
|
$eolApps = $provisioned | Where-Object { $eol -contains $_.DisplayName }
|
||||||
|
|
||||||
foreach ($setup in $edges) {
|
|
||||||
if (Test-Path $setup) {
|
|
||||||
$target = if ($setup -like '*EdgeWebView*') { "--msedgewebview" } else { "--msedge" }
|
|
||||||
|
|
||||||
$removalArgs = "--uninstall $target --system-level --verbose-logging --force-uninstall"
|
|
||||||
|
|
||||||
Write-Host "$setup $removalArgs"
|
|
||||||
|
|
||||||
|
foreach ($edge in $eolApps) {
|
||||||
|
$edgeName = $edge.DisplayName
|
||||||
|
if (-not ($skip -contains $edgeName)) {
|
||||||
try {
|
try {
|
||||||
Start-Process -FilePath $setup -ArgumentList $removalArgs -Wait
|
Remove-AppxProvisionedPackage -Online -PackageName $edgeName -ErrorAction SilentlyContinue
|
||||||
|
} catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($edge in $appxpackage) {
|
||||||
|
$edgeName = $edge.Name
|
||||||
|
if ($eol -contains $edgeName) {
|
||||||
|
if (-not ($skip -contains $edgeName)) {
|
||||||
|
try {
|
||||||
|
Remove-AppxPackage -Package $edgeName -AllUsers -ErrorAction SilentlyContinue
|
||||||
|
} catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
## Redirect shortcuts
|
||||||
|
$shortcut_path = "$env:Public\Desktop"
|
||||||
|
$shortcut_file = 'Microsoft Edge.lnk'
|
||||||
|
$full_path = Join-Path -Path $shortcut_path -ChildPath $shortcut_file
|
||||||
|
|
||||||
|
if (Test-Path $full_path) {
|
||||||
|
Remove-Item -Path $full_path -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
|
||||||
|
$shortcut_path = "$env:ProgramData\Microsoft\Windows\Start Menu\Programs"
|
||||||
|
$shortcut_file = 'Microsoft Edge.lnk'
|
||||||
|
$full_path = Join-Path -Path $shortcut_path -ChildPath $shortcut_file
|
||||||
|
|
||||||
|
if (Test-Path $full_path) {
|
||||||
|
Remove-Item -Path $full_path -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
|
||||||
|
$edgePolicy = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
|
||||||
|
if (-not (Test-Path $edgePolicy)) {
|
||||||
|
New-Item -Path $edgePolicy -Force | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
$edgePrefs = @{
|
||||||
|
'Dword' = @{
|
||||||
|
'BrowserReplacementEnabled' = 1
|
||||||
|
'HideFirstRunExperience' = 1
|
||||||
|
'HideImportEdgeFavoritesPrompt' = 1
|
||||||
|
'HideSyncSetupExperience' = 1
|
||||||
|
'FavoritesBarVisibility' = 1
|
||||||
|
}
|
||||||
|
'String' = @{
|
||||||
|
'AutoplayAllowed' = 'AllowOnce'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($entryType in $edgePrefs.Keys) {
|
||||||
|
foreach ($prefName in $edgePrefs[$entryType].Keys) {
|
||||||
|
Set-ItemProperty -Path $edgePolicy -Name $prefName -Value $edgePrefs[$entryType][$prefName] -Type $entryType -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Output Results
|
||||||
|
Write-Host "Edge Removal Complete" -ForegroundColor Green
|
||||||
|
|
||||||
|
# Define constants and initial configuration
|
||||||
|
$ScriptVersion = "2023.05.10"
|
||||||
|
$EdgeProcessesToShutdown = @('explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge', 'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp')
|
||||||
|
$EdgeRemovalOptions = @{
|
||||||
|
RemoveWin32 = @("Microsoft Edge", "Microsoft Edge Update")
|
||||||
|
RemoveAppx = @("MicrosoftEdge")
|
||||||
|
Skip = @() # Optional: @("DevTools")
|
||||||
|
AlsoRemoveWebView = $false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define main function to remove Microsoft Edge components
|
||||||
|
function Remove-MicrosoftEdge {
|
||||||
|
[CmdletBinding()]
|
||||||
|
param()
|
||||||
|
|
||||||
|
# Function to shutdown processes related to Microsoft Edge
|
||||||
|
function Stop-EdgeProcesses {
|
||||||
|
$EdgeProcessesToShutdown | ForEach-Object {
|
||||||
|
Stop-Process -Name $_ -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove registry entries related to Microsoft Edge
|
||||||
|
function Remove-EdgeRegistryEntries {
|
||||||
|
# Clean up certain registry entries
|
||||||
|
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -Recurse -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -Recurse -ErrorAction SilentlyContinue
|
||||||
|
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -Recurse -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Create new registry entries
|
||||||
|
$EdgeExecutablePath = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application\msedge.exe'
|
||||||
|
New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force -ErrorAction SilentlyContinue
|
||||||
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$EdgeExecutablePath`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force -ErrorAction SilentlyContinue
|
||||||
|
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$EdgeExecutablePath`" --single-argument %%1" -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove Microsoft Edge AppX packages
|
||||||
|
function Remove-EdgeAppxPackages {
|
||||||
|
$EdgeRemovalOptions.RemoveAppx | ForEach-Object {
|
||||||
|
# Remove provisioned packages
|
||||||
|
Get-AppxProvisionedPackage -Online | Where-Object { $_.PackageName -like "*$_*" -and $EdgeRemovalOptions.Skip -notcontains $_.PackageName } | Remove-AppxProvisionedPackage -Online -AllUsers -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Remove installed packages
|
||||||
|
Get-AppxPackage -AllUsers | Where-Object { $_.PackageFullName -like "*$_*" -and $EdgeRemovalOptions.Skip -notcontains $_.PackageFullName } | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove Microsoft Edge processes, registry entries, and AppX packages
|
||||||
|
try {
|
||||||
|
Stop-EdgeProcesses
|
||||||
|
Remove-EdgeRegistryEntries
|
||||||
|
Remove-EdgeAppxPackages
|
||||||
|
Write-Output "Microsoft Edge components have been successfully removed."
|
||||||
} catch {
|
} catch {
|
||||||
# You may want to add logging or other error handling here.
|
Write-Error "Failed to remove Microsoft Edge components: $_"
|
||||||
}
|
|
||||||
|
|
||||||
while ((Get-Process -Name 'setup', 'MicrosoftEdge*' -ErrorAction SilentlyContinue).Path -like '*\Microsoft\Edge*') {
|
|
||||||
Start-Sleep -Seconds 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
## Cleanup
|
|
||||||
|
|
||||||
# Define necessary paths and variables
|
|
||||||
$edgePaths = $env:ProgramFiles, ${env:ProgramFiles(x86)}
|
|
||||||
$appDataPath = [Environment]::GetFolderPath('ApplicationData')
|
|
||||||
|
|
||||||
# Uninstall Microsoft Edge Update
|
|
||||||
foreach ($path in $edgePaths) {
|
|
||||||
$edgeUpdateExe = "$path\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe"
|
|
||||||
if (Test-Path $edgeUpdateExe) {
|
|
||||||
Write-Host $edgeUpdateExe /uninstall
|
|
||||||
Start-Process -FilePath $edgeUpdateExe -ArgumentList '/uninstall' -Wait
|
|
||||||
while ((Get-Process -Name 'setup','MicrosoftEdge*' -ErrorAction SilentlyContinue).Path -like '*\Microsoft\Edge*') {
|
|
||||||
Start-Sleep -Seconds 3
|
|
||||||
}
|
|
||||||
if ($also_remove_webview -eq 1) {
|
|
||||||
foreach ($regPath in 'HKCU:', 'HKLM:') {
|
|
||||||
foreach ($node in '', '\Wow6432Node') {
|
|
||||||
Remove-Item -Path "$regPath\SOFTWARE$node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Recurse -Force -ErrorAction SilentlyContinue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Remove-Item -Path "$path\Microsoft\EdgeUpdate" -Recurse -Force -ErrorAction SilentlyContinue
|
|
||||||
Unregister-ScheduledTask -TaskName 'MicrosoftEdgeUpdate*' -Confirm:$false -ErrorAction SilentlyContinue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Remove Edge shortcuts
|
|
||||||
Remove-Item -Path "$appDataPath\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Tombstones\Microsoft Edge.lnk" -Force -ErrorAction SilentlyContinue
|
|
||||||
Remove-Item -Path "$appDataPath\Microsoft\Internet Explorer\Quick Launch\Microsoft Edge.lnk" -Force -ErrorAction SilentlyContinue
|
|
||||||
|
|
||||||
# Revert settings related to Microsoft Edge
|
|
||||||
foreach ($sid in $users) {
|
|
||||||
foreach ($packageName in $eol) {
|
|
||||||
Remove-Item -Path "$store\EndOfLife\$sid\$packageName" -Force -ErrorAction SilentlyContinue
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set policies to prevent unsolicited reinstalls of Microsoft Edge
|
# Execute the main function
|
||||||
$registryPaths = @('HKLM:\SOFTWARE\Policies', 'HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\WOW6432Node')
|
Remove-MicrosoftEdge
|
||||||
$edgeUpdatePolicies = @{
|
|
||||||
'InstallDefault' = 0;
|
|
||||||
'Install{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}' = 0;
|
|
||||||
'Install{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}' = 1;
|
|
||||||
'DoNotUpdateToEdgeWithChromium' = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($path in $registryPaths) {
|
|
||||||
New-Item -Path "$path\Microsoft\EdgeUpdate" -Force -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
foreach ($policy in $edgeUpdatePolicies.GetEnumerator()) {
|
|
||||||
Set-ItemProperty -Path "$path\Microsoft\EdgeUpdate" -Name $policy.Key -Value $policy.Value -Type Dword -Force
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$edgeUpdateActions = @('on-os-upgrade', 'on-logon', 'on-logon-autolaunch', 'on-logon-startup-boost')
|
|
||||||
$edgeUpdateClients = @(
|
|
||||||
'Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}',
|
|
||||||
'Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
|
|
||||||
)
|
|
||||||
foreach ($client in $edgeUpdateClients) {
|
|
||||||
foreach ($action in $edgeUpdateActions) {
|
|
||||||
foreach ($regBase in 'HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\Wow6432Node') {
|
|
||||||
$regPath = "$regBase\$client\Commands\$action"
|
|
||||||
New-Item -Path $regPath -Force -ErrorAction SilentlyContinue | Out-Null
|
|
||||||
Set-ItemProperty -Path $regPath -Name 'CommandLine' -Value 'systray.exe' -Force
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
## Redirect Edge Shortcuts
|
|
||||||
|
|
||||||
# Define Microsoft Edge Paths
|
|
||||||
$MSEP = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application'
|
|
||||||
$IFEO = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options'
|
|
||||||
$MIN = ('--headless', '--width 1 --height 1')[([environment]::OSVersion.Version.Build) -gt 25179]
|
|
||||||
$CMD = "$env:systemroot\system32\conhost.exe $MIN"
|
|
||||||
$DIR = "$env:SystemDrive\Scripts"
|
|
||||||
|
|
||||||
# Setup Microsoft Edge Registry Entries
|
|
||||||
New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force | Out-Null
|
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge" -Name '(Default)' -Value 'URL:microsoft-edge' -Force
|
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge" -Name 'URL Protocol' -Value '' -Force
|
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge" -Name 'NoOpenWith' -Value '' -Force
|
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$DIR\ie_to_edge_stub.exe`" %1" -Force
|
|
||||||
|
|
||||||
# Setup MSEdgeHTM Registry Entries
|
|
||||||
New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force | Out-Null
|
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM" -Name 'NoOpenWith' -Value '' -Force
|
|
||||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$DIR\ie_to_edge_stub.exe`" %1" -Force
|
|
||||||
|
|
||||||
# Setup Image File Execution Options for Edge and Edge WebView
|
|
||||||
$exeSettings = @(
|
|
||||||
@{ ExeName = 'ie_to_edge_stub.exe'; Debugger = "$CMD $DIR\OpenWebSearch.cmd"; FilterPath = "$DIR\ie_to_edge_stub.exe" },
|
|
||||||
@{ ExeName = 'msedge.exe'; Debugger = "$CMD $DIR\OpenWebSearch.cmd"; FilterPath = "$MSEP\msedge.exe" }
|
|
||||||
)
|
|
||||||
|
|
||||||
foreach ($setting in $exeSettings) {
|
|
||||||
New-Item -Path "$IFEO\$($setting.ExeName)\0" -Force | Out-Null
|
|
||||||
Set-ItemProperty -Path "$IFEO\$($setting.ExeName)" -Name 'UseFilter' -Value 1 -Type Dword -Force
|
|
||||||
Set-ItemProperty -Path "$IFEO\$($setting.ExeName)\0" -Name 'FilterFullPath' -Value $setting.FilterPath -Force
|
|
||||||
Set-ItemProperty -Path "$IFEO\$($setting.ExeName)\0" -Name 'Debugger' -Value $setting.Debugger -Force
|
|
||||||
}
|
|
||||||
|
|
||||||
# Write OpenWebSearch Batch Script
|
|
||||||
$OpenWebSearch = @'
|
|
||||||
@echo off
|
|
||||||
@title OpenWebSearch Redux
|
|
||||||
|
|
||||||
:: Minimize prompt
|
|
||||||
for /f %%E in ('"prompt $E$S & for %%e in (1) do rem"') do echo;%%E[2t >nul 2>&1
|
|
||||||
|
|
||||||
:: Get default browser from registry
|
|
||||||
call :get_registry_value "HKCU\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice" ProgID DefaultBrowser
|
|
||||||
if not defined DefaultBrowser (
|
|
||||||
echo Error: Failed to get default browser from registry.
|
|
||||||
pause
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
if /i "%DefaultBrowser%" equ "MSEdgeHTM" (
|
|
||||||
echo Error: Default browser is set to Edge! Change it or remove OpenWebSearch script.
|
|
||||||
pause
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Get browser command line
|
|
||||||
call :get_registry_value "HKCR\%DefaultBrowser%\shell\open\command" "" BrowserCommand
|
|
||||||
if not defined BrowserCommand (
|
|
||||||
echo Error: Failed to get browser command from registry.
|
|
||||||
pause
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
set Browser=& for %%i in (%BrowserCommand%) do if not defined Browser set "Browser=%%~i"
|
|
||||||
|
|
||||||
:: Set fallback for Edge
|
|
||||||
call :get_registry_value "HKCR\MSEdgeMHT\shell\open\command" "" FallBack
|
|
||||||
set EdgeCommand=& for %%i in (%FallBack%) do if not defined EdgeCommand set "EdgeCommand=%%~i"
|
|
||||||
|
|
||||||
:: Parse command line arguments and check for redirect or noop conditions
|
|
||||||
set "URI=" & set "URL=" & set "NOOP=" & set "PassThrough=%EdgeCommand:msedge=edge%"
|
|
||||||
set "CommandLineArgs=%CMDCMDLINE:"=``% "
|
|
||||||
call :parse_arguments
|
|
||||||
|
|
||||||
if defined NOOP (
|
|
||||||
if not exist "%PassThrough%" (
|
|
||||||
echo Error: PassThrough path doesn't exist.
|
|
||||||
pause
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
start "" "%PassThrough%" %ParsedArgs%
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Decode URL
|
|
||||||
call :decode_url
|
|
||||||
if not defined URL (
|
|
||||||
echo Error: Failed to decode URL.
|
|
||||||
pause
|
|
||||||
exit /b
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Open URL in default browser
|
|
||||||
start "" "%Browser%" "%URL%"
|
|
||||||
exit
|
|
||||||
|
|
||||||
:: Functions
|
|
||||||
|
|
||||||
:get_registry_value
|
|
||||||
setlocal
|
|
||||||
set regQuery=reg query "%~1" /v %2 /z /se "," /f /e
|
|
||||||
if "%~2" equ "" set regQuery=reg query "%~1" /ve /z /se "," /f /e
|
|
||||||
for /f "skip=2 tokens=* delims=" %%V in ('%regQuery% 2^>nul') do set "result=%%V"
|
|
||||||
if defined result (set "result=%result:*) =%") else (set "%~3=")
|
|
||||||
endlocal & set "%~3=%result%"
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:decode_url
|
|
||||||
:: Brute URL percent decoding
|
|
||||||
setlocal enabledelayedexpansion
|
|
||||||
set "decoded=%URL:!=}%"
|
|
||||||
call :brute_decode
|
|
||||||
endlocal & set "URL=%decoded%"
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
:parse_arguments
|
|
||||||
:: Remove specific substrings from arguments
|
|
||||||
set "CommandLineArgs=%CommandLineArgs:*ie_to_edge_stub.exe`` =%"
|
|
||||||
set "CommandLineArgs=%CommandLineArgs:*ie_to_edge_stub.exe =%"
|
|
||||||
set "CommandLineArgs=%CommandLineArgs:*msedge.exe`` =%"
|
|
||||||
set "CommandLineArgs=%CommandLineArgs:*msedge.exe =%"
|
|
||||||
|
|
||||||
:: Remove any trailing spaces
|
|
||||||
if "%CommandLineArgs:~-1%"==" " set "CommandLineArgs=%CommandLineArgs:~0,-1%"
|
|
||||||
|
|
||||||
:: Check if arguments are a redirect or URL
|
|
||||||
set "RedirectArg=%CommandLineArgs:microsoft-edge=%"
|
|
||||||
set "UrlArg=%CommandLineArgs:http=%"
|
|
||||||
set "ParsedArgs=%CommandLineArgs:``="%"
|
|
||||||
|
|
||||||
:: Set NOOP flag if no changes to arguments
|
|
||||||
if "%CommandLineArgs%" equ "%RedirectArg%" (set NOOP=1) else if "%CommandLineArgs%" equ "%UrlArg%" (set NOOP=1)
|
|
||||||
|
|
||||||
:: Extract URL if present
|
|
||||||
if not defined NOOP (
|
|
||||||
set "URL=%CommandLineArgs:*microsoft-edge=%"
|
|
||||||
set "URL=http%URL:*http=%"
|
|
||||||
if "%URL:~-2%"=="``" set "URL=%URL:~0,-2%"
|
|
||||||
)
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
|
|
||||||
:brute_decode
|
|
||||||
:: Brute force URL percent decoding
|
|
||||||
|
|
||||||
set "decoded=%decoded:%%20= %"
|
|
||||||
set "decoded=%decoded:%%21=!!"
|
|
||||||
set "decoded=%decoded:%%22="%""
|
|
||||||
set "decoded=%decoded:%%23=#%"
|
|
||||||
set "decoded=%decoded:%%24=$%"
|
|
||||||
set "decoded=%decoded:%%25=%%%"
|
|
||||||
set "decoded=%decoded:%%26=&%"
|
|
||||||
set "decoded=%decoded:%%27='%"
|
|
||||||
set "decoded=%decoded:%%28=(%"
|
|
||||||
set "decoded=%decoded:%%29=)%"
|
|
||||||
set "decoded=%decoded:%%2A=*%"
|
|
||||||
set "decoded=%decoded:%%2B=+%"
|
|
||||||
set "decoded=%decoded:%%2C=,%"
|
|
||||||
set "decoded=%decoded:%%2D=-%"
|
|
||||||
set "decoded=%decoded:%%2E=.%"
|
|
||||||
set "decoded=%decoded:%%2F=/%"
|
|
||||||
:: ... Continue for other encodings ...
|
|
||||||
|
|
||||||
:: Correct any double percentage signs
|
|
||||||
set "decoded=%decoded:%%%%=%"
|
|
||||||
|
|
||||||
exit /b
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'@
|
|
||||||
[io.file]::WriteAllText("$DIR\OpenWebSearch.cmd", $OpenWebSearch)
|
|
||||||
|
|
||||||
|
|
||||||
# Final Steps
|
|
||||||
|
|
||||||
# Retrieve the Edge_Removal property from the specified registry paths
|
|
||||||
$userRegPaths = Get-ChildItem -Path 'Registry::HKEY_Users\S-1-5-21*\Volatile*' -ErrorAction SilentlyContinue
|
|
||||||
$edgeRemovalPath = $userRegPaths | Get-ItemProperty -Name 'Edge_Removal' -ErrorAction SilentlyContinue
|
|
||||||
|
|
||||||
# If the Edge_Removal property exists, remove it
|
|
||||||
if ($edgeRemovalPath) {
|
|
||||||
Remove-ItemProperty -Path $edgeRemovalPath.PSPath -Name 'Edge_Removal' -Force -ErrorAction SilentlyContinue
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ensure the explorer process is running
|
|
||||||
if (-not (Get-Process -Name 'explorer' -ErrorAction SilentlyContinue)) {
|
|
||||||
Start-Process 'explorer'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@ function Get-Oscdimg {
|
|||||||
<#
|
<#
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
This function will get oscdimg file for from github Release foldersand put it into env:temp
|
This function will download oscdimg file from github Release folders and put it into env:temp folder
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
Get-Oscdimg
|
Get-Oscdimg
|
||||||
|
@ -77,7 +77,13 @@ function Get-TabXaml {
|
|||||||
$panelcount++
|
$panelcount++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$blockXml += "<Label Content=""$($category -replace '^.__', '')"" FontSize=""16""/>`n"
|
|
||||||
|
# Dot-source the Get-WPFObjectName function
|
||||||
|
. .\functions\private\Get-WPFObjectName
|
||||||
|
|
||||||
|
$categorycontent = $($category -replace '^.__', '')
|
||||||
|
$categoryname = Get-WPFObjectName -type "Label" -name $categorycontent
|
||||||
|
$blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`n"
|
||||||
$sortedApps = $organizedData[$panel][$category].Keys | Sort-Object
|
$sortedApps = $organizedData[$panel][$category].Keys | Sort-Object
|
||||||
foreach ($appName in $sortedApps) {
|
foreach ($appName in $sortedApps) {
|
||||||
$count++
|
$count++
|
||||||
@ -91,8 +97,8 @@ function Get-TabXaml {
|
|||||||
}
|
}
|
||||||
$appInfo = $organizedData[$panel][$category][$appName]
|
$appInfo = $organizedData[$panel][$category][$appName]
|
||||||
if ("Toggle" -eq $appInfo.Type) {
|
if ("Toggle" -eq $appInfo.Type) {
|
||||||
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,10,0,0`">`n<Label Content=`"$($appInfo.Content)`" Style=`"{StaticResource labelfortweaks}`" ToolTip=`"$($appInfo.Description)`" />`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`"/>`n</StackPanel>`n"
|
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`" HorizontalAlignment=`"Right`"/>`n</DockPanel>`n"
|
||||||
} elseif ("Combobox" -eq $appInfo.Type) {
|
} elseif ("Combobox" -eq $appInfo.Type) {
|
||||||
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,5,0,0`">`n<Label Content=`"$($appInfo.Content)`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`"/>`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"
|
$blockXml += "<ComboBox Name=`"$($appInfo.Name)`" Height=`"32`" Width=`"186`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`" Margin=`"5,5`">`n"
|
||||||
|
27
functions/private/Get-WPFObjectName.ps1
Normal file
27
functions/private/Get-WPFObjectName.ps1
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
function Get-WPFObjectName {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
This is a helper function that generates an objectname with the prefix WPF that can be used as a Powershell Variable after compilation.
|
||||||
|
To achieve this, all characters that are not a-z, A-Z or 0-9 are simply removed from the name.
|
||||||
|
.PARAMETER type
|
||||||
|
The type of object for which the name should be generated. (e.g. Label, Button, CheckBox...)
|
||||||
|
.PARAMETER name
|
||||||
|
The name or description to be used for the object. (invalid characters are removed)
|
||||||
|
.OUTPUTS
|
||||||
|
A string that can be used as a object/variable name in powershell.
|
||||||
|
For example: WPFLabelMicrosoftTools
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
Get-WPFObjectName -type Label -name "Microsoft Tools"
|
||||||
|
#>
|
||||||
|
|
||||||
|
param( [Parameter(Mandatory=$true)]
|
||||||
|
$type,
|
||||||
|
$name
|
||||||
|
)
|
||||||
|
|
||||||
|
$Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', ''
|
||||||
|
|
||||||
|
return $Output
|
||||||
|
|
||||||
|
}
|
@ -5,9 +5,6 @@ Function Get-WinUtilCheckBoxes {
|
|||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Finds all checkboxes that are checked on the specific tab and inputs them into a script.
|
Finds all checkboxes that are checked on the specific tab and inputs them into a script.
|
||||||
|
|
||||||
.PARAMETER Group
|
|
||||||
The group of checkboxes to check
|
|
||||||
|
|
||||||
.PARAMETER unCheck
|
.PARAMETER unCheck
|
||||||
Whether to uncheck the checkboxes that are checked. Defaults to true
|
Whether to uncheck the checkboxes that are checked. Defaults to true
|
||||||
|
|
||||||
@ -32,23 +29,33 @@ Function Get-WinUtilCheckBoxes {
|
|||||||
|
|
||||||
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $_.Value -is [System.Windows.Controls.CheckBox] }
|
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $_.Value -is [System.Windows.Controls.CheckBox] }
|
||||||
|
|
||||||
|
# First check and add WPFTweaksRestorePoint if checked
|
||||||
|
$RestorePoint = $CheckBoxes | Where-Object { $_.Key -eq 'WPFTweaksRestorePoint' -and $_.Value.IsChecked -eq $true }
|
||||||
|
if ($RestorePoint) {
|
||||||
|
$Output["WPFTweaks"] = @('WPFTweaksRestorePoint')
|
||||||
|
Write-Debug "Adding WPFTweaksRestorePoint as first in WPFTweaks"
|
||||||
|
|
||||||
|
if ($unCheck) {
|
||||||
|
$RestorePoint.Value.IsChecked = $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($CheckBox in $CheckBoxes) {
|
foreach ($CheckBox in $CheckBoxes) {
|
||||||
|
if ($CheckBox.Key -eq 'WPFTweaksRestorePoint') { continue } # Skip since it's already handled
|
||||||
|
|
||||||
$group = if ($CheckBox.Key.StartsWith("WPFInstall")) { "Install" }
|
$group = if ($CheckBox.Key.StartsWith("WPFInstall")) { "Install" }
|
||||||
elseif ($CheckBox.Key.StartsWith("WPFTweaks")) { "WPFTweaks" }
|
elseif ($CheckBox.Key.StartsWith("WPFTweaks")) { "WPFTweaks" }
|
||||||
elseif ($CheckBox.Key.StartsWith("WPFFeature")) { "WPFFeature" }
|
elseif ($CheckBox.Key.StartsWith("WPFFeature")) { "WPFFeature" }
|
||||||
|
|
||||||
if ($group) {
|
if ($group) {
|
||||||
if ($CheckBox.Value.IsChecked -eq $true) {
|
if ($CheckBox.Value.IsChecked -eq $true) {
|
||||||
$feature = switch ($group) {
|
$feature = switch ($group) {
|
||||||
"Install" {
|
"Install" {
|
||||||
# Get the winget value
|
# Get the winget value
|
||||||
$wingetValue = $sync.configs.applications.$($CheckBox.Name).winget
|
[PsCustomObject]@{
|
||||||
|
winget="$($sync.configs.applications.$($CheckBox.Name).winget)";
|
||||||
if (-not [string]::IsNullOrWhiteSpace($wingetValue) -and $wingetValue -ne "na") {
|
choco="$($sync.configs.applications.$($CheckBox.Name).choco)";
|
||||||
$wingetValue -split ";"
|
|
||||||
} else {
|
|
||||||
$sync.configs.applications.$($CheckBox.Name).choco
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
default {
|
default {
|
||||||
$CheckBox.Name
|
$CheckBox.Name
|
||||||
@ -66,12 +73,11 @@ Function Get-WinUtilCheckBoxes {
|
|||||||
Write-Debug "Adding: $($feature) under: $($group)"
|
Write-Debug "Adding: $($feature) under: $($group)"
|
||||||
$Output[$group] += $feature
|
$Output[$group] += $feature
|
||||||
|
|
||||||
if ($uncheck -eq $true) {
|
if ($unCheck) {
|
||||||
$CheckBox.Value.IsChecked = $false
|
$CheckBox.Value.IsChecked = $false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $Output
|
return $Output
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,15 @@ Function Get-WinUtilToggleStatus {
|
|||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if($ToggleSwitch -eq "WPFToggleSnapWindow"){
|
||||||
|
$hidesnap = (Get-ItemProperty -path 'HKCU:\Control Panel\Desktop').WindowArrangementActive
|
||||||
|
if($hidesnap -eq 0){
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
}
|
||||||
if($ToggleSwitch -eq "WPFToggleSnapFlyout"){
|
if($ToggleSwitch -eq "WPFToggleSnapFlyout"){
|
||||||
$hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').EnableSnapAssistFlyout
|
$hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').EnableSnapAssistFlyout
|
||||||
if($hidesnap -eq 0){
|
if($hidesnap -eq 0){
|
||||||
@ -68,6 +77,15 @@ Function Get-WinUtilToggleStatus {
|
|||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if($ToggleSwitch -eq "WPFToggleSnapSuggestion"){
|
||||||
|
$hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').SnapAssist
|
||||||
|
if($hidesnap -eq 0){
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
}
|
||||||
if($ToggleSwitch -eq "WPFToggleMouseAcceleration"){
|
if($ToggleSwitch -eq "WPFToggleMouseAcceleration"){
|
||||||
$MouseSpeed = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseSpeed
|
$MouseSpeed = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseSpeed
|
||||||
$MouseThreshold1 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold1
|
$MouseThreshold1 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold1
|
||||||
@ -89,4 +107,13 @@ Function Get-WinUtilToggleStatus {
|
|||||||
return $true
|
return $true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($ToggleSwitch -eq "WPFToggleTaskbarWidgets") {
|
||||||
|
$TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa
|
||||||
|
if($TaskbarWidgets -eq 0) {
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
27
functions/private/Get-WinUtilWingetLatest.ps1
Normal file
27
functions/private/Get-WinUtilWingetLatest.ps1
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
function Get-WinUtilWingetLatest {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Uses GitHub API to check for the latest release of Winget.
|
||||||
|
.DESCRIPTION
|
||||||
|
This function grabs the latest version of Winget and returns the download path to Install-WinUtilWinget for installation.
|
||||||
|
#>
|
||||||
|
# Invoke-WebRequest is notoriously slow when the byte progress is displayed. The following lines disable the progress bar and reset them at the end of the function
|
||||||
|
$PreviousProgressPreference = $ProgressPreference
|
||||||
|
$ProgressPreference = "silentlyContinue"
|
||||||
|
Try{
|
||||||
|
# Grabs the latest release of Winget from the Github API for the install process.
|
||||||
|
$response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop
|
||||||
|
$latestVersion = $response.tag_name #Stores version number of latest release.
|
||||||
|
$licenseWingetUrl = $response.assets.browser_download_url | Where-Object {$_ -like "*License1.xml"} #Index value for License file.
|
||||||
|
Write-Host "Latest Version:`t$($latestVersion)`n"
|
||||||
|
Write-Host "Downloading..."
|
||||||
|
$assetUrl = $response.assets.browser_download_url | Where-Object {$_ -like "*Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"}
|
||||||
|
Invoke-WebRequest -Uri $licenseWingetUrl -OutFile $ENV:TEMP\License1.xml
|
||||||
|
# The only pain is that the msixbundle for winget-cli is 246MB. In some situations this can take a bit, with slower connections.
|
||||||
|
Invoke-WebRequest -Uri $assetUrl -OutFile $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle
|
||||||
|
}
|
||||||
|
Catch{
|
||||||
|
throw [WingetFailedInstall]::new('Failed to get latest Winget release and license')
|
||||||
|
}
|
||||||
|
$ProgressPreference = $PreviousProgressPreference
|
||||||
|
}
|
29
functions/private/Get-WinUtilWingetPrerequisites.ps1
Normal file
29
functions/private/Get-WinUtilWingetPrerequisites.ps1
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
function Get-WinUtilWingetPrerequisites {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Downloads the Winget Prereqs.
|
||||||
|
.DESCRIPTION
|
||||||
|
Downloads Prereqs for Winget. Version numbers are coded as variables and can be updated as uncommonly as Microsoft updates the prereqs.
|
||||||
|
#>
|
||||||
|
|
||||||
|
# I don't know of a way to detect the prereqs automatically, so if someone has a better way of defining these, that would be great.
|
||||||
|
# Microsoft.VCLibs version rarely changes, but for future compatibility I made it a variable.
|
||||||
|
$versionVCLibs = "14.00"
|
||||||
|
$fileVCLibs = "https://aka.ms/Microsoft.VCLibs.x64.${versionVCLibs}.Desktop.appx"
|
||||||
|
# Write-Host "$fileVCLibs"
|
||||||
|
# Microsoft.UI.Xaml version changed recently, so I made the version numbers variables.
|
||||||
|
$versionUIXamlMinor = "2.8"
|
||||||
|
$versionUIXamlPatch = "2.8.6"
|
||||||
|
$fileUIXaml = "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v${versionUIXamlPatch}/Microsoft.UI.Xaml.${versionUIXamlMinor}.x64.appx"
|
||||||
|
# Write-Host "$fileUIXaml"
|
||||||
|
|
||||||
|
Try{
|
||||||
|
Write-Host "Downloading Microsoft.VCLibs Dependency..."
|
||||||
|
Invoke-WebRequest -Uri $fileVCLibs -OutFile $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx
|
||||||
|
Write-Host "Downloading Microsoft.UI.Xaml Dependency...`n"
|
||||||
|
Invoke-WebRequest -Uri $fileUIXaml -OutFile $ENV:TEMP\Microsoft.UI.Xaml.x64.appx
|
||||||
|
}
|
||||||
|
Catch{
|
||||||
|
throw [WingetFailedInstall]::new('Failed to install prerequsites')
|
||||||
|
}
|
||||||
|
}
|
@ -10,20 +10,19 @@ function Install-WinUtilChoco {
|
|||||||
try {
|
try {
|
||||||
Write-Host "Checking if Chocolatey is Installed..."
|
Write-Host "Checking if Chocolatey is Installed..."
|
||||||
|
|
||||||
if((Get-Command -Name choco -ErrorAction Ignore)) {
|
if((Test-WinUtilPackageManager -choco) -eq "installed") {
|
||||||
Write-Host "Chocolatey Already Installed"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Seems Chocolatey is not installed, installing now"
|
Write-Host "Seems Chocolatey is not installed, installing now."
|
||||||
Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -ErrorAction Stop
|
Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -ErrorAction Stop
|
||||||
powershell choco feature enable -n allowGlobalConfirmation
|
powershell choco feature enable -n allowGlobalConfirmation
|
||||||
|
|
||||||
}
|
}
|
||||||
Catch {
|
Catch {
|
||||||
Write-Host "==========================================="
|
Write-Host "===========================================" -Foregroundcolor Red
|
||||||
Write-Host "-- Chocolatey failed to install ---"
|
Write-Host "-- Chocolatey failed to install ---" -Foregroundcolor Red
|
||||||
Write-Host "==========================================="
|
Write-Host "===========================================" -Foregroundcolor Red
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
91
functions/private/Install-WinUtilProgramChoco.ps1
Normal file
91
functions/private/Install-WinUtilProgramChoco.ps1
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
function Install-WinUtilProgramChoco {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Manages the provided programs using Chocolatey
|
||||||
|
|
||||||
|
.PARAMETER ProgramsToInstall
|
||||||
|
A list of programs to manage
|
||||||
|
|
||||||
|
.PARAMETER manage
|
||||||
|
The action to perform on the programs, can be either 'Installing' or 'Uninstalling'
|
||||||
|
|
||||||
|
.NOTES
|
||||||
|
The triple quotes are required any time you need a " in a normal script block.
|
||||||
|
#>
|
||||||
|
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory, Position=0)]
|
||||||
|
[PsCustomObject]$ProgramsToInstall,
|
||||||
|
|
||||||
|
[Parameter(Position=1)]
|
||||||
|
[String]$manage = "Installing"
|
||||||
|
)
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
$count = $ProgramsToInstall.Count
|
||||||
|
|
||||||
|
# This check isn't really necessary, as there's a couple of checks before this Private Function gets called, but just to make sure ;)
|
||||||
|
if($count -le 0) {
|
||||||
|
throw "Private Function 'Install-WinUtilProgramChoco' expected Parameter 'ProgramsToInstall' to be of size 1 or greater, instead got $count,`nPlease double check your code and re-compile WinUtil."
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Progress -Activity "$manage Applications" -Status "Starting" -PercentComplete 0
|
||||||
|
Write-Host "==========================================="
|
||||||
|
Write-Host "-- Configuring Chocolatey pacakages ---"
|
||||||
|
Write-Host "==========================================="
|
||||||
|
Foreach ($Program in $ProgramsToInstall){
|
||||||
|
Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.choco) $($x + 1) of $count" -PercentComplete $($x/$count*100)
|
||||||
|
if($manage -eq "Installing"){
|
||||||
|
write-host "Starting install of $($Program.choco) with Chocolatey."
|
||||||
|
try{
|
||||||
|
$tryUpgrade = $false
|
||||||
|
$installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt"
|
||||||
|
New-Item -ItemType File -Path $installOutputFilePath
|
||||||
|
$chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode
|
||||||
|
if(($chocoInstallStatus -eq 0) -AND (Test-Path -Path $installOutputFilePath)) {
|
||||||
|
$keywordsFound = Get-Content -Path $installOutputFilePath | Where-Object {$_ -match "reinstall" -OR $_ -match "already installed"}
|
||||||
|
if ($keywordsFound) {
|
||||||
|
$tryUpgrade = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command.
|
||||||
|
if ($tryUpgrade) {
|
||||||
|
throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed."
|
||||||
|
}
|
||||||
|
if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)){
|
||||||
|
Write-Host "$($Program.choco) installed successfully using Chocolatey."
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
Write-Host "Failed to install $($Program.choco) using Chocolatey, Chocolatey output:`n`n$(Get-Content -Path $installOutputFilePath)."
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-Host "Failed to install $($Program.choco) due to an error: $_"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($manage -eq "Uninstalling"){
|
||||||
|
write-host "Starting uninstall of $($Program.choco) with Chocolatey."
|
||||||
|
try{
|
||||||
|
$uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt"
|
||||||
|
New-Item -ItemType File -Path $uninstallOutputFilePath
|
||||||
|
$chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode
|
||||||
|
if($chocoUninstallStatus -eq 0){
|
||||||
|
Write-Host "$($Program.choco) uninstalled successfully using Chocolatey."
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
Write-Host "Failed to uninstall $($Program.choco) using Chocolatey, Chocolatey output:`n`n$(Get-Content -Path $uninstallOutputFilePath)."
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-Host "Failed to uninstall $($Program.choco) due to an error: $_"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$x++
|
||||||
|
}
|
||||||
|
Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed
|
||||||
|
|
||||||
|
# Cleanup leftovers files
|
||||||
|
if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $installOutputFilePath }
|
||||||
|
if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $uninstallOutputFilePath }
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
Function Install-WinUtilProgramWinget {
|
Function Install-WinUtilProgramWinget {
|
||||||
|
|
||||||
<#
|
<#
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Manages the provided programs using Winget
|
Manages the provided programs using Winget
|
||||||
|
|
||||||
@ -13,32 +12,92 @@ Function Install-WinUtilProgramWinget {
|
|||||||
|
|
||||||
.NOTES
|
.NOTES
|
||||||
The triple quotes are required any time you need a " in a normal script block.
|
The triple quotes are required any time you need a " in a normal script block.
|
||||||
|
The winget Return codes are documented here: https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-manager/winget/returnCodes.md
|
||||||
#>
|
#>
|
||||||
|
|
||||||
param(
|
param(
|
||||||
$ProgramsToInstall,
|
[Parameter(Mandatory, Position=0)]
|
||||||
$manage = "Installing"
|
[PsCustomObject]$ProgramsToInstall,
|
||||||
)
|
|
||||||
|
|
||||||
|
[Parameter(Position=1)]
|
||||||
|
[String]$manage = "Installing"
|
||||||
|
)
|
||||||
$x = 0
|
$x = 0
|
||||||
$count = $($ProgramsToInstall -split ",").Count
|
$count = $ProgramsToInstall.Count
|
||||||
|
|
||||||
Write-Progress -Activity "$manage Applications" -Status "Starting" -PercentComplete 0
|
Write-Progress -Activity "$manage Applications" -Status "Starting" -PercentComplete 0
|
||||||
|
Write-Host "==========================================="
|
||||||
Foreach ($Program in $($ProgramsToInstall -split ",")){
|
Write-Host "-- Configuring winget packages ---"
|
||||||
|
Write-Host "==========================================="
|
||||||
Write-Progress -Activity "$manage Applications" -Status "$manage $Program $($x + 1) of $count" -PercentComplete $($x/$count*100)
|
Foreach ($Program in $ProgramsToInstall){
|
||||||
|
$failedPackages = @()
|
||||||
|
Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.winget) $($x + 1) of $count" -PercentComplete $($x/$count*100)
|
||||||
if($manage -eq "Installing"){
|
if($manage -eq "Installing"){
|
||||||
Start-Process -FilePath winget -ArgumentList "install -e --accept-source-agreements --accept-package-agreements --scope=machine --silent $Program" -NoNewWindow -Wait
|
# Install package via ID, if it fails try again with different scope and then with an unelevated prompt.
|
||||||
|
# Since Install-WinGetPackage might not be directly available, we use winget install command as a workaround.
|
||||||
|
# Winget, not all installers honor any of the following: System-wide, User Installs, or Unelevated Prompt OR Silent Install Mode.
|
||||||
|
# This is up to the individual package maintainers to enable these options. Aka. not as clean as Linux Package Managers.
|
||||||
|
Write-Host "Starting install of $($Program.winget) with winget."
|
||||||
|
try {
|
||||||
|
$status = $(Start-Process -FilePath "winget" -ArgumentList "install --id $($Program.winget) --silent --accept-source-agreements --accept-package-agreements" -Wait -PassThru -NoNewWindow).ExitCode
|
||||||
|
if($status -eq 0){
|
||||||
|
Write-Host "$($Program.winget) installed successfully."
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if ($status -eq -1978335189){
|
||||||
|
Write-Host "$($Program.winget) No applicable update found"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
Write-Host "Attempt with User scope"
|
||||||
|
$status = $(Start-Process -FilePath "winget" -ArgumentList "install --id $($Program.winget) --scope user --silent --accept-source-agreements --accept-package-agreements" -Wait -PassThru -NoNewWindow).ExitCode
|
||||||
|
if($status -eq 0){
|
||||||
|
Write-Host "$($Program.winget) installed successfully with User scope."
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if ($status -eq -1978335189){
|
||||||
|
Write-Host "$($Program.winget) No applicable update found"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
Write-Host "Attempt with User prompt"
|
||||||
|
$userChoice = [System.Windows.MessageBox]::Show("Do you want to attempt $($Program.winget) installation with specific user credentials? Select 'Yes' to proceed or 'No' to skip.", "User Credential Prompt", [System.Windows.MessageBoxButton]::YesNo)
|
||||||
|
if ($userChoice -eq 'Yes') {
|
||||||
|
$getcreds = Get-Credential
|
||||||
|
$process = Start-Process -FilePath "winget" -ArgumentList "install --id $($Program.winget) --silent --accept-source-agreements --accept-package-agreements" -Credential $getcreds -PassThru -NoNewWindow
|
||||||
|
Wait-Process -Id $process.Id
|
||||||
|
$status = $process.ExitCode
|
||||||
|
} else {
|
||||||
|
Write-Host "Skipping installation with specific user credentials."
|
||||||
|
}
|
||||||
|
if($status -eq 0){
|
||||||
|
Write-Host "$($Program.winget) installed successfully with User prompt."
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if ($status -eq -1978335189){
|
||||||
|
Write-Host "$($Program.winget) No applicable update found"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-Host "Failed to install $($Program.winget). With winget"
|
||||||
|
$failedPackages += $Program
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if($manage -eq "Uninstalling"){
|
if($manage -eq "Uninstalling"){
|
||||||
Start-Process -FilePath winget -ArgumentList "uninstall -e --purge --force --silent $Program" -NoNewWindow -Wait
|
# Uninstall package via ID using winget directly.
|
||||||
|
try {
|
||||||
|
$status = $(Start-Process -FilePath "winget" -ArgumentList "uninstall --id $($Program.winget) --silent" -Wait -PassThru -NoNewWindow).ExitCode
|
||||||
|
if($status -ne 0){
|
||||||
|
Write-Host "Failed to uninstall $($Program.winget)."
|
||||||
|
} else {
|
||||||
|
Write-Host "$($Program.winget) uninstalled successfully."
|
||||||
|
$failedPackages += $Program
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-Host "Failed to uninstall $($Program.winget) due to an error: $_"
|
||||||
|
$failedPackages += $Program
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$X++
|
$X++
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed
|
Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed
|
||||||
|
return $failedPackages;
|
||||||
}
|
}
|
@ -1,50 +1,66 @@
|
|||||||
function Get-LatestHash {
|
|
||||||
$shaUrl = ((Invoke-WebRequest $apiLatestUrl -UseBasicParsing | ConvertFrom-Json).assets | Where-Object { $_.name -match '^Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.txt$' }).browser_download_url
|
|
||||||
|
|
||||||
$shaFile = Join-Path -Path $tempFolder -ChildPath 'Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.txt'
|
|
||||||
$WebClient.DownloadFile($shaUrl, $shaFile)
|
|
||||||
|
|
||||||
Get-Content $shaFile
|
|
||||||
}
|
|
||||||
|
|
||||||
function Install-WinUtilWinget {
|
function Install-WinUtilWinget {
|
||||||
|
|
||||||
<#
|
<#
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Installs Winget if it is not already installed
|
Installs Winget if it is not already installed.
|
||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
This function will download the latest version of winget and install it. If winget is already installed, it will do nothing.
|
This function will download the latest version of Winget and install it. If Winget is already installed, it will do nothing.
|
||||||
#>
|
#>
|
||||||
|
$isWingetInstalled = Test-WinUtilPackageManager -winget
|
||||||
|
|
||||||
Try {
|
Try {
|
||||||
Write-Host "Checking if Winget is Installed..."
|
if ($isWingetInstalled -eq "installed") {
|
||||||
if (Test-WinUtilPackageManager -winget) {
|
Write-Host "`nWinget is already installed.`r" -ForegroundColor Green
|
||||||
# Checks if winget executable exists and if the Windows Version is 1809 or higher
|
|
||||||
Write-Host "Winget Already Installed"
|
|
||||||
return
|
return
|
||||||
|
} elseif ($isWingetInstalled -eq "outdated") {
|
||||||
|
Write-Host "`nWinget is Outdated. Continuing with install.`r" -ForegroundColor Yellow
|
||||||
|
} else {
|
||||||
|
Write-Host "`nWinget is not Installed. Continuing with install.`r" -ForegroundColor Red
|
||||||
}
|
}
|
||||||
|
|
||||||
# Gets the computer's information
|
# Gets the computer's information
|
||||||
if ($null -eq $sync.ComputerInfo){
|
if ($null -eq $sync.ComputerInfo){
|
||||||
$ComputerInfo = Get-ComputerInfo -ErrorAction Stop
|
$ComputerInfo = Get-ComputerInfo -ErrorAction Stop
|
||||||
}
|
} else {
|
||||||
Else {
|
|
||||||
$ComputerInfo = $sync.ComputerInfo
|
$ComputerInfo = $sync.ComputerInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($ComputerInfo.WindowsVersion) -lt "1809") {
|
if (($ComputerInfo.WindowsVersion) -lt "1809") {
|
||||||
# Checks if Windows Version is too old for winget
|
# Checks if Windows Version is too old for Winget
|
||||||
Write-Host "Winget is not supported on this version of Windows (Pre-1809)"
|
Write-Host "Winget is not supported on this version of Windows (Pre-1809)" -ForegroundColor Red
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Running Alternative Installer and Direct Installing"
|
# Install Winget via GitHub method.
|
||||||
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget"
|
# Used part of my own script with some modification: ruxunderscore/windows-initialization
|
||||||
|
Write-Host "Downloading Winget Prerequsites`n"
|
||||||
Write-Host "Winget Installed"
|
Get-WinUtilWingetPrerequisites
|
||||||
}
|
Write-Host "Downloading Winget and License File`r"
|
||||||
Catch{
|
Get-WinUtilWingetLatest
|
||||||
throw [WingetFailedInstall]::new('Failed to install')
|
Write-Host "Installing Winget w/ Prerequsites`r"
|
||||||
|
Add-AppxProvisionedPackage -Online -PackagePath $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle -DependencyPackagePath $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx, $ENV:TEMP\Microsoft.UI.Xaml.x64.appx -LicensePath $ENV:TEMP\License1.xml
|
||||||
|
Write-Host "Manually adding Winget Sources, from Winget CDN."
|
||||||
|
Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time.
|
||||||
|
Write-Host "Winget Installed" -ForegroundColor Green
|
||||||
|
Write-Host "Enabling NuGet and Module..."
|
||||||
|
Install-PackageProvider -Name NuGet -Force
|
||||||
|
Install-Module -Name Microsoft.WinGet.Client -Force
|
||||||
|
# Winget only needs a refresh of the environment variables to be used.
|
||||||
|
Write-Output "Refreshing Environment Variables...`n"
|
||||||
|
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
|
||||||
|
} Catch {
|
||||||
|
Write-Host "Failure detected while installing via GitHub method. Continuing with Chocolatey method as fallback." -ForegroundColor Red
|
||||||
|
# In case install fails via GitHub method.
|
||||||
|
Try {
|
||||||
|
# Install Choco if not already present
|
||||||
|
Install-WinUtilChoco
|
||||||
|
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget-cli"
|
||||||
|
Write-Host "Winget Installed" -ForegroundColor Green
|
||||||
|
Write-Output "Refreshing Environment Variables...`n"
|
||||||
|
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
|
||||||
|
} Catch {
|
||||||
|
throw [WingetFailedInstall]::new('Failed to install!')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,28 +18,23 @@ function Test-CompatibleImage() {
|
|||||||
<#
|
<#
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Checks the version of a Windows image and determines whether or not it is compatible depending on the Major property
|
Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version
|
||||||
|
|
||||||
.PARAMETER imgVersion
|
.PARAMETER Name
|
||||||
The version of the Windows image
|
imgVersion - The version of the Windows image
|
||||||
|
desiredVersion - The version to compare the image version with
|
||||||
|
|
||||||
#>
|
#>
|
||||||
|
|
||||||
param
|
param
|
||||||
(
|
(
|
||||||
[Parameter(Mandatory = $true)] [string] $imgVersion
|
[Parameter(Mandatory = $true, Position=0)] [string] $imgVersion,
|
||||||
|
[Parameter(Mandatory = $true, Position=1)] [Version] $desiredVersion
|
||||||
)
|
)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$version = [Version]$imgVersion
|
$version = [Version]$imgVersion
|
||||||
if ($version.Major -ge 10)
|
return $version -ge $desiredVersion
|
||||||
{
|
|
||||||
return $True
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return $False
|
|
||||||
}
|
|
||||||
} catch {
|
} catch {
|
||||||
return $False
|
return $False
|
||||||
}
|
}
|
||||||
@ -59,38 +54,39 @@ function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender
|
|||||||
Remove-Features -keepDefender:$false
|
Remove-Features -keepDefender:$false
|
||||||
|
|
||||||
#>
|
#>
|
||||||
$appxlist = dism /English /image:$scratchDir /Get-Features | Select-String -Pattern "Feature Name : " -CaseSensitive -SimpleMatch
|
$featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
|
||||||
$appxlist = $appxlist -split "Feature Name : " | Where-Object {$_}
|
|
||||||
if ($dumpFeatures)
|
if ($dumpFeatures)
|
||||||
{
|
{
|
||||||
$appxlist > allfeaturesdump.txt
|
$featlist > allfeaturesdump.txt
|
||||||
}
|
}
|
||||||
|
|
||||||
$appxlist = $appxlist | Where-Object {
|
$featlist = $featlist | Where-Object {
|
||||||
$_ -NotLike "*Printing*" -AND
|
$_ -NotLike "*Printing*" -AND
|
||||||
$_ -NotLike "*TelnetClient*" -AND
|
$_ -NotLike "*TelnetClient*" -AND
|
||||||
$_ -NotLike "*PowerShell*" -AND
|
$_ -NotLike "*PowerShell*" -AND
|
||||||
$_ -NotLike "*NetFx*"
|
$_ -NotLike "*NetFx*" -AND
|
||||||
|
$_ -NotLike "*Media*" -AND
|
||||||
|
$_ -NotLike "*NFS*"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($keepDefender) { $appxlist = $appxlist | Where-Object { $_ -NotLike "*Defender*" }}
|
if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }}
|
||||||
|
|
||||||
foreach($feature in $appxlist)
|
foreach($feature in $featlist)
|
||||||
{
|
{
|
||||||
$status = "Removing feature $feature"
|
$status = "Removing feature $feature"
|
||||||
Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$appxlist.Count*100)
|
Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
|
||||||
Write-Debug "Removing feature $feature"
|
Write-Debug "Removing feature $feature"
|
||||||
# dism /image:$scratchDir /Disable-Feature /FeatureName:$feature /Remove /NoRestart > $null
|
Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart
|
||||||
}
|
}
|
||||||
Write-Progress -Activity "Removing features" -Status "Ready" -Completed
|
Write-Progress -Activity "Removing features" -Status "Ready" -Completed
|
||||||
|
Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in <installation media>\Sources."
|
||||||
}
|
}
|
||||||
|
|
||||||
function Remove-Packages
|
function Remove-Packages
|
||||||
{
|
{
|
||||||
$appxlist = dism /English /Image:$scratchDir /Get-Packages | Select-String -Pattern "Package Identity : " -CaseSensitive -SimpleMatch
|
$pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
|
||||||
$appxlist = $appxlist -split "Package Identity : " | Where-Object {$_}
|
|
||||||
|
|
||||||
$appxlist = $appxlist | Where-Object {
|
$pkglist = $pkglist | Where-Object {
|
||||||
$_ -NotLike "*ApplicationModel*" -AND
|
$_ -NotLike "*ApplicationModel*" -AND
|
||||||
$_ -NotLike "*indows-Client-LanguagePack*" -AND
|
$_ -NotLike "*indows-Client-LanguagePack*" -AND
|
||||||
$_ -NotLike "*LanguageFeatures-Basic*" -AND
|
$_ -NotLike "*LanguageFeatures-Basic*" -AND
|
||||||
@ -128,11 +124,18 @@ function Remove-Packages
|
|||||||
$_ -NotLike "*UI.XaML*"
|
$_ -NotLike "*UI.XaML*"
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($appx in $appxlist)
|
foreach ($pkg in $pkglist)
|
||||||
{
|
{
|
||||||
$status = "Removing $appx"
|
try {
|
||||||
Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$appxlist.Count*100)
|
$status = "Removing $pkg"
|
||||||
dism /English /image:$scratchDir /Remove-Package /PackageName:$appx /NoRestart
|
Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
|
||||||
|
Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
# This can happen if the package that is being removed is a permanent one, like FodMetadata
|
||||||
|
Write-Host "Could not remove OS package $($pkg)"
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
|
Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
|
||||||
}
|
}
|
||||||
@ -172,7 +175,7 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
|
|||||||
{
|
{
|
||||||
$status = "Removing Provisioned $($appx.PackageName)"
|
$status = "Removing Provisioned $($appx.PackageName)"
|
||||||
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
||||||
dism /English /image:$scratchDir /Remove-ProvisionedAppxPackage /PackageName:$($appx.PackageName) /NoRestart
|
Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
|
||||||
}
|
}
|
||||||
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
|
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
|
||||||
}
|
}
|
||||||
@ -200,7 +203,7 @@ function Copy-ToUSB([string] $fileToCopy)
|
|||||||
Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB))
|
Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB))
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "File copied to Ventoy drive $($volume.DriveLette)"
|
Write-Host "File copied to Ventoy drive $($volume.DriveLetter)"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -247,7 +250,7 @@ function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [sw
|
|||||||
|
|
||||||
foreach($itemToDelete in $itemsToDelete)
|
foreach($itemToDelete in $itemsToDelete)
|
||||||
{
|
{
|
||||||
$status = "Deleteing $($itemToDelete)"
|
$status = "Deleting $($itemToDelete)"
|
||||||
Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100)
|
Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100)
|
||||||
|
|
||||||
if (Test-Path -Path "$($itemToDelete)" -PathType Container)
|
if (Test-Path -Path "$($itemToDelete)" -PathType Container)
|
||||||
@ -321,7 +324,7 @@ function New-Unattend {
|
|||||||
<unattend xmlns="urn:schemas-microsoft-com:unattend"
|
<unattend xmlns="urn:schemas-microsoft-com:unattend"
|
||||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<#REPLACEME#>
|
||||||
<settings pass="auditUser">
|
<settings pass="auditUser">
|
||||||
<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<RunSynchronous>
|
<RunSynchronous>
|
||||||
@ -362,7 +365,27 @@ function New-Unattend {
|
|||||||
</settings>
|
</settings>
|
||||||
</unattend>
|
</unattend>
|
||||||
'@
|
'@
|
||||||
$unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force
|
$specPass = @'
|
||||||
|
<settings pass="specialize">
|
||||||
|
<component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<CEIPEnabled>0</CEIPEnabled>
|
||||||
|
</component>
|
||||||
|
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<ConfigureChatAutoInstall>false</ConfigureChatAutoInstall>
|
||||||
|
</component>
|
||||||
|
</settings>
|
||||||
|
'@
|
||||||
|
if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false)
|
||||||
|
{
|
||||||
|
# Replace the placeholder text with an empty string to make it valid for Windows 10 Setup
|
||||||
|
$unattend = $unattend.Replace("<#REPLACEME#>", "").Trim()
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# Replace the placeholder text with the Specialize pass
|
||||||
|
$unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim()
|
||||||
|
}
|
||||||
|
$unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8
|
||||||
}
|
}
|
||||||
|
|
||||||
function New-CheckInstall {
|
function New-CheckInstall {
|
||||||
@ -622,6 +645,13 @@ function New-FirstRun {
|
|||||||
$shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
|
$shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
|
||||||
# Save the shortcut
|
# Save the shortcut
|
||||||
$shortcut.Save()
|
$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"
|
Write-Host "Shortcut created at: $shortcutPath"
|
||||||
#
|
#
|
||||||
# Done create WinUtil shortcut on the desktop
|
# Done create WinUtil shortcut on the desktop
|
||||||
|
29
functions/private/Invoke-WinUtilGPU.ps1
Normal file
29
functions/private/Invoke-WinUtilGPU.ps1
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
function Invoke-WinUtilGPU {
|
||||||
|
$gpuInfo = Get-CimInstance Win32_VideoController
|
||||||
|
|
||||||
|
foreach ($gpu in $gpuInfo) {
|
||||||
|
$gpuName = $gpu.Name
|
||||||
|
if ($gpuName -like "*NVIDIA*") {
|
||||||
|
return $true # NVIDIA GPU found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($gpu in $gpuInfo) {
|
||||||
|
$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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,7 +15,7 @@ function Invoke-WinUtilNumLock {
|
|||||||
Write-Host "Disabling Numlock on startup"
|
Write-Host "Disabling Numlock on startup"
|
||||||
$value = 0
|
$value = 0
|
||||||
}
|
}
|
||||||
$Path = "HKCU:\Control Panel\Keyboard"
|
$Path = "HKU:\.Default\Control Panel\Keyboard"
|
||||||
Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value
|
Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value
|
||||||
}
|
}
|
||||||
Catch [System.Security.SecurityException] {
|
Catch [System.Security.SecurityException] {
|
||||||
|
34
functions/private/Invoke-WinUtilSnapSuggestion.ps1
Normal file
34
functions/private/Invoke-WinUtilSnapSuggestion.ps1
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
function Invoke-WinUtilSnapSuggestion {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Disables/Enables Snap Assist Suggestions on startup
|
||||||
|
.PARAMETER Enabled
|
||||||
|
Indicates whether to enable or disable Snap Assist Suggestions on startup
|
||||||
|
#>
|
||||||
|
Param($Enabled)
|
||||||
|
Try{
|
||||||
|
if ($Enabled -eq $false){
|
||||||
|
Write-Host "Enabling Snap Assist Suggestion On startup"
|
||||||
|
$value = 1
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host "Disabling Snap Assist Suggestion On startup"
|
||||||
|
$value = 0
|
||||||
|
}
|
||||||
|
# taskkill.exe /F /IM "explorer.exe"
|
||||||
|
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
|
||||||
|
taskkill.exe /F /IM "explorer.exe"
|
||||||
|
Set-ItemProperty -Path $Path -Name SnapAssist -Value $value
|
||||||
|
Start-Process "explorer.exe"
|
||||||
|
}
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
31
functions/private/Invoke-WinUtilSnapWindow.ps1
Normal file
31
functions/private/Invoke-WinUtilSnapWindow.ps1
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
function Invoke-WinUtilSnapWindow {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Disables/Enables Snapping Windows on startup
|
||||||
|
.PARAMETER Enabled
|
||||||
|
Indicates whether to enable or disable Snapping Windows on startup
|
||||||
|
#>
|
||||||
|
Param($Enabled)
|
||||||
|
Try{
|
||||||
|
if ($Enabled -eq $false){
|
||||||
|
Write-Host "Enabling Snap Windows On startup | Relogin Required"
|
||||||
|
$value = 1
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host "Disabling Snap Windows On startup | Relogin Required"
|
||||||
|
$value = 0
|
||||||
|
}
|
||||||
|
$Path = "HKCU:\Control Panel\Desktop"
|
||||||
|
Set-ItemProperty -Path $Path -Name WindowArrangementActive -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
|
||||||
|
}
|
||||||
|
}
|
34
functions/private/Invoke-WinUtilTaskbarWidgets.ps1
Normal file
34
functions/private/Invoke-WinUtilTaskbarWidgets.ps1
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
function Invoke-WinUtilTaskbarWidgets {
|
||||||
|
<#
|
||||||
|
|
||||||
|
.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 Taskbar Widgets"
|
||||||
|
$value = 1
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host "Disabling Taskbar Widgets"
|
||||||
|
$value = 0
|
||||||
|
}
|
||||||
|
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
|
||||||
|
Set-ItemProperty -Path $Path -Name TaskbarDa -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
|
||||||
|
}
|
||||||
|
}
|
@ -10,11 +10,15 @@ function Invoke-WinUtilTweaks {
|
|||||||
.PARAMETER undo
|
.PARAMETER undo
|
||||||
Indicates whether to undo the operation contained in the checkbox
|
Indicates whether to undo the operation contained in the checkbox
|
||||||
|
|
||||||
|
.PARAMETER KeepServiceStartup
|
||||||
|
Indicates whether to override the startup of a service with the one given from WinUtil,
|
||||||
|
or to keep the startup of said service, if it was changed by the user, or another program, from its default value.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
param(
|
param(
|
||||||
$CheckBox,
|
$CheckBox,
|
||||||
$undo = $false
|
$undo = $false,
|
||||||
|
$KeepServiceStartup = $true
|
||||||
)
|
)
|
||||||
|
|
||||||
Write-Debug "Tweaks: $($CheckBox)"
|
Write-Debug "Tweaks: $($CheckBox)"
|
||||||
@ -32,6 +36,7 @@ function Invoke-WinUtilTweaks {
|
|||||||
Registry = "Value"
|
Registry = "Value"
|
||||||
ScheduledTask = "State"
|
ScheduledTask = "State"
|
||||||
Service = "StartupType"
|
Service = "StartupType"
|
||||||
|
OriginalService = "OriginalType"
|
||||||
ScriptType = "InvokeScript"
|
ScriptType = "InvokeScript"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -42,11 +47,31 @@ function Invoke-WinUtilTweaks {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($sync.configs.tweaks.$CheckBox.service){
|
if($sync.configs.tweaks.$CheckBox.service){
|
||||||
|
Write-Debug "KeepServiceStartup is $KeepServiceStartup"
|
||||||
$sync.configs.tweaks.$CheckBox.service | ForEach-Object {
|
$sync.configs.tweaks.$CheckBox.service | ForEach-Object {
|
||||||
|
$changeservice = $true
|
||||||
|
|
||||||
|
# The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property
|
||||||
|
if($KeepServiceStartup -AND !($undo)) {
|
||||||
|
try {
|
||||||
|
# Check if the service exists
|
||||||
|
$service = Get-Service -Name $psitem.Name -ErrorAction Stop
|
||||||
|
if(!($service.StartType.ToString() -eq $psitem.$($values.OriginalService))) {
|
||||||
|
Write-Debug "Service $($service.Name) was changed in the past to $($service.StartType.ToString()) from it's original type of $($psitem.$($values.OriginalService)), will not change it to $($psitem.$($values.service))"
|
||||||
|
$changeservice = $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch [System.ServiceProcess.ServiceNotFoundException] {
|
||||||
|
Write-Warning "Service $($psitem.Name) was not found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($changeservice) {
|
||||||
Write-Debug "$($psitem.Name) and state is $($psitem.$($values.service))"
|
Write-Debug "$($psitem.Name) and state is $($psitem.$($values.service))"
|
||||||
Set-WinUtilService -Name $psitem.Name -StartupType $psitem.$($values.Service)
|
Set-WinUtilService -Name $psitem.Name -StartupType $psitem.$($values.Service)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if($sync.configs.tweaks.$CheckBox.registry){
|
if($sync.configs.tweaks.$CheckBox.registry){
|
||||||
$sync.configs.tweaks.$CheckBox.registry | ForEach-Object {
|
$sync.configs.tweaks.$CheckBox.registry | ForEach-Object {
|
||||||
Write-Debug "$($psitem.Name) and state is $($psitem.$($values.registry))"
|
Write-Debug "$($psitem.Name) and state is $($psitem.$($values.registry))"
|
||||||
|
@ -17,37 +17,81 @@ function Test-WinUtilPackageManager {
|
|||||||
[System.Management.Automation.SwitchParameter]$choco
|
[System.Management.Automation.SwitchParameter]$choco
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install Winget if not detected
|
$status = "not-installed"
|
||||||
$wingetExists = Get-Command -Name winget -ErrorAction SilentlyContinue
|
|
||||||
if ($wingetExists) {
|
|
||||||
$wingetVersion = [System.Version]::Parse((winget --version).Trim('v'))
|
|
||||||
$minimumWingetVersion = [System.Version]::new(1,2,10691) # Win 11 23H2 comes with bad winget v1.2.10691
|
|
||||||
$wingetOutdated = $wingetVersion -le $minimumWingetVersion
|
|
||||||
|
|
||||||
Write-Host "Winget v$wingetVersion"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$wingetExists -or $wingetOutdated) {
|
|
||||||
if (!$wingetExists) {
|
|
||||||
Write-Host "Winget not detected"
|
|
||||||
} else {
|
|
||||||
Write-Host "- Winget out-dated"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($winget) {
|
if ($winget) {
|
||||||
if ($wingetExists -and !$wingetOutdated) {
|
# Check if Winget is available while getting it's Version if it's available
|
||||||
Write-Host "- Winget up-to-date"
|
$wingetExists = $true
|
||||||
return $true
|
try {
|
||||||
|
$wingetVersionFull = winget --version
|
||||||
|
} catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] {
|
||||||
|
Write-Warning "Winget was not found due to un-availablity reasons"
|
||||||
|
$wingetExists = $false
|
||||||
|
} catch {
|
||||||
|
Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)"
|
||||||
|
$wingetExists = $false
|
||||||
|
}
|
||||||
|
|
||||||
|
# If Winget is available, Parse it's Version and give proper information to Terminal Output.
|
||||||
|
# If it isn't available, the return of this funtion will be "not-installed", indicating that
|
||||||
|
# Winget isn't installed/available on The System.
|
||||||
|
if ($wingetExists) {
|
||||||
|
# Check if Preview Version
|
||||||
|
if ($wingetVersionFull.Contains("-preview")) {
|
||||||
|
$wingetVersion = $wingetVersionFull.Trim("-preview")
|
||||||
|
$wingetPreview = $true
|
||||||
|
} else {
|
||||||
|
$wingetVersion = $wingetVersionFull
|
||||||
|
$wingetPreview = $false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if Winget's Version is too old.
|
||||||
|
$wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v'))
|
||||||
|
# Grabs the latest release of Winget from the Github API for version check process.
|
||||||
|
$response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop
|
||||||
|
$wingetLatestVersion = [System.Version]::Parse(($response.tag_name).Trim('v')) #Stores version number of latest release.
|
||||||
|
$wingetOutdated = $wingetCurrentVersion -lt $wingetLatestVersion
|
||||||
|
Write-Host "===========================================" -ForegroundColor Green
|
||||||
|
Write-Host "--- Winget is installed ---" -ForegroundColor Green
|
||||||
|
Write-Host "===========================================" -ForegroundColor Green
|
||||||
|
Write-Host "Version: $wingetVersionFull" -ForegroundColor White
|
||||||
|
|
||||||
|
if (!$wingetPreview) {
|
||||||
|
Write-Host " - Winget is a release version." -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host " - Winget is a preview version. Unexpected problems may occur." -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$wingetOutdated) {
|
||||||
|
Write-Host " - Winget is Up to Date" -ForegroundColor Green
|
||||||
|
$status = "installed"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Host " - Winget is Out of Date" -ForegroundColor Red
|
||||||
|
$status = "outdated"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "===========================================" -ForegroundColor Red
|
||||||
|
Write-Host "--- Winget is not installed ---" -ForegroundColor Red
|
||||||
|
Write-Host "===========================================" -ForegroundColor Red
|
||||||
|
$status = "not-installed"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($choco) {
|
if ($choco) {
|
||||||
if ((Get-Command -Name choco -ErrorAction Ignore) -and ($chocoVersion = (Get-Item "$env:ChocolateyInstall\choco.exe" -ErrorAction Ignore).VersionInfo.ProductVersion)) {
|
if ((Get-Command -Name choco -ErrorAction Ignore) -and ($chocoVersion = (Get-Item "$env:ChocolateyInstall\choco.exe" -ErrorAction Ignore).VersionInfo.ProductVersion)) {
|
||||||
Write-Host "Chocolatey v$chocoVersion"
|
Write-Host "===========================================" -ForegroundColor Green
|
||||||
return $true
|
Write-Host "--- Chocolatey is installed ---" -ForegroundColor Green
|
||||||
|
Write-Host "===========================================" -ForegroundColor Green
|
||||||
|
Write-Host "Version: v$chocoVersion" -ForegroundColor White
|
||||||
|
$status = "installed"
|
||||||
|
} else {
|
||||||
|
Write-Host "===========================================" -ForegroundColor Red
|
||||||
|
Write-Host "--- Chocolatey is not installed ---" -ForegroundColor Red
|
||||||
|
Write-Host "===========================================" -ForegroundColor Red
|
||||||
|
$status = "not-installed"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $false
|
return $status
|
||||||
}
|
}
|
@ -12,7 +12,7 @@ Function Update-WinUtilProgramWinget {
|
|||||||
$host.ui.RawUI.WindowTitle = """Winget Install"""
|
$host.ui.RawUI.WindowTitle = """Winget Install"""
|
||||||
|
|
||||||
Start-Transcript $ENV:TEMP\winget-update.log -Append
|
Start-Transcript $ENV:TEMP\winget-update.log -Append
|
||||||
winget upgrade --all
|
winget upgrade --all --accept-source-agreements --accept-package-agreements --scope=machine --silent
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,12 +21,12 @@ function Invoke-WPFButton {
|
|||||||
"WPFinstall" {Invoke-WPFInstall}
|
"WPFinstall" {Invoke-WPFInstall}
|
||||||
"WPFuninstall" {Invoke-WPFUnInstall}
|
"WPFuninstall" {Invoke-WPFUnInstall}
|
||||||
"WPFInstallUpgrade" {Invoke-WPFInstallUpgrade}
|
"WPFInstallUpgrade" {Invoke-WPFInstallUpgrade}
|
||||||
"WPFdesktop" {Invoke-WPFPresets "Desktop"}
|
"WPFstandard" {Invoke-WPFPresets "Standard"}
|
||||||
"WPFlaptop" {Invoke-WPFPresets "laptop"}
|
"WPFminimal" {Invoke-WPFPresets "Minimal"}
|
||||||
"WPFminimal" {Invoke-WPFPresets "minimal"}
|
|
||||||
"WPFclear" {Invoke-WPFPresets -preset $null -imported $true}
|
"WPFclear" {Invoke-WPFPresets -preset $null -imported $true}
|
||||||
"WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"}
|
"WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"}
|
||||||
"WPFtweaksbutton" {Invoke-WPFtweaksbutton}
|
"WPFtweaksbutton" {Invoke-WPFtweaksbutton}
|
||||||
|
"WPFOOSUbutton" {Invoke-WPFOOSU -action "customize"}
|
||||||
"WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enabled"}
|
"WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enabled"}
|
||||||
"WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disabled"}
|
"WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disabled"}
|
||||||
"WPFundoall" {Invoke-WPFundoall}
|
"WPFundoall" {Invoke-WPFundoall}
|
||||||
|
@ -7,7 +7,8 @@ function Invoke-WPFFixesWinget {
|
|||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
BravoNorris for the fantastic idea of a button to reinstall winget
|
BravoNorris for the fantastic idea of a button to reinstall winget
|
||||||
#>
|
#>
|
||||||
|
# Install Choco if not already present
|
||||||
|
Install-WinUtilChoco
|
||||||
Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait
|
Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait
|
||||||
|
|
||||||
}
|
}
|
@ -16,10 +16,7 @@ function Invoke-WPFGetInstalled {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(Get-Command -Name winget -ErrorAction SilentlyContinue) -and $checkbox -eq "winget"){
|
if(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget"){
|
||||||
Write-Host "==========================================="
|
|
||||||
Write-Host "-- Winget is not installed ---"
|
|
||||||
Write-Host "==========================================="
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,10 +23,6 @@ function Invoke-WPFGetIso {
|
|||||||
Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| "
|
Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| "
|
||||||
|
|
||||||
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
||||||
if( ! (Test-Path $oscdimgPath -PathType Leaf) ) {
|
|
||||||
$oscdimgPath = Join-Path '.\releases\' 'oscdimg.exe'
|
|
||||||
}
|
|
||||||
|
|
||||||
$oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf)
|
$oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf)
|
||||||
Write-Host "oscdimg.exe on system: $oscdImgFound"
|
Write-Host "oscdimg.exe on system: $oscdImgFound"
|
||||||
|
|
||||||
@ -41,6 +37,8 @@ function Invoke-WPFGetIso {
|
|||||||
# you consent to downloading it, no need to show extra dialogs
|
# you consent to downloading it, no need to show extra dialogs
|
||||||
[System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.")
|
[System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.")
|
||||||
# the step below needs choco to download oscdimg
|
# the step below needs choco to download oscdimg
|
||||||
|
# Install Choco if not already present
|
||||||
|
Install-WinUtilChoco
|
||||||
$chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco)
|
$chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco)
|
||||||
Write-Host "choco on system: $chocoFound"
|
Write-Host "choco on system: $chocoFound"
|
||||||
if (!$chocoFound)
|
if (!$chocoFound)
|
||||||
@ -90,6 +88,29 @@ function Invoke-WPFGetIso {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Detect the file size of the ISO and compare it with the free space of the system drive
|
||||||
|
$isoSize = (Get-Item -Path $filePath).Length
|
||||||
|
Write-Debug "Size of ISO file: $($isoSize) bytes"
|
||||||
|
# Use this procedure to get the free space of the drive depending on where the user profile folder is stored.
|
||||||
|
# This is done to guarantee a dynamic solution, as the installation drive may be mounted to a letter different than C
|
||||||
|
$driveSpace = (Get-Volume -DriveLetter ([IO.Path]::GetPathRoot([Environment]::GetFolderPath([Environment+SpecialFolder]::UserProfile)).Replace(":\", "").Trim())).SizeRemaining
|
||||||
|
Write-Debug "Free space on installation drive: $($driveSpace) bytes"
|
||||||
|
if ($driveSpace -lt ($isoSize * 2))
|
||||||
|
{
|
||||||
|
# It's not critical and we _may_ continue. Output a warning
|
||||||
|
Write-Warning "You may not have enough space for this operation. Proceed at your own risk."
|
||||||
|
}
|
||||||
|
elseif ($driveSpace -lt $isoSize)
|
||||||
|
{
|
||||||
|
# It's critical and we can't continue. Output an error
|
||||||
|
Write-Host "You don't have enough space for this operation. You need at least $([Math]::Round(($isoSize / ([Math]::Pow(1024, 2))) * 2, 2)) MB of free space to copy the ISO files to a temp directory and to be able to perform additional operations."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Host "You have enough space for this operation."
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Write-Host "Mounting Iso. Please wait."
|
Write-Host "Mounting Iso. Please wait."
|
||||||
$mountedISO = Mount-DiskImage -PassThru "$filePath"
|
$mountedISO = Mount-DiskImage -PassThru "$filePath"
|
||||||
@ -124,6 +145,19 @@ function Invoke-WPFGetIso {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Detect if the folders already exist and remove them
|
||||||
|
if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text))
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
Write-Host "Deleting temporary files from previous run. Please wait..."
|
||||||
|
Remove-Item -Path $sync.MicrowinMountDir.Text -Recurse -Force
|
||||||
|
Remove-Item -Path $sync.MicrowinScratchDir.Text -Recurse -Force
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Could not delete temporary files. You need to delete those manually."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Setting up mount dir and scratch dirs"
|
Write-Host "Setting up mount dir and scratch dirs"
|
||||||
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
||||||
$randomNumber = Get-Random -Minimum 1 -Maximum 9999
|
$randomNumber = Get-Random -Minimum 1 -Maximum 9999
|
||||||
@ -160,13 +194,18 @@ function Invoke-WPFGetIso {
|
|||||||
$wimFile = "$mountDir\sources\install.wim"
|
$wimFile = "$mountDir\sources\install.wim"
|
||||||
Write-Host "Getting image information $wimFile"
|
Write-Host "Getting image information $wimFile"
|
||||||
|
|
||||||
if (-not (Test-Path -Path $wimFile -PathType Leaf))
|
if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)))
|
||||||
{
|
{
|
||||||
$msg = "Install.wim file doesn't exist in the image, this could happen if you use unofficial Windows images, or a Media creation tool, which creates a final image that can not be modified. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/"
|
$msg = "Neither install.wim nor install.esd exist in the image, this could happen if you use unofficial Windows images. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/"
|
||||||
Write-Host $msg
|
Write-Host $msg
|
||||||
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
||||||
throw
|
throw
|
||||||
}
|
}
|
||||||
|
elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))
|
||||||
|
{
|
||||||
|
Write-Host "Install.esd found on the image. It needs to be converted to a WIM file in order to begin processing"
|
||||||
|
$wimFile = $wimFile.Replace(".wim", ".esd").Trim()
|
||||||
|
}
|
||||||
$sync.MicrowinWindowsFlavors.Items.Clear()
|
$sync.MicrowinWindowsFlavors.Items.Clear()
|
||||||
Get-WindowsImage -ImagePath $wimFile | ForEach-Object {
|
Get-WindowsImage -ImagePath $wimFile | ForEach-Object {
|
||||||
$imageIdx = $_.ImageIndex
|
$imageIdx = $_.ImageIndex
|
||||||
|
@ -2,33 +2,53 @@ function Invoke-WPFInstall {
|
|||||||
<#
|
<#
|
||||||
|
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Installs the selected programs using winget
|
Installs the selected programs using winget, if one or more of the selected programs are already installed on the system, winget will try and perform an upgrade if there's a newer version to install.
|
||||||
|
|
||||||
#>
|
#>
|
||||||
|
|
||||||
if($sync.ProcessRunning){
|
if($sync.ProcessRunning){
|
||||||
$msg = "[Invoke-WPFInstall] Install process is currently running."
|
$msg = "[Invoke-WPFInstall] An Install process is currently running."
|
||||||
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
$WingetInstall = (Get-WinUtilCheckBoxes)["Install"]
|
$PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
|
||||||
|
Write-Host $PackagesToInstall
|
||||||
if ($wingetinstall.Count -eq 0) {
|
if ($PackagesToInstall.Count -eq 0) {
|
||||||
$WarningMsg = "Please select the program(s) to install"
|
$WarningMsg = "Please select the program(s) to install or upgrade"
|
||||||
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Invoke-WPFRunspace -ArgumentList $WingetInstall -DebugPreference $DebugPreference -ScriptBlock {
|
Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
|
||||||
param($WingetInstall, $DebugPreference)
|
param($PackagesToInstall, $DebugPreference)
|
||||||
|
$packagesWinget, $packagesChoco = {
|
||||||
|
$packagesWinget = [System.Collections.Generic.List`1[System.Object]]::new()
|
||||||
|
$packagesChoco = [System.Collections.Generic.List`1[System.Object]]::new()
|
||||||
|
foreach ($package in $PackagesToInstall) {
|
||||||
|
if ($package.winget -eq "na") {
|
||||||
|
$packagesChoco.add($package)
|
||||||
|
Write-Host "Queueing $($package.choco) for Chocolatey install"
|
||||||
|
} else {
|
||||||
|
$packagesWinget.add($package)
|
||||||
|
Write-Host "Queueing $($package.winget) for Winget install"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $packagesWinget, $packagesChoco
|
||||||
|
}.Invoke($PackagesToInstall)
|
||||||
|
|
||||||
try{
|
try{
|
||||||
$sync.ProcessRunning = $true
|
$sync.ProcessRunning = $true
|
||||||
|
$errorPackages = @()
|
||||||
|
if($packagesWinget.Count -gt 0){
|
||||||
Install-WinUtilWinget
|
Install-WinUtilWinget
|
||||||
Install-WinUtilProgramWinget -ProgramsToInstall $WingetInstall
|
$errorPackages += Install-WinUtilProgramWinget -ProgramsToInstall $packagesWinget
|
||||||
|
$errorPackages| ForEach-Object {if($_.choco -ne "na") {$packagesChoco += $_}}
|
||||||
|
}
|
||||||
|
if($packagesChoco.Count -gt 0){
|
||||||
|
Install-WinUtilChoco
|
||||||
|
Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco
|
||||||
|
}
|
||||||
Write-Host "==========================================="
|
Write-Host "==========================================="
|
||||||
Write-Host "-- Installs have finished ---"
|
Write-Host "-- Installs have finished ---"
|
||||||
Write-Host "==========================================="
|
Write-Host "==========================================="
|
||||||
|
@ -5,10 +5,7 @@ function Invoke-WPFInstallUpgrade {
|
|||||||
Invokes the function that upgrades all installed programs using winget
|
Invokes the function that upgrades all installed programs using winget
|
||||||
|
|
||||||
#>
|
#>
|
||||||
if(!(Get-Command -Name winget -ErrorAction SilentlyContinue)){
|
if((Test-WinUtilPackageManager -winget) -eq "not-installed"){
|
||||||
Write-Host "==========================================="
|
|
||||||
Write-Host "-- Winget is not installed ---"
|
|
||||||
Write-Host "==========================================="
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,14 +53,35 @@ public class PowerManagement {
|
|||||||
$keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked
|
$keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked
|
||||||
$copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
|
$copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
|
||||||
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
|
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
|
||||||
|
$importDrivers = $sync.MicrowinImportDrivers.IsChecked
|
||||||
|
|
||||||
$mountDir = $sync.MicrowinMountDir.Text
|
$mountDir = $sync.MicrowinMountDir.Text
|
||||||
$scratchDir = $sync.MicrowinScratchDir.Text
|
$scratchDir = $sync.MicrowinScratchDir.Text
|
||||||
|
|
||||||
|
# Detect if the Windows image is an ESD file and convert it to WIM
|
||||||
|
if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf))
|
||||||
|
{
|
||||||
|
Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..."
|
||||||
|
Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max"
|
||||||
|
if ($?)
|
||||||
|
{
|
||||||
|
Remove-Item -Path $mountDir\sources\install.esd -Force
|
||||||
|
# Since we've already exported the image index we wanted, switch to the first one
|
||||||
|
$index = 1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$msg = "The export process has failed and MicroWin processing cannot continue"
|
||||||
|
Write-Host "Failed to export the image"
|
||||||
|
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$imgVersion = (Get-WindowsImage -ImagePath $mountDir\sources\install.wim -Index $index).Version
|
$imgVersion = (Get-WindowsImage -ImagePath $mountDir\sources\install.wim -Index $index).Version
|
||||||
|
|
||||||
# Detect image version to avoid performing MicroWin processing on Windows 8 and earlier
|
# Detect image version to avoid performing MicroWin processing on Windows 8 and earlier
|
||||||
if ((Test-CompatibleImage $imgVersion) -eq $false)
|
if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false)
|
||||||
{
|
{
|
||||||
$msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image."
|
$msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image."
|
||||||
$dlg_msg = $msg + "`n`nIf you want more information, the version of the image selected is $($imgVersion)`n`nIf an image has been incorrectly marked as incompatible, report an issue to the developers."
|
$dlg_msg = $msg + "`n`nIf you want more information, the version of the image selected is $($imgVersion)`n`nIf an image has been incorrectly marked as incompatible, report an issue to the developers."
|
||||||
@ -80,8 +101,57 @@ public class PowerManagement {
|
|||||||
try {
|
try {
|
||||||
|
|
||||||
Write-Host "Mounting Windows image. This may take a while."
|
Write-Host "Mounting Windows image. This may take a while."
|
||||||
dism /mount-image /imagefile:$mountDir\sources\install.wim /index:$index /mountdir:$scratchDir
|
Mount-WindowsImage -ImagePath "$mountDir\sources\install.wim" -Index $index -Path "$scratchDir"
|
||||||
|
if ($?)
|
||||||
|
{
|
||||||
Write-Host "Mounting complete! Performing removal of applications..."
|
Write-Host "Mounting complete! Performing removal of applications..."
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Host "Could not mount image. Exiting..."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($importDrivers)
|
||||||
|
{
|
||||||
|
Write-Host "Exporting drivers from active installation..."
|
||||||
|
if (Test-Path "$env:TEMP\DRV_EXPORT")
|
||||||
|
{
|
||||||
|
Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
|
||||||
|
}
|
||||||
|
if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text)))
|
||||||
|
{
|
||||||
|
Write-Host "Using specified driver source..."
|
||||||
|
dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host
|
||||||
|
if ($?)
|
||||||
|
{
|
||||||
|
# Don't add exported drivers yet, that is run later
|
||||||
|
Write-Host "Drivers have been exported successfully."
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Host "Failed to export drivers."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force
|
||||||
|
dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host
|
||||||
|
if ($?)
|
||||||
|
{
|
||||||
|
Write-Host "Adding exported drivers..."
|
||||||
|
dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Host "Failed to export drivers. Continuing without importing them..."
|
||||||
|
}
|
||||||
|
if (Test-Path "$env:TEMP\DRV_EXPORT")
|
||||||
|
{
|
||||||
|
Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($injectDrivers)
|
if ($injectDrivers)
|
||||||
{
|
{
|
||||||
@ -174,26 +244,27 @@ public class PowerManagement {
|
|||||||
$desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop"
|
$desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop"
|
||||||
New-Item -ItemType Directory -Force -Path "$desktopDir"
|
New-Item -ItemType Directory -Force -Path "$desktopDir"
|
||||||
dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default"
|
dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default"
|
||||||
$command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
|
|
||||||
$shortcutPath = "$desktopDir\WinUtil.lnk"
|
|
||||||
$shell = New-Object -ComObject WScript.Shell
|
|
||||||
$shortcut = $shell.CreateShortcut($shortcutPath)
|
|
||||||
|
|
||||||
if (Test-Path -Path "$env:TEMP\cttlogo.png")
|
# $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'"
|
||||||
{
|
# $shortcutPath = "$desktopDir\WinUtil.lnk"
|
||||||
$pngPath = "$env:TEMP\cttlogo.png"
|
# $shell = New-Object -ComObject WScript.Shell
|
||||||
$icoPath = "$env:TEMP\cttlogo.ico"
|
# $shortcut = $shell.CreateShortcut($shortcutPath)
|
||||||
ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath
|
|
||||||
Write-Host "ICO file created at: $icoPath"
|
|
||||||
Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force
|
|
||||||
Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force
|
|
||||||
$shortcut.IconLocation = "c:\Windows\cttlogo.ico"
|
|
||||||
}
|
|
||||||
|
|
||||||
$shortcut.TargetPath = "powershell.exe"
|
# if (Test-Path -Path "$env:TEMP\cttlogo.png")
|
||||||
$shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
|
# {
|
||||||
$shortcut.Save()
|
# $pngPath = "$env:TEMP\cttlogo.png"
|
||||||
Write-Host "Shortcut to winutil created at: $shortcutPath"
|
# $icoPath = "$env:TEMP\cttlogo.ico"
|
||||||
|
# ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath
|
||||||
|
# Write-Host "ICO file created at: $icoPath"
|
||||||
|
# Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force
|
||||||
|
# Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force
|
||||||
|
# $shortcut.IconLocation = "c:\Windows\cttlogo.ico"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# $shortcut.TargetPath = "powershell.exe"
|
||||||
|
# $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`""
|
||||||
|
# $shortcut.Save()
|
||||||
|
# Write-Host "Shortcut to winutil created at: $shortcutPath"
|
||||||
# *************************** Automation black ***************************
|
# *************************** Automation black ***************************
|
||||||
|
|
||||||
Write-Host "Copy checkinstall.cmd into the ISO"
|
Write-Host "Copy checkinstall.cmd into the ISO"
|
||||||
@ -279,13 +350,13 @@ public class PowerManagement {
|
|||||||
Write-Host "Cleanup complete."
|
Write-Host "Cleanup complete."
|
||||||
|
|
||||||
Write-Host "Unmounting image..."
|
Write-Host "Unmounting image..."
|
||||||
dism /unmount-image /mountdir:$scratchDir /commit
|
Dismount-WindowsImage -Path $scratchDir -Save
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
Write-Host "Exporting image into $mountDir\sources\install2.wim"
|
Write-Host "Exporting image into $mountDir\sources\install2.wim"
|
||||||
dism /Export-Image /SourceImageFile:"$mountDir\sources\install.wim" /SourceIndex:$index /DestinationImageFile:"$mountDir\sources\install2.wim" /compress:max
|
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max"
|
||||||
Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
|
Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
|
||||||
Remove-Item "$mountDir\sources\install.wim"
|
Remove-Item "$mountDir\sources\install.wim"
|
||||||
Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
|
Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
|
||||||
@ -299,7 +370,7 @@ public class PowerManagement {
|
|||||||
|
|
||||||
# Next step boot image
|
# Next step boot image
|
||||||
Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
|
Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
|
||||||
dism /mount-image /imagefile:"$mountDir\sources\boot.wim" /index:2 /mountdir:"$scratchDir"
|
Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"
|
||||||
|
|
||||||
if ($injectDrivers)
|
if ($injectDrivers)
|
||||||
{
|
{
|
||||||
@ -345,7 +416,7 @@ public class PowerManagement {
|
|||||||
reg unload HKLM\zSYSTEM
|
reg unload HKLM\zSYSTEM
|
||||||
|
|
||||||
Write-Host "Unmounting image..."
|
Write-Host "Unmounting image..."
|
||||||
dism /unmount-image /mountdir:$scratchDir /commit
|
Dismount-WindowsImage -Path $scratchDir -Save
|
||||||
|
|
||||||
Write-Host "Creating ISO image"
|
Write-Host "Creating ISO image"
|
||||||
|
|
||||||
|
43
functions/public/Invoke-WPFOOSU.ps1
Normal file
43
functions/public/Invoke-WPFOOSU.ps1
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
function Invoke-WPFOOSU {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
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
|
||||||
|
#>
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$ProgressPreference = $Initial_ProgressPreference
|
||||||
|
}
|
@ -11,6 +11,7 @@ function Invoke-WPFRunAdobeCCCleanerTool {
|
|||||||
Write-Host "The Adobe Creative Cloud Cleaner tool is hosted at"
|
Write-Host "The Adobe Creative Cloud Cleaner tool is hosted at"
|
||||||
Write-Host "$url"
|
Write-Host "$url"
|
||||||
|
|
||||||
|
try {
|
||||||
# Don't show the progress because it will slow down the download speed
|
# Don't show the progress because it will slow down the download speed
|
||||||
$ProgressPreference='SilentlyContinue'
|
$ProgressPreference='SilentlyContinue'
|
||||||
|
|
||||||
@ -20,9 +21,12 @@ function Invoke-WPFRunAdobeCCCleanerTool {
|
|||||||
$ProgressPreference='Continue'
|
$ProgressPreference='Continue'
|
||||||
|
|
||||||
Start-Process -FilePath "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Wait -ErrorAction SilentlyContinue -Verbose
|
Start-Process -FilePath "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Wait -ErrorAction SilentlyContinue -Verbose
|
||||||
|
} catch {
|
||||||
|
Write-Error $_.Exception.Message
|
||||||
|
} finally {
|
||||||
if (Test-Path -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe") {
|
if (Test-Path -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe") {
|
||||||
Write-Host "Cleaning up..."
|
Write-Host "Cleaning up..."
|
||||||
Remove-Item -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Verbose
|
Remove-Item -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Verbose
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -17,6 +17,7 @@ function Invoke-WPFShortcut {
|
|||||||
[bool]$RunAsAdmin = $false
|
[bool]$RunAsAdmin = $false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Preper the Shortcut Fields and add an a Custom Icon if it's available at "$env:TEMP\cttlogo.png", else don't add a Custom Icon.
|
||||||
$iconPath = $null
|
$iconPath = $null
|
||||||
Switch ($ShortcutToAdd) {
|
Switch ($ShortcutToAdd) {
|
||||||
"WinUtil" {
|
"WinUtil" {
|
||||||
@ -33,11 +34,18 @@ function Invoke-WPFShortcut {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 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 = New-Object System.Windows.Forms.SaveFileDialog
|
||||||
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
|
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
|
||||||
$FileBrowser.Filter = "Shortcut Files (*.lnk)|*.lnk"
|
$FileBrowser.Filter = "Shortcut Files (*.lnk)|*.lnk"
|
||||||
$FileBrowser.FileName = $DestinationName
|
$FileBrowser.FileName = $DestinationName
|
||||||
$FileBrowser.ShowDialog() | Out-Null
|
|
||||||
|
# Do an Early Return if The Save Shortcut operation was cancel by User's Input.
|
||||||
|
$FileBrowserResult = $FileBrowser.ShowDialog()
|
||||||
|
$DialogResultEnum = New-Object System.Windows.Forms.DialogResult
|
||||||
|
if (-not ($FileBrowserResult -eq $DialogResultEnum::OK)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
$WshShell = New-Object -comObject WScript.Shell
|
$WshShell = New-Object -comObject WScript.Shell
|
||||||
$Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
|
$Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
|
||||||
|
@ -22,8 +22,11 @@ function Invoke-WPFToggle {
|
|||||||
"WPFToggleNumLock" {Invoke-WinUtilNumLock $(Get-WinUtilToggleStatus WPFToggleNumLock)}
|
"WPFToggleNumLock" {Invoke-WinUtilNumLock $(Get-WinUtilToggleStatus WPFToggleNumLock)}
|
||||||
"WPFToggleVerboseLogon" {Invoke-WinUtilVerboseLogon $(Get-WinUtilToggleStatus WPFToggleVerboseLogon)}
|
"WPFToggleVerboseLogon" {Invoke-WinUtilVerboseLogon $(Get-WinUtilToggleStatus WPFToggleVerboseLogon)}
|
||||||
"WPFToggleShowExt" {Invoke-WinUtilShowExt $(Get-WinUtilToggleStatus WPFToggleShowExt)}
|
"WPFToggleShowExt" {Invoke-WinUtilShowExt $(Get-WinUtilToggleStatus WPFToggleShowExt)}
|
||||||
|
"WPFToggleSnapWindow" {Invoke-WinUtilSnapWindow $(Get-WinUtilToggleStatus WPFToggleSnapWindow)}
|
||||||
"WPFToggleSnapFlyout" {Invoke-WinUtilSnapFlyout $(Get-WinUtilToggleStatus WPFToggleSnapFlyout)}
|
"WPFToggleSnapFlyout" {Invoke-WinUtilSnapFlyout $(Get-WinUtilToggleStatus WPFToggleSnapFlyout)}
|
||||||
|
"WPFToggleSnapSuggestion" {Invoke-WinUtilSnapSuggestion $(Get-WinUtilToggleStatus WPFToggleSnapSuggestion)}
|
||||||
"WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)}
|
"WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)}
|
||||||
"WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)}
|
"WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)}
|
||||||
|
"WPFToggleTaskbarWidgets" {Invoke-WinUtilTaskbarWidgets $(Get-WinUtilToggleStatus WPFToggleTaskbarWidgets)}
|
||||||
}
|
}
|
||||||
}
|
}
|
46
functions/public/Invoke-WPFTweakPS7.ps1
Normal file
46
functions/public/Invoke-WPFTweakPS7.ps1
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
function Invoke-WPFTweakPS7{
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
This will edit the config file of the Windows Terminal Replacing the Powershell 5 to Powershell 7 and install Powershell 7 if necessary
|
||||||
|
.PARAMETER action
|
||||||
|
PS7: Configures Powershell 7 to be the default Terminal
|
||||||
|
PS5: Configures Powershell 5 to be the default Terminal
|
||||||
|
#>
|
||||||
|
param (
|
||||||
|
[ValidateSet("PS7", "PS5")]
|
||||||
|
[string]$action
|
||||||
|
)
|
||||||
|
|
||||||
|
switch ($action) {
|
||||||
|
"PS7"{
|
||||||
|
if (Test-Path -Path "$env:ProgramFiles\PowerShell\7") {
|
||||||
|
Write-Host "Powershell 7 is already installed."
|
||||||
|
} else {
|
||||||
|
Write-Host "Installing Powershell 7..."
|
||||||
|
Install-WinUtilProgramWinget -ProgramsToInstall @(@{"winget"="Microsoft.PowerShell"})
|
||||||
|
}
|
||||||
|
$targetTerminalName = "PowerShell"
|
||||||
|
}
|
||||||
|
"PS5"{
|
||||||
|
$targetTerminalName = "Windows PowerShell"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
|
||||||
|
if (Test-Path -Path $settingsPath) {
|
||||||
|
Write-Host "Settings file found."
|
||||||
|
$settingsContent = Get-Content -Path $settingsPath | ConvertFrom-Json
|
||||||
|
$ps7Profile = $settingsContent.profiles.list | Where-Object { $_.name -eq $targetTerminalName }
|
||||||
|
if ($ps7Profile) {
|
||||||
|
$settingsContent.defaultProfile = $ps7Profile.guid
|
||||||
|
$updatedSettings = $settingsContent | ConvertTo-Json -Depth 100
|
||||||
|
Set-Content -Path $settingsPath -Value $updatedSettings
|
||||||
|
Write-Host "Default profile updated to $targetTerminalName using the name attribute."
|
||||||
|
} else {
|
||||||
|
Write-Host "No PowerShell 7 profile found in Windows Terminal settings using the name attribute."
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "Settings file not found at $settingsPath"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -12,9 +12,9 @@ function Invoke-WPFUnInstall {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
$WingetInstall = (Get-WinUtilCheckBoxes)["Install"]
|
$PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
|
||||||
|
|
||||||
if ($wingetinstall.Count -eq 0) {
|
if ($PackagesToInstall.Count -eq 0) {
|
||||||
$WarningMsg = "Please select the program(s) to install"
|
$WarningMsg = "Please select the program(s) to install"
|
||||||
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||||
return
|
return
|
||||||
@ -22,21 +22,39 @@ function Invoke-WPFUnInstall {
|
|||||||
|
|
||||||
$ButtonType = [System.Windows.MessageBoxButton]::YesNo
|
$ButtonType = [System.Windows.MessageBoxButton]::YesNo
|
||||||
$MessageboxTitle = "Are you sure?"
|
$MessageboxTitle = "Are you sure?"
|
||||||
$Messageboxbody = ("This will uninstall the following applications: `n $WingetInstall")
|
$Messageboxbody = ("This will uninstall the following applications: `n $($PackagesToInstall | Format-Table | Out-String)")
|
||||||
$MessageIcon = [System.Windows.MessageBoxImage]::Information
|
$MessageIcon = [System.Windows.MessageBoxImage]::Information
|
||||||
|
|
||||||
$confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
$confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
||||||
|
|
||||||
if($confirm -eq "No"){return}
|
if($confirm -eq "No"){return}
|
||||||
|
|
||||||
Invoke-WPFRunspace -ArgumentList $WingetInstall -DebugPreference $DebugPreference -ScriptBlock {
|
Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock {
|
||||||
param($WingetInstall, $DebugPreference)
|
param($PackagesToInstall, $DebugPreference)
|
||||||
|
$packagesWinget, $packagesChoco = {
|
||||||
|
$packagesWinget = [System.Collections.Generic.List`1[System.Object]]::new()
|
||||||
|
$packagesChoco = [System.Collections.Generic.List`1[System.Object]]::new()
|
||||||
|
foreach ($package in $PackagesToInstall) {
|
||||||
|
if ($package.winget -eq "na") {
|
||||||
|
$packagesChoco.add($package)
|
||||||
|
Write-Host "Queueing $($package.choco) for Chocolatey Uninstall"
|
||||||
|
} else {
|
||||||
|
$packagesWinget.add($package)
|
||||||
|
Write-Host "Queueing $($package.winget) for Winget Uninstall"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $packagesWinget, $packagesChoco
|
||||||
|
}.Invoke($PackagesToInstall)
|
||||||
try{
|
try{
|
||||||
$sync.ProcessRunning = $true
|
$sync.ProcessRunning = $true
|
||||||
|
|
||||||
# Install all selected programs in new window
|
# Install all selected programs in new window
|
||||||
Install-WinUtilProgramWinget -ProgramsToInstall $WingetInstall -Manage "Uninstalling"
|
if($packagesWinget.Count -gt 0){
|
||||||
|
Install-WinUtilProgramWinget -ProgramsToInstall $packagesWinget -Manage "Uninstalling"
|
||||||
|
}
|
||||||
|
if($packagesChoco.Count -gt 0){
|
||||||
|
Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco -Manage "Uninstalling"
|
||||||
|
}
|
||||||
|
|
||||||
$ButtonType = [System.Windows.MessageBoxButton]::OK
|
$ButtonType = [System.Windows.MessageBoxButton]::OK
|
||||||
$MessageboxTitle = "Uninstalls are Finished "
|
$MessageboxTitle = "Uninstalls are Finished "
|
||||||
@ -51,7 +69,7 @@ function Invoke-WPFUnInstall {
|
|||||||
}
|
}
|
||||||
Catch {
|
Catch {
|
||||||
Write-Host "==========================================="
|
Write-Host "==========================================="
|
||||||
Write-Host "-- Winget failed to install ---"
|
Write-Host "Error: $_"
|
||||||
Write-Host "==========================================="
|
Write-Host "==========================================="
|
||||||
}
|
}
|
||||||
$sync.ProcessRunning = $False
|
$sync.ProcessRunning = $False
|
||||||
|
@ -1,43 +1,54 @@
|
|||||||
#===========================================================================
|
#===========================================================================
|
||||||
# Tests - Functions
|
# Tests - Functions
|
||||||
#===========================================================================
|
#===========================================================================
|
||||||
|
Describe "Comprehensive Checks for PS1 Files in Functions Folder" {
|
||||||
|
BeforeAll {
|
||||||
# Get all .ps1 files in the functions folder
|
# Get all .ps1 files in the functions folder
|
||||||
$ps1Files = Get-ChildItem -Path ./functions -Filter *.ps1
|
$ps1Files = Get-ChildItem -Path ./functions -Filter *.ps1 -Recurse
|
||||||
|
}
|
||||||
|
|
||||||
# Loop through each file
|
|
||||||
foreach ($file in $ps1Files) {
|
foreach ($file in $ps1Files) {
|
||||||
# Define the test name
|
Context "Checking $($file.Name)" {
|
||||||
$testName = "Syntax check for $($file.Name)"
|
It "Should import without errors" {
|
||||||
|
{ . $file.FullName } | Should -Not -Throw
|
||||||
|
}
|
||||||
|
|
||||||
# Define the test script
|
It "Should have no syntax errors" {
|
||||||
$testScript = {
|
$syntaxErrors = $null
|
||||||
# Import the script
|
$null = [System.Management.Automation.PSParser]::Tokenize((Get-Content -Path $file.FullName -Raw), [ref]$syntaxErrors)
|
||||||
|
$syntaxErrors.Count | Should -Be 0
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Should not use deprecated cmdlets or aliases" {
|
||||||
|
$content = Get-Content -Path $file.FullName -Raw
|
||||||
|
# Example check for a known deprecated cmdlet or alias
|
||||||
|
$content | Should -Not -Match 'DeprecatedCmdlet'
|
||||||
|
# Add more checks as needed
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Should follow naming conventions for functions" {
|
||||||
|
$functions = (Get-Command -Path $file.FullName).Name
|
||||||
|
foreach ($function in $functions) {
|
||||||
|
$function | Should -Match '^[a-z]+(-[a-z]+)*$' # Enforce lower-kebab-case
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Should define mandatory parameters for all functions" {
|
||||||
. $file.FullName
|
. $file.FullName
|
||||||
|
$functions = (Get-Command -Path $file.FullName).Name
|
||||||
# Check if any errors occurred
|
foreach ($function in $functions) {
|
||||||
$scriptError = $error[0]
|
$parameters = (Get-Command -Name $function).Parameters.Values
|
||||||
$scriptError | Should -Be $null
|
$mandatoryParams = $parameters | Where-Object { $_.Attributes.Mandatory -eq $true }
|
||||||
|
$mandatoryParams.Count | Should -BeGreaterThan 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add the test to the Pester test suite
|
It "Should have all functions available after import" {
|
||||||
Describe $testName $testScript
|
. $file.FullName
|
||||||
}
|
$functions = (Get-Command -Path $file.FullName).Name
|
||||||
|
foreach ($function in $functions) {
|
||||||
Describe "Functions"{
|
{ Get-Command -Name $function -CommandType Function } | Should -Not -BeNullOrEmpty
|
||||||
|
}
|
||||||
Get-ChildItem .\functions -Recurse -File | ForEach-Object {
|
|
||||||
|
|
||||||
context "$($psitem.BaseName)" {
|
|
||||||
BeforeEach -Scriptblock {
|
|
||||||
. $psitem.FullName
|
|
||||||
}
|
|
||||||
|
|
||||||
It "Imports with no errors" -TestCases @{
|
|
||||||
basename = $($psitem.BaseName)
|
|
||||||
fullname = $psitem.FullName
|
|
||||||
} {
|
|
||||||
Get-ChildItem function:\$basename | should -Not -BeNullOrEmpty
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,25 +52,14 @@ $sync.runspace.Open()
|
|||||||
|
|
||||||
$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'
|
||||||
|
|
||||||
# Assuming inputApp.xaml is in the same directory as main.ps1
|
|
||||||
$appXamlPath = Join-Path -Path $PSScriptRoot -ChildPath "xaml/inputApp.xaml"
|
|
||||||
$tweaksXamlPath = Join-Path -Path $PSScriptRoot -ChildPath "xaml/inputTweaks.xaml"
|
|
||||||
$featuresXamlPath = Join-Path -Path $PSScriptRoot -ChildPath "xaml/inputFeatures.xaml"
|
|
||||||
|
|
||||||
# Load the XAML content from inputApp.xaml
|
|
||||||
$appXamlContent = Get-Content -Path $appXamlPath -Raw
|
|
||||||
$tweaksXamlContent = Get-Content -Path $tweaksXamlPath -Raw
|
|
||||||
$featuresXamlContent = Get-Content -Path $featuresXamlPath -Raw
|
|
||||||
|
|
||||||
# Replace the placeholder in $inputXML with the content of inputApp.xaml
|
|
||||||
$inputXML = $inputXML -replace "{{InstallPanel_applications}}", $appXamlContent
|
|
||||||
$inputXML = $inputXML -replace "{{InstallPanel_tweaks}}", $tweaksXamlContent
|
|
||||||
$inputXML = $inputXML -replace "{{InstallPanel_features}}", $featuresXamlContent
|
|
||||||
|
|
||||||
|
|
||||||
if ((Get-WinUtilToggleStatus WPFToggleDarkMode) -eq $True) {
|
if ((Get-WinUtilToggleStatus WPFToggleDarkMode) -eq $True) {
|
||||||
|
if (Invoke-WinUtilGPU -eq $True) {
|
||||||
$ctttheme = 'Matrix'
|
$ctttheme = 'Matrix'
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
$ctttheme = 'Dark'
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
$ctttheme = 'Classic'
|
$ctttheme = 'Classic'
|
||||||
}
|
}
|
||||||
@ -156,8 +145,8 @@ Invoke-WPFRunspace -ScriptBlock {
|
|||||||
# Print the logo
|
# Print the logo
|
||||||
Invoke-WPFFormVariables
|
Invoke-WPFFormVariables
|
||||||
|
|
||||||
# Check if Chocolatey is installed
|
# Install Winget if not already present
|
||||||
Install-WinUtilChoco
|
Install-WinUtilWinget
|
||||||
|
|
||||||
# Set the titlebar
|
# Set the titlebar
|
||||||
$sync["Form"].title = $sync["Form"].title + " " + $sync.version
|
$sync["Form"].title = $sync["Form"].title + " " + $sync.version
|
||||||
@ -283,9 +272,13 @@ Add-Type @"
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach ($proc in (Get-Process | Where-Object { $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" })) {
|
foreach ($proc in (Get-Process | Where-Object { $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" })) {
|
||||||
if ($proc.Id -ne [System.IntPtr]::Zero) {
|
# Check if the process's MainWindowHandle is valid
|
||||||
|
if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
|
||||||
Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
|
Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
|
||||||
$windowHandle = $proc.MainWindowHandle
|
$windowHandle = $proc.MainWindowHandle
|
||||||
|
} else {
|
||||||
|
Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,6 +367,16 @@ 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-Object { $psitem.Key -in $filter }
|
||||||
|
|
||||||
|
$filter = Get-WinUtilVariables -Type Label
|
||||||
|
$labels = @{}
|
||||||
|
$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
|
||||||
|
|
||||||
$sync["CheckboxFilter"].Add_TextChanged({
|
$sync["CheckboxFilter"].Add_TextChanged({
|
||||||
|
|
||||||
if ($sync.CheckboxFilter.Text -ne "") {
|
if ($sync.CheckboxFilter.Text -ne "") {
|
||||||
@ -383,8 +386,7 @@ $sync["CheckboxFilter"].Add_TextChanged({
|
|||||||
$sync.CheckboxFilterClear.Visibility = "Collapsed"
|
$sync.CheckboxFilterClear.Visibility = "Collapsed"
|
||||||
}
|
}
|
||||||
|
|
||||||
$filter = Get-WinUtilVariables -Type CheckBox
|
$activeApplications = @()
|
||||||
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter }
|
|
||||||
|
|
||||||
foreach ($CheckBox in $CheckBoxes) {
|
foreach ($CheckBox in $CheckBoxes) {
|
||||||
# Check if the checkbox is null or if it doesn't have content
|
# Check if the checkbox is null or if it doesn't have content
|
||||||
@ -392,7 +394,7 @@ $sync["CheckboxFilter"].Add_TextChanged({
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
$textToSearch = $sync.CheckboxFilter.Text
|
$textToSearch = $sync.CheckboxFilter.Text.ToLower()
|
||||||
$checkBoxName = $CheckBox.Key
|
$checkBoxName = $CheckBox.Key
|
||||||
$textBlockName = $checkBoxName + "Link"
|
$textBlockName = $checkBoxName + "Link"
|
||||||
|
|
||||||
@ -401,6 +403,7 @@ $sync["CheckboxFilter"].Add_TextChanged({
|
|||||||
|
|
||||||
if ($CheckBox.Value.Content.ToLower().Contains($textToSearch)) {
|
if ($CheckBox.Value.Content.ToLower().Contains($textToSearch)) {
|
||||||
$CheckBox.Value.Visibility = "Visible"
|
$CheckBox.Value.Visibility = "Visible"
|
||||||
|
$activeApplications += $sync.configs.applications.$checkboxName
|
||||||
# Set the corresponding text block visibility
|
# Set the corresponding text block visibility
|
||||||
if ($textBlock -ne $null) {
|
if ($textBlock -ne $null) {
|
||||||
$textBlock.Visibility = "Visible"
|
$textBlock.Visibility = "Visible"
|
||||||
@ -414,7 +417,21 @@ $sync["CheckboxFilter"].Add_TextChanged({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$activeCategories = $activeApplications | Select-Object -ExpandProperty category -Unique
|
||||||
|
|
||||||
|
foreach ($category in $activeCategories){
|
||||||
|
$label = $labels[$(Get-WPFObjectName -type "Label" -name $category)]
|
||||||
|
$label.Visibility = "Visible"
|
||||||
|
}
|
||||||
|
if ($activeCategories){
|
||||||
|
$inactiveCategories = Compare-Object -ReferenceObject $allCategories -DifferenceObject $activeCategories -PassThru
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$inactiveCategories = $allCategories
|
||||||
|
}
|
||||||
|
foreach ($category in $inactiveCategories){
|
||||||
|
$label = $labels[$(Get-WPFObjectName -type "Label" -name $category)]
|
||||||
|
$label.Visibility = "Collapsed"}
|
||||||
})
|
})
|
||||||
|
|
||||||
# Define event handler for button click
|
# Define event handler for button click
|
||||||
|
@ -44,21 +44,16 @@ $sync.version = "#{replaceme}"
|
|||||||
$sync.configs = @{}
|
$sync.configs = @{}
|
||||||
$sync.ProcessRunning = $false
|
$sync.ProcessRunning = $false
|
||||||
|
|
||||||
$currentPid = [System.Security.Principal.WindowsIdentity]::GetCurrent()
|
# If script isn't running as admin, show error message and quit
|
||||||
$principal = new-object System.Security.Principal.WindowsPrincipal($currentPid)
|
If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544")
|
||||||
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
|
|
||||||
|
|
||||||
|
|
||||||
if ($principal.IsInRole($adminRole))
|
|
||||||
{
|
{
|
||||||
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)"
|
Write-Host "===========================================" -Foregroundcolor Red
|
||||||
clear-host
|
Write-Host "-- Scripts must be run as Administrator ---" -Foregroundcolor Red
|
||||||
}
|
Write-Host "-- Right-Click Start -> Terminal(Admin) ---" -Foregroundcolor Red
|
||||||
else
|
Write-Host "===========================================" -Foregroundcolor Red
|
||||||
{
|
|
||||||
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
|
|
||||||
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
|
|
||||||
$newProcess.Verb = "runas";
|
|
||||||
[System.Diagnostics.Process]::Start($newProcess);
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Set PowerShell window title
|
||||||
|
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)"
|
||||||
|
clear-host
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Battery drains too fast.
|
# Battery drains too fast.
|
||||||
When your battery on teh laptop drains too fast please perform these steps and report the results back to Winutil community.
|
When your battery on the laptop drains too fast, please perform these steps and report the results back to the Winutil community.
|
||||||
|
|
||||||
1. **Check Battery Health:**
|
1. **Check Battery Health:**
|
||||||
- Open a Command Prompt as an administrator.
|
- Open a Command Prompt as an administrator.
|
||||||
|
@ -21,7 +21,7 @@ This error code typically indicates an issue related to Windows Management Instr
|
|||||||
- Press `Win + R` to open the Run dialog.
|
- Press `Win + R` to open the Run dialog.
|
||||||
- Type `services.msc` and press Enter.
|
- Type `services.msc` and press Enter.
|
||||||
- Locate "Windows Management Instrumentation" in the list.
|
- Locate "Windows Management Instrumentation" in the list.
|
||||||
- Make sure its status is set to "Running" and the startup type is set to "Automatic."
|
- Make sure to set its status to "Running" and the startup type to "Automatic."
|
||||||
|
|
||||||
5. **Check for Security Software Interference:**
|
5. **Check for Security Software Interference:**
|
||||||
Security software can sometimes interfere with WMI operations. Temporarily disable your antivirus or security software and check if the issue persists.
|
Security software can sometimes interfere with WMI operations. Temporarily disable your antivirus or security software and check if the issue persists.
|
||||||
@ -31,9 +31,9 @@ This error code typically indicates an issue related to Windows Management Instr
|
|||||||
|
|
||||||
- Press `Win + X` and select "Event Viewer."
|
- Press `Win + X` and select "Event Viewer."
|
||||||
- Navigate to "Windows Logs" -> "Application" or "System."
|
- Navigate to "Windows Logs" -> "Application" or "System."
|
||||||
- Look for entries with the source related to WMI or the application you're using to mount the ISO.
|
- Look for entries with the source related to WMI or the application use to mount the ISO.
|
||||||
|
|
||||||
7. **ISO File Integrity:**
|
7. **ISO File Integrity:**
|
||||||
Ensure that the ISO file you are trying to mount is not corrupted. Try mounting a different ISO file to see if the issue persists.
|
Ensure that the ISO file you are trying to mount is uncorrupted. Try mounting a different ISO file to see if the issue persists.
|
||||||
|
|
||||||
If the problem persists after trying these steps, additional troubleshooting may be required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you are using to mount the ISO.
|
If the problem persists after trying these steps, additional troubleshooting is required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you use to mount the ISO.
|
6766
winutil.ps1
6766
winutil.ps1
File diff suppressed because it is too large
Load Diff
@ -1,894 +0,0 @@
|
|||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Border Grid.Row="1" Grid.Column="0">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<Label Content="Browsers" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbrave" Content="Brave" ToolTip="Brave is a privacy-focused web browser that blocks ads and trackers, offering a faster and safer browsing experience." Margin="0,0,2,0"/><TextBlock Name="WPFInstallbraveLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.brave.com" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallchrome" Content="Chrome" ToolTip="Google Chrome is a widely used web browser known for its speed, simplicity, and seamless integration with Google services." Margin="0,0,2,0"/><TextBlock Name="WPFInstallchromeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.google.com/chrome/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallchromium" Content="Chromium" ToolTip="Chromium is the open-source project that serves as the foundation for various web browsers, including Chrome." Margin="0,0,2,0"/><TextBlock Name="WPFInstallchromiumLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/Hibbiki/chromium-win64" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalledge" Content="Edge" ToolTip="Microsoft Edge is a modern web browser built on Chromium, offering performance, security, and integration with Microsoft services." Margin="0,0,2,0"/><TextBlock Name="WPFInstalledgeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.microsoft.com/edge" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfalkon" Content="Falkon" ToolTip="Falkon is a lightweight and fast web browser with a focus on user privacy and efficiency." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfalkonLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.falkon.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfirefox" Content="Firefox" ToolTip="Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfirefoxLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.mozilla.org/en-US/firefox/new/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfloorp" Content="Floorp" ToolTip="Floorp is an open-source web browser project that aims to provide a simple and fast browsing experience." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfloorpLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://floorp.app/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalllibrewolf" Content="LibreWolf" ToolTip="LibreWolf is a privacy-focused web browser based on Firefox, with additional privacy and security enhancements." Margin="0,0,2,0"/><TextBlock Name="WPFInstalllibrewolfLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://librewolf-community.gitlab.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmullvadbrowser" Content="Mullvad Browser" ToolTip="Mullvad Browser is a privacy-focused web browser, developed in partnership with the Tor Project." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmullvadbrowserLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://mullvad.net/browser" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallthorium" Content="Thorium Browser AVX2" ToolTip="Browser built for speed over vanilla chromium. It is built with AVX2 optimizations and is the fastest browser on the market." Margin="0,0,2,0"/><TextBlock Name="WPFInstallthoriumLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="http://thorium.rocks/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltor" Content="Tor Browser" ToolTip="Tor Browser is designed for anonymous web browsing, utilizing the Tor network to protect user privacy and security." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltorLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.torproject.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallungoogled" Content="Ungoogled" ToolTip="Ungoogled Chromium is a version of Chromium without Google''s integration for enhanced privacy and control." Margin="0,0,2,0"/><TextBlock Name="WPFInstallungoogledLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/Eloston/ungoogled-chromium" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvivaldi" Content="Vivaldi" ToolTip="Vivaldi is a highly customizable web browser with a focus on user personalization and productivity features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvivaldiLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://vivaldi.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwaterfox" Content="Waterfox" ToolTip="Waterfox is a fast, privacy-focused web browser based on Firefox, designed to preserve user choice and privacy." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwaterfoxLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.waterfox.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Communications" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallchatterino" Content="Chatterino" ToolTip="Chatterino is a chat client for Twitch chat that offers a clean and customizable interface for a better streaming experience." Margin="0,0,2,0"/><TextBlock Name="WPFInstallchatterinoLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.chatterino.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldiscord" Content="Discord" ToolTip="Discord is a popular communication platform with voice, video, and text chat, designed for gamers but used by a wide range of communities." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldiscordLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://discord.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallferdium" Content="Ferdium" ToolTip="Ferdium is a messaging application that combines multiple messaging services into a single app for easy management." Margin="0,0,2,0"/><TextBlock Name="WPFInstallferdiumLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://ferdium.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallguilded" Content="Guilded" ToolTip="Guilded is a communication and productivity platform that includes chat, scheduling, and collaborative tools for gaming and communities." Margin="0,0,2,0"/><TextBlock Name="WPFInstallguildedLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.guilded.gg/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallhexchat" Content="Hexchat" ToolTip="HexChat is a free, open-source IRC (Internet Relay Chat) client with a graphical interface for easy communication." Margin="0,0,2,0"/><TextBlock Name="WPFInstallhexchatLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://hexchat.github.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljami" Content="Jami" ToolTip="Jami is a secure and privacy-focused communication platform that offers audio and video calls, messaging, and file sharing." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljamiLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://jami.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalllinphone" Content="Linphone" ToolTip="Linphone is an open-source voice over IP (VoIPservice that allows for audio and video calls, messaging, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstalllinphoneLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.linphone.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmatrix" Content="Matrix" ToolTip="Matrix is an open network for secure, decentralized communication with features like chat, VoIP, and collaboration tools." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmatrixLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://element.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallqtox" Content="QTox" ToolTip="QTox is a free and open-source messaging app that prioritizes user privacy and security in its design." Margin="0,0,2,0"/><TextBlock Name="WPFInstallqtoxLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://qtox.github.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsession" Content="Session" ToolTip="Session is a private and secure messaging app built on a decentralized network for user privacy and data protection." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsessionLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://getsession.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsignal" Content="Signal" ToolTip="Signal is a privacy-focused messaging app that offers end-to-end encryption for secure and private communication." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsignalLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://signal.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallskype" Content="Skype" ToolTip="Skype is a widely used communication platform offering video calls, voice calls, and instant messaging services." Margin="0,0,2,0"/><TextBlock Name="WPFInstallskypeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.skype.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallslack" Content="Slack" ToolTip="Slack is a collaboration hub that connects teams and facilitates communication through channels, messaging, and file sharing." Margin="0,0,2,0"/><TextBlock Name="WPFInstallslackLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://slack.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallteams" Content="Teams" ToolTip="Microsoft Teams is a collaboration platform that integrates with Office 365 and offers chat, video conferencing, file sharing, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallteamsLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltelegram" Content="Telegram" ToolTip="Telegram is a cloud-based instant messaging app known for its security features, speed, and simplicity." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltelegramLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://telegram.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallthunderbird" Content="Thunderbird" ToolTip="Mozilla Thunderbird is a free and open-source email client, news client, and chat client with advanced features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallthunderbirdLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.thunderbird.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvencord" Content="Vencord" ToolTip="Vencord is a modification for Discord that adds plugins, custom styles, and more!" Margin="0,0,2,0"/><TextBlock Name="WPFInstallvencordLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://vencord.dev/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvesktop" Content="Vesktop" ToolTip="A cross platform electron-based desktop app aiming to give you a snappier Discord experience with Vencord pre-installed." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvesktopLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/Vencord/Vesktop" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallviber" Content="Viber" ToolTip="Viber is a free messaging and calling app with features like group chats, video calls, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallviberLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.viber.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwhatsapp" Content="Whatsapp" ToolTip="WhatsApp Desktop is a desktop version of the popular messaging app, allowing users to send and receive messages, share files, and connect with contacts from their computer." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwhatsappLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.whatsapp.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallzoom" Content="Zoom" ToolTip="Zoom is a popular video conferencing and web conferencing service for online meetings, webinars, and collaborative projects." Margin="0,0,2,0"/><TextBlock Name="WPFInstallzoomLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://zoom.us/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallzulip" Content="Zulip" ToolTip="Zulip is an open-source team collaboration tool with chat streams for productive and organized communication." Margin="0,0,2,0"/><TextBlock Name="WPFInstallzulipLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://zulipchat.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Development" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallanaconda3" Content="Anaconda" ToolTip="Anaconda is a distribution of the Python and R programming languages for scientific computing." Margin="0,0,2,0"/><TextBlock Name="WPFInstallanaconda3Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.anaconda.com/products/distribution" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallclink" Content="Clink" ToolTip="Clink is a powerful Bash-compatible command-line interface (CLIenhancement for Windows, adding features like syntax highlighting and improved history)." Margin="0,0,2,0"/><TextBlock Name="WPFInstallclinkLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://mridgers.github.io/clink/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallDaxStudio" Content="DaxStudio" ToolTip="DAX (Data Analysis eXpressions) Studio is the ultimate tool for executing and analyzing DAX queries against Microsoft Tabular models." Margin="0,0,2,0"/><TextBlock Name="WPFInstallDaxStudioLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://daxstudio.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldockerdesktop" Content="Docker Desktop" ToolTip="Docker Desktop is a powerful tool for containerized application development and deployment." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldockerdesktopLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.docker.com/products/docker-desktop" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgit" Content="Git" ToolTip="Git is a distributed version control system widely used for tracking changes in source code during software development." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgitLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://git-scm.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgitextensions" Content="Git Extensions" ToolTip="Git Extensions is a graphical user interface for Git, providing additional features for easier source code management." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgitextensionsLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://gitextensions.github.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgithubcli" Content="GitHub CLI" ToolTip="GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgithubcliLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://cli.github.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgithubdesktop" Content="GitHub Desktop" ToolTip="GitHub Desktop is a visual Git client that simplifies collaboration on GitHub repositories with an easy-to-use interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgithubdesktopLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://desktop.github.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgolang" Content="GoLang" ToolTip="GoLang (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgolangLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://golang.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallhelix" Content="Helix" ToolTip="Helix is a neovim alternative built in rust." Margin="0,0,2,0"/><TextBlock Name="WPFInstallhelixLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://helix-editor.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljava16" Content="OpenJDK Java 16" ToolTip="OpenJDK Java 16 is the latest version of the open-source Java development kit." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljava16Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://adoptopenjdk.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljava18" Content="Oracle Java 18" ToolTip="Oracle Java 18 is the latest version of the official Java development kit from Oracle." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljava18Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.oracle.com/java/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljava20" Content="Azul Zulu JDK 20" ToolTip="Azul Zulu JDK 20 is a distribution of the OpenJDK with long-term support, performance enhancements, and security updates." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljava20Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.azul.com/downloads/zulu-community/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljava21" Content="Azul Zulu JDK 21" ToolTip="Azul Zulu JDK 21 is a distribution of the OpenJDK with long-term support, performance enhancements, and security updates." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljava21Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.azul.com/downloads/zulu-community/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljava8" Content="OpenJDK Java 8" ToolTip="OpenJDK Java 8 is an open-source implementation of the Java Platform, Standard Edition." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljava8Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://adoptopenjdk.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljetbrains" Content="Jetbrains Toolbox" ToolTip="Jetbrains Toolbox is a platform for easy installation and management of JetBrains developer tools." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljetbrainsLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.jetbrains.com/toolbox/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalllazygit" Content="Lazygit" ToolTip="Simple terminal UI for git commands" Margin="0,0,2,0"/><TextBlock Name="WPFInstalllazygitLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/jesseduffield/lazygit/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallminiconda" Content="Miniconda" ToolTip="Miniconda is a free minimal installer for conda. It is a small bootstrap version of Anaconda that includes only conda, Python, the packages they both depend on, and a small number of other useful packages (like pip, zlib, and a few others)." Margin="0,0,2,0"/><TextBlock Name="WPFInstallminicondaLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://docs.conda.io/projects/miniconda" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallneovim" Content="Neovim" ToolTip="Neovim is a highly extensible text editor and an improvement over the original Vim editor." Margin="0,0,2,0"/><TextBlock Name="WPFInstallneovimLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://neovim.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnodejs" Content="NodeJS" ToolTip="NodeJS is a JavaScript runtime built on Chrome''s V8 JavaScript engine for building server-side and networking applications." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnodejsLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://nodejs.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
<Border Grid.Row="1" Grid.Column="1">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnodejslts" Content="NodeJS LTS" ToolTip="NodeJS LTS provides Long-Term Support releases for stable and reliable server-side JavaScript development." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnodejsltsLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://nodejs.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnvm" Content="Node Version Manager" ToolTip="Node Version Manager (NVM) for Windows allows you to easily switch between multiple Node.js versions." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnvmLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/coreybutler/nvm-windows" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallposh" Content="Oh My Posh (Prompt)" ToolTip="Oh My Posh is a cross-platform prompt theme engine for any shell." Margin="0,0,2,0"/><TextBlock Name="WPFInstallposhLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://ohmyposh.dev/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpostman" Content="Postman" ToolTip="Postman is a collaboration platform for API development that simplifies the process of developing APIs." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpostmanLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.postman.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpyenvwin" Content="Python Version Manager (pyenv-win)" ToolTip="pyenv for Windows is a simple python version management tool. It lets you easily switch between multiple versions of Python." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpyenvwinLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://pyenv-win.github.io/pyenv-win/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpython3" Content="Python3" ToolTip="Python is a versatile programming language used for web development, data analysis, artificial intelligence, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpython3Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.python.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallrustlang" Content="Rust" ToolTip="Rust is a programming language designed for safety and performance, particularly focused on systems programming." Margin="0,0,2,0"/><TextBlock Name="WPFInstallrustlangLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.rust-lang.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallstarship" Content="Starship (Shell Prompt)" ToolTip="Starship is a minimal, fast, and customizable prompt for any shell." Margin="0,0,2,0"/><TextBlock Name="WPFInstallstarshipLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://starship.rs/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsublimemerge" Content="Sublime Merge" ToolTip="Sublime Merge is a Git client with advanced features and a beautiful interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsublimemergeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.sublimemerge.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsublimetext" Content="Sublime Text" ToolTip="Sublime Text is a sophisticated text editor for code, markup, and prose." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsublimetextLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.sublimetext.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltemurin" Content="Eclipse Temurin" ToolTip="Eclipse Temurin is the open source Java SE build based upon OpenJDK." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltemurinLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://adoptium.net/temurin/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallThonny" Content="Thonny Python IDE" ToolTip="Python IDE for beginners." Margin="0,0,2,0"/><TextBlock Name="WPFInstallThonnyLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/thonny/thonny" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallunity" Content="Unity Game Engine" ToolTip="Unity is a powerful game development platform for creating 2D, 3D, augmented reality, and virtual reality games." Margin="0,0,2,0"/><TextBlock Name="WPFInstallunityLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://unity.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvagrant" Content="Vagrant" ToolTip="Vagrant is an open-source tool for building and managing virtualized development environments." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvagrantLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.vagrantup.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvisualstudio" Content="Visual Studio 2022" ToolTip="Visual Studio 2022 is an integrated development environment (IDE) for building, debugging, and deploying applications." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvisualstudioLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://visualstudio.microsoft.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvscode" Content="VS Code" ToolTip="Visual Studio Code is a free, open-source code editor with support for multiple programming languages." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvscodeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://code.visualstudio.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvscodium" Content="VS Codium" ToolTip="VSCodium is a community-driven, freely-licensed binary distribution of Microsoft''s VS Code." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvscodiumLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://vscodium.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwezterm" Content="Wezterm" ToolTip="WezTerm is a powerful cross-platform terminal emulator and multiplexer" Margin="0,0,2,0"/><TextBlock Name="WPFInstallweztermLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://wezfurlong.org/wezterm/index.html" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallxeheditor" Content="HxD Hex Editor" ToolTip="HxD is a free hex editor that allows you to edit, view, search, and analyze binary files." Margin="0,0,2,0"/><TextBlock Name="WPFInstallxeheditorLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://mh-nexus.de/en/hxd/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallyarn" Content="Yarn" ToolTip="Yarn is a fast, reliable, and secure dependency management tool for JavaScript projects." Margin="0,0,2,0"/><TextBlock Name="WPFInstallyarnLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://yarnpkg.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Document" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalladobe" Content="Adobe Reader DC" ToolTip="Adobe Reader DC is a free PDF viewer with essential features for viewing, printing, and annotating PDF documents." Margin="0,0,2,0"/><TextBlock Name="WPFInstalladobeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://acrobat.adobe.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallanki" Content="Anki" ToolTip="Anki is a flashcard application that helps you memorize information with intelligent spaced repetition." Margin="0,0,2,0"/><TextBlock Name="WPFInstallankiLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://apps.ankiweb.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallcalibre" Content="Calibre" ToolTip="Calibre is a powerful and easy-to-use e-book manager, viewer, and converter." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcalibreLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://calibre-ebook.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfoxpdfeditor" Content="Foxit PDF Editor" ToolTip="Foxit PDF Editor is a feature-rich PDF editor and viewer with a familiar ribbon-style interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfoxpdfeditorLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.foxitsoftware.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfoxpdfreader" Content="Foxit PDF Reader" ToolTip="Foxit PDF Reader is a free PDF viewer with a familiar ribbon-style interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfoxpdfreaderLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.foxitsoftware.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljoplin" Content="Joplin (FOSS Notes)" ToolTip="Joplin is an open-source note-taking and to-do application with synchronization capabilities." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljoplinLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://joplinapp.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalllibreoffice" Content="LibreOffice" ToolTip="LibreOffice is a powerful and free office suite, compatible with other major office suites." Margin="0,0,2,0"/><TextBlock Name="WPFInstalllibreofficeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.libreoffice.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalllogseq" Content="Logseq" ToolTip="Logseq is a versatile knowledge management and note-taking application designed for the digital thinker. With a focus on the interconnectedness of ideas, Logseq allows users to seamlessly organize their thoughts through a combination of hierarchical outlines and bi-directional linking. It supports both structured and unstructured content, enabling users to create a personalized knowledge graph that adapts to their evolving ideas and insights." Margin="0,0,2,0"/><TextBlock Name="WPFInstalllogseqLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://logseq.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmasscode" Content="massCode (Snippet Manager)" ToolTip="massCode is a fast and efficient open-source code snippet manager for developers." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmasscodeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://masscode.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnaps2" Content="NAPS2 (Document Scanner)" ToolTip="NAPS2 is a document scanning application that simplifies the process of creating electronic documents." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnaps2Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.naps2.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnotepadplus" Content="Notepad++" ToolTip="Notepad++ is a free, open-source code editor and Notepad replacement with support for multiple languages." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnotepadplusLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://notepad-plus-plus.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallobsidian" Content="Obsidian" ToolTip="Obsidian is a powerful note-taking and knowledge management application." Margin="0,0,2,0"/><TextBlock Name="WPFInstallobsidianLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://obsidian.md/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallokular" Content="Okular" ToolTip="Okular is a versatile document viewer with advanced features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallokularLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://okular.kde.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallonlyoffice" Content="ONLYOffice Desktop" ToolTip="ONLYOffice Desktop is a comprehensive office suite for document editing and collaboration." Margin="0,0,2,0"/><TextBlock Name="WPFInstallonlyofficeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.onlyoffice.com/desktop.aspx" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallopenoffice" Content="Apache OpenOffice" ToolTip="Apache OpenOffice is an open-source office software suite for word processing, spreadsheets, presentations, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallopenofficeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.openoffice.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpdf24creator" Content="PDF24 creator" ToolTip="Free and easy-to-use online/desktop PDF tools that make you more productive" Margin="0,0,2,0"/><TextBlock Name="WPFInstallpdf24creatorLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://tools.pdf24.org/en/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpdfsam" Content="PDFsam Basic" ToolTip="PDFsam Basic is a free and open-source tool for splitting, merging, and rotating PDF files." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpdfsamLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://pdfsam.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsumatra" Content="Sumatra PDF" ToolTip="Sumatra PDF is a lightweight and fast PDF viewer with minimalistic design." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsumatraLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.sumatrapdfreader.org/free-pdf-reader.html" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwinmerge" Content="WinMerge" ToolTip="WinMerge is a visual text file and directory comparison tool for Windows." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwinmergeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://winmerge.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallxournal" Content="Xournal++" ToolTip="Xournal++ is an open-source handwriting notetaking software with PDF annotation capabilities." Margin="0,0,2,0"/><TextBlock Name="WPFInstallxournalLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://xournalpp.github.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallzim" Content="Zim Desktop Wiki" ToolTip="Zim Desktop Wiki is a graphical text editor used to maintain a collection of wiki pages." Margin="0,0,2,0"/><TextBlock Name="WPFInstallzimLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://zim-wiki.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallznote" Content="Znote" ToolTip="Znote is a note-taking application." Margin="0,0,2,0"/><TextBlock Name="WPFInstallznoteLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://znote.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallzotero" Content="Zotero" ToolTip="Zotero is a free, easy-to-use tool to help you collect, organize, cite, and share your research materials." Margin="0,0,2,0"/><TextBlock Name="WPFInstallzoteroLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.zotero.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Games" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallATLauncher" Content="ATLauncher" ToolTip="ATLauncher is a Launcher for Minecraft which integrates multiple different ModPacks to allow you to download and install ModPacks easily and quickly." Margin="0,0,2,0"/><TextBlock Name="WPFInstallATLauncherLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/ATLauncher/ATLauncher" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbluestacks" Content="Bluestacks" ToolTip="Bluestacks is an Android emulator for running mobile apps and games on a PC." Margin="0,0,2,0"/><TextBlock Name="WPFInstallbluestacksLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.bluestacks.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallcemu" Content="Cemu" ToolTip="Cemu is a highly experimental software to emulate Wii U applications on PC." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcemuLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://cemu.info/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallclonehero" Content="Clone Hero" ToolTip="Clone Hero is a free rhythm game, which can be played with any 5 or 6 button guitar controller." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcloneheroLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://clonehero.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalleaapp" Content="EA App" ToolTip="EA App is a platform for accessing and playing Electronic Arts games." Margin="0,0,2,0"/><TextBlock Name="WPFInstalleaappLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.ea.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallemulationstation" Content="Emulation Station" ToolTip="Emulation Station is a graphical and themeable emulator front-end that allows you to access all your favorite games in one place." Margin="0,0,2,0"/><TextBlock Name="WPFInstallemulationstationLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://emulationstation.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallepicgames" Content="Epic Games Launcher" ToolTip="Epic Games Launcher is the client for accessing and playing games from the Epic Games Store." Margin="0,0,2,0"/><TextBlock Name="WPFInstallepicgamesLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.epicgames.com/store/en-US/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgeforcenow" Content="GeForce NOW" ToolTip="GeForce NOW is a cloud gaming service that allows you to play high-quality PC games on your device." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgeforcenowLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.nvidia.com/en-us/geforce-now/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgog" Content="GOG Galaxy" ToolTip="GOG Galaxy is a gaming client that offers DRM-free games, additional content, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgogLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.gog.com/galaxy" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallheroiclauncher" Content="Heroic Games Launcher" ToolTip="Heroic Games Launcher is an open-source alternative game launcher for Epic Games Store." Margin="0,0,2,0"/><TextBlock Name="WPFInstallheroiclauncherLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://heroicgameslauncher.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallitch" Content="Itch.io" ToolTip="Itch.io is a digital distribution platform for indie games and creative projects." Margin="0,0,2,0"/><TextBlock Name="WPFInstallitchLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://itch.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmoonlight" Content="Moonlight/GameStream Client" ToolTip="Moonlight/GameStream Client allows you to stream PC games to other devices over your local network." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmoonlightLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://moonlight-stream.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallplaynite" Content="Playnite" ToolTip="Playnite is an open-source video game library manager with one simple goal: To provide a unified interface for all of your games." Margin="0,0,2,0"/><TextBlock Name="WPFInstallplayniteLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://playnite.link/" />
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
<Border Grid.Row="1" Grid.Column="2">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallprismlauncher" Content="Prism Launcher" ToolTip="Prism Launcher is a game launcher and manager designed to provide a clean and intuitive interface for organizing and launching your games." Margin="0,0,2,0"/><TextBlock Name="WPFInstallprismlauncherLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://prismlauncher.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpsremoteplay" Content="PS Remote Play" ToolTip="PS Remote Play is a free application that allows you to stream games from your PlayStation console to a PC or mobile device." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpsremoteplayLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://remoteplay.dl.playstation.net/remoteplay/lang/gb/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsidequest" Content="SideQuestVR" ToolTip="SideQuestVR is a community-driven platform that enables users to discover, install, and manage virtual reality content on Oculus Quest devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsidequestLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://sidequestvr.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsteam" Content="Steam" ToolTip="Steam is a digital distribution platform for purchasing and playing video games, offering multiplayer gaming, video streaming, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsteamLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://store.steampowered.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsunshine" Content="Sunshine/GameStream Server" ToolTip="Sunshine is a GameStream server that allows you to remotely play PC games on Android devices, offering low-latency streaming." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsunshineLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/LoLBoy25/Sunshine" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallTcNoAccSwitcher" Content="TCNO Account Switcher" ToolTip="A Super-fast account switcher for Steam, Battle.net, Epic Games, Origin, Riot, Ubisoft and many others!" Margin="0,0,2,0"/><TextBlock Name="WPFInstallTcNoAccSwitcherLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/TCNOco/TcNo-Acc-Switcher" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallubisoft" Content="Ubisoft Connect" ToolTip="Ubisoft Connect is Ubisoft''s digital distribution and online gaming service, providing access to Ubisoft''s games and services." Margin="0,0,2,0"/><TextBlock Name="WPFInstallubisoftLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://ubisoftconnect.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvrdesktopstreamer" Content="Virtual Desktop Streamer" ToolTip="Virtual Desktop Streamer is a tool that allows you to stream your desktop screen to VR devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvrdesktopstreamerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.vrdesktop.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallxemu" Content="XEMU" ToolTip="XEMU is an open-source Xbox emulator that allows you to play Xbox games on your PC, aiming for accuracy and compatibility." Margin="0,0,2,0"/><TextBlock Name="WPFInstallxemuLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://xemu.app/" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Microsoft Tools" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldotnet3" Content=".NET Desktop Runtime 3.1" ToolTip=".NET Desktop Runtime 3.1 is a runtime environment required for running applications developed with .NET Core 3.1." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldotnet3Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://dotnet.microsoft.com/download/dotnet/3.1" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldotnet5" Content=".NET Desktop Runtime 5" ToolTip=".NET Desktop Runtime 5 is a runtime environment required for running applications developed with .NET 5." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldotnet5Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://dotnet.microsoft.com/download/dotnet/5.0" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldotnet6" Content=".NET Desktop Runtime 6" ToolTip=".NET Desktop Runtime 6 is a runtime environment required for running applications developed with .NET 6." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldotnet6Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://dotnet.microsoft.com/download/dotnet/6.0" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldotnet7" Content=".NET Desktop Runtime 7" ToolTip=".NET Desktop Runtime 7 is a runtime environment required for running applications developed with .NET 7." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldotnet7Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://dotnet.microsoft.com/download/dotnet/7.0" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldotnet8" Content=".NET Desktop Runtime 8" ToolTip=".NET Desktop Runtime 8 is a runtime environment required for running applications developed with .NET 7." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldotnet8Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://dotnet.microsoft.com/download/dotnet/8.0" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnuget" Content="NuGet" ToolTip="NuGet is a package manager for the .NET framework, enabling developers to manage and share libraries in their .NET applications." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnugetLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.nuget.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallonedrive" Content="OneDrive" ToolTip="OneDrive is a cloud storage service provided by Microsoft, allowing users to store and share files securely across devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallonedriveLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://onedrive.live.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpowerbi" Content="Power BI" ToolTip="Create stunning reports and visualizations with Power BI Desktop. It puts visual analytics at your fingertips with intuitive report authoring. Drag-and-drop to place content exactly where you want it on the flexible and fluid canvas. Quickly discover patterns as you explore a single unified view of linked, interactive visualizations." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpowerbiLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.microsoft.com/en-us/power-platform/products/power-bi/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpowershell" Content="PowerShell" ToolTip="PowerShell is a task automation framework and scripting language designed for system administrators, offering powerful command-line capabilities." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpowershellLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/PowerShell/PowerShell" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpowertoys" Content="Powertoys" ToolTip="PowerToys is a set of utilities for power users to enhance productivity, featuring tools like FancyZones, PowerRename, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpowertoysLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/microsoft/PowerToys" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallprocessmonitor" Content="SysInternals Process Monitor" ToolTip="SysInternals Process Monitor is an advanced monitoring tool that shows real-time file system, registry, and process/thread activity." Margin="0,0,2,0"/><TextBlock Name="WPFInstallprocessmonitorLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://docs.microsoft.com/en-us/sysinternals/downloads/procmon" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltcpview" Content="SysInternals TCPView" ToolTip="SysInternals TCPView is a network monitoring tool that displays a detailed list of all TCP and UDP endpoints on your system." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltcpviewLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallterminal" Content="Windows Terminal" ToolTip="Windows Terminal is a modern, fast, and efficient terminal application for command-line users, supporting multiple tabs, panes, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallterminalLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://aka.ms/terminal" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvc2015_32" Content="Visual C++ 2015-2022 32-bit" ToolTip="Visual C++ 2015-2022 32-bit redistributable package installs runtime components of Visual C++ libraries required to run 32-bit applications." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvc2015_32Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvc2015_64" Content="Visual C++ 2015-2022 64-bit" ToolTip="Visual C++ 2015-2022 64-bit redistributable package installs runtime components of Visual C++ libraries required to run 64-bit applications." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvc2015_64Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Multimedia Tools" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallaimp" Content="AIMP (Music Player)" ToolTip="AIMP is a feature-rich music player with support for various audio formats, playlists, and customizable user interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallaimpLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.aimp.ru/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallaudacity" Content="Audacity" ToolTip="Audacity is a free and open-source audio editing software known for its powerful recording and editing capabilities." Margin="0,0,2,0"/><TextBlock Name="WPFInstallaudacityLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.audacityteam.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallblender" Content="Blender (3D Graphics)" ToolTip="Blender is a powerful open-source 3D creation suite, offering modeling, sculpting, animation, and rendering tools." Margin="0,0,2,0"/><TextBlock Name="WPFInstallblenderLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.blender.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallclementine" Content="Clementine" ToolTip="Clementine is a modern music player and library organizer, supporting various audio formats and online radio services." Margin="0,0,2,0"/><TextBlock Name="WPFInstallclementineLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.clementine-player.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallcopyq" Content="Copyq (Clipboard Manager)" ToolTip="Copyq is a clipboard manager with advanced features, allowing you to store, edit, and retrieve clipboard history." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcopyqLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://copyq.readthedocs.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldarktable" Content="DarkTable" ToolTip="Open-source photo editing tool, offering an intuitive interface, advanced editing capabilities, and a non-destructive workflow for seamless image enhancement." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldarktableLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.darktable.org/install/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldigikam" Content="DigiKam" ToolTip="DigiKam is an advanced open-source photo management software with features for organizing, editing, and sharing photos." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldigikamLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.digikam.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalleartrumpet" Content="Eartrumpet (Audio)" ToolTip="Eartrumpet is an audio control app for Windows, providing a simple and intuitive interface for managing sound settings." Margin="0,0,2,0"/><TextBlock Name="WPFInstalleartrumpetLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://eartrumpet.app/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallffmpeg" Content="Ffmpeg full" ToolTip="FFmpeg is a powerful multimedia processing tool that enables users to convert, edit, and stream audio and video files with a vast range of codecs and formats." Margin="0,0,2,0"/><TextBlock Name="WPFInstallffmpegLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://ffmpeg.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfirealpaca" Content="Fire Alpaca" ToolTip="Fire Alpaca is a free digital painting software that provides a wide range of drawing tools and a user-friendly interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfirealpacaLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://firealpaca.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallflameshot" Content="Flameshot (Screenshots)" ToolTip="Flameshot is a powerful yet simple to use screenshot software, offering annotation and editing features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallflameshotLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://flameshot.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfoobar" Content="Foobar2000 (Music Player)" ToolTip="Foobar2000 is a highly customizable and extensible music player for Windows, known for its modular design and advanced features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfoobarLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.foobar2000.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfreecad" Content="FreeCAD" ToolTip="FreeCAD is a parametric 3D CAD modeler, designed for product design and engineering tasks, with a focus on flexibility and extensibility." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfreecadLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.freecadweb.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgimp" Content="GIMP (Image Editor)" ToolTip="GIMP is a versatile open-source raster graphics editor used for tasks such as photo retouching, image editing, and image composition." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgimpLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.gimp.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgreenshot" Content="Greenshot (Screenshots)" ToolTip="Greenshot is a light-weight screenshot software tool with built-in image editor and customizable capture options." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgreenshotLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://getgreenshot.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallhandbrake" Content="HandBrake" ToolTip="HandBrake is an open-source video transcoder, allowing you to convert video from nearly any format to a selection of widely supported codecs." Margin="0,0,2,0"/><TextBlock Name="WPFInstallhandbrakeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://handbrake.fr/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallimageglass" Content="ImageGlass (Image Viewer)" ToolTip="ImageGlass is a versatile image viewer with support for various image formats and a focus on simplicity and speed." Margin="0,0,2,0"/><TextBlock Name="WPFInstallimageglassLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://imageglass.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallimgburn" Content="ImgBurn" ToolTip="ImgBurn is a lightweight CD, DVD, HD-DVD, and Blu-ray burning application with advanced features for creating and burning disc images." Margin="0,0,2,0"/><TextBlock Name="WPFInstallimgburnLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="http://www.imgburn.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallinkscape" Content="Inkscape" ToolTip="Inkscape is a powerful open-source vector graphics editor, suitable for tasks such as illustrations, icons, logos, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallinkscapeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://inkscape.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallitunes" Content="iTunes" ToolTip="iTunes is a media player, media library, and online radio broadcaster application developed by Apple Inc." Margin="0,0,2,0"/><TextBlock Name="WPFInstallitunesLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.apple.com/itunes/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljellyfinmediaplayer" Content="Jellyfin Media Player" ToolTip="Jellyfin Media Player is a client application for the Jellyfin media server, providing access to your media library." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljellyfinmediaplayerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://jellyfin.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljellyfinserver" Content="Jellyfin Server" ToolTip="Jellyfin Server is an open-source media server software, allowing you to organize and stream your media library." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljellyfinserverLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://jellyfin.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallkdenlive" Content="Kdenlive (Video Editor)" ToolTip="Kdenlive is an open-source video editing software with powerful features for creating and editing professional-quality videos." Margin="0,0,2,0"/><TextBlock Name="WPFInstallkdenliveLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://kdenlive.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallklite" Content="K-Lite Codec Standard" ToolTip="K-Lite Codec Pack Standard is a collection of audio and video codecs and related tools, providing essential components for media playback." Margin="0,0,2,0"/><TextBlock Name="WPFInstallkliteLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.codecguide.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallkodi" Content="Kodi Media Center" ToolTip="Kodi is an open-source media center application that allows you to play and view most videos, music, podcasts, and other digital media files." Margin="0,0,2,0"/><TextBlock Name="WPFInstallkodiLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://kodi.tv/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallkrita" Content="Krita (Image Editor)" ToolTip="Krita is a powerful open-source painting application. It is designed for concept artists, illustrators, matte and texture artists, and the VFX industry." Margin="0,0,2,0"/><TextBlock Name="WPFInstallkritaLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://krita.org/en/download/krita-desktop/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmpc" Content="Media Player Classic (Video Player)" ToolTip="Media Player Classic is a lightweight, open-source media player that supports a wide range of audio and video formats. It includes features like customizable toolbars and support for subtitles." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmpcLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://mpc-hc.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmusicbee" Content="MusicBee (Music Player)" ToolTip="MusicBee is a customizable music player with support for various audio formats. It includes features like an integrated search function, tag editing, and more." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmusicbeeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://getmusicbee.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnglide" Content="nGlide (3dfx compatibility)" ToolTip="nGlide is a 3Dfx Voodoo Glide wrapper. It allows you to play games that use Glide API on modern graphics cards without the need for a 3Dfx Voodoo graphics card." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnglideLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="http://www.zeus-software.com/downloads/nglide" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnomacs" Content="Nomacs (Image viewer)" ToolTip="Nomacs is a free, open-source image viewer that supports multiple platforms. It features basic image editing capabilities and supports a variety of image formats." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnomacsLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/nomacs/nomacs/releases/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallobs" Content="OBS Studio" ToolTip="OBS Studio is a free and open-source software for video recording and live streaming. It supports real-time video/audio capturing and mixing, making it popular among content creators." Margin="0,0,2,0"/><TextBlock Name="WPFInstallobsLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://obsproject.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallopenscad" Content="OpenSCAD" ToolTip="OpenSCAD is a free and open-source script-based 3D CAD modeler. It is especially useful for creating parametric designs for 3D printing." Margin="0,0,2,0"/><TextBlock Name="WPFInstallopenscadLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.openscad.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallPaintdotnet" Content="Paint.net" ToolTip="Paint.net is a free image and photo editing software for Windows. It features an intuitive user interface and supports a wide range of powerful editing tools." Margin="0,0,2,0"/><TextBlock Name="WPFInstallPaintdotnetLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.getpaint.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallplex" Content="Plex Media Server" ToolTip="Plex Media Server is a media server software that allows you to organize and stream your media library. It supports various media formats and offers a wide range of features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallplexLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.plex.tv/your-media/" />
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
<Border Grid.Row="1" Grid.Column="3">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsharex" Content="ShareX (Screenshots)" ToolTip="ShareX is a free and open-source screen capture and file sharing tool. It supports various capture methods and offers advanced features for editing and sharing screenshots." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsharexLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://getsharex.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallstrawberry" Content="Strawberry (Music Player)" ToolTip="Strawberry is an open-source music player that focuses on music collection management and audio quality. It supports various audio formats and features a clean user interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallstrawberryLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/strawberrymusicplayer/strawberry/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallstremio" Content="Stremio" ToolTip="Stremio is a media center application that allows users to organize and stream their favorite movies, TV shows, and video content." Margin="0,0,2,0"/><TextBlock Name="WPFInstallstremioLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.stremio.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltidal" Content="Tidal" ToolTip="Tidal is a music streaming service known for its high-fidelity audio quality and exclusive content. It offers a vast library of songs and curated playlists." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltidalLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://tidal.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvideomass" Content="Videomass" ToolTip="Videomass by GianlucaPernigotto is a cross-platform GUI for FFmpeg, streamlining multimedia file processing with batch conversions and user-friendly features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvideomassLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/jeanslack/Videomass" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvlc" Content="VLC (Video Player)" ToolTip="VLC Media Player is a free and open-source multimedia player that supports a wide range of audio and video formats. It is known for its versatility and cross-platform compatibility." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvlcLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.videolan.org/vlc/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallvoicemeeter" Content="Voicemeeter (Audio)" ToolTip="Voicemeeter is a virtual audio mixer that allows you to manage and enhance audio streams on your computer. It is commonly used for audio recording and streaming purposes." Margin="0,0,2,0"/><TextBlock Name="WPFInstallvoicemeeterLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.vb-audio.com/Voicemeeter/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallytdlp" Content="Yt-dlp" ToolTip="Command-line tool that allows you to download videos from YouTube and other supported sites. It is an improved version of the popular youtube-dl." Margin="0,0,2,0"/><TextBlock Name="WPFInstallytdlpLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/yt-dlp/yt-dlp" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Pro Tools" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalladvancedip" Content="Advanced IP Scanner" ToolTip="Advanced IP Scanner is a fast and easy-to-use network scanner. It is designed to analyze LAN networks and provides information about connected devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstalladvancedipLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.advanced-ip-scanner.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallangryipscanner" Content="Angry IP Scanner" ToolTip="Angry IP Scanner is an open-source and cross-platform network scanner. It is used to scan IP addresses and ports, providing information about network connectivity." Margin="0,0,2,0"/><TextBlock Name="WPFInstallangryipscannerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://angryip.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallefibooteditor" Content="EFI Boot Editor" ToolTip="EFI Boot Editor is a tool for managing the EFI/UEFI boot entries on your system. It allows you to customize the boot configuration of your computer." Margin="0,0,2,0"/><TextBlock Name="WPFInstallefibooteditorLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.easyuefi.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallheidisql" Content="HeidiSQL" ToolTip="HeidiSQL is a powerful and easy-to-use client for MySQL, MariaDB, Microsoft SQL Server, and PostgreSQL databases. It provides tools for database management and development." Margin="0,0,2,0"/><TextBlock Name="WPFInstallheidisqlLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.heidisql.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmremoteng" Content="mRemoteNG" ToolTip="mRemoteNG is a free and open-source remote connections manager. It allows you to view and manage multiple remote sessions in a single interface." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmremotengLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://mremoteng.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnmap" Content="Nmap" ToolTip="Nmap (Network Mapper) is an open-source tool for network exploration and security auditing. It discovers devices on a network and provides information about their ports and services." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnmapLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://nmap.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallOpenVPN" Content="OpenVPN Connect" ToolTip="OpenVPN Connect is an open-source VPN client that allows you to connect securely to a VPN server. It provides a secure and encrypted connection for protecting your online privacy." Margin="0,0,2,0"/><TextBlock Name="WPFInstallOpenVPNLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://openvpn.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallPortmaster" Content="Portmaster" ToolTip="Portmaster is a free and open-source application that puts you back in charge over all your computers network connections." Margin="0,0,2,0"/><TextBlock Name="WPFInstallPortmasterLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/safing/portmaster" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallputty" Content="Putty" ToolTip="PuTTY is a free and open-source terminal emulator, serial console, and network file transfer application. It supports various network protocols such as SSH, Telnet, and SCP." Margin="0,0,2,0"/><TextBlock Name="WPFInstallputtyLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.chiark.greenend.org.uk/~sgtatham/putty/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallrustdesk" Content="Rust Remote Desktop (FOSS)" ToolTip="RustDesk is a free and open-source remote desktop application. It provides a secure way to connect to remote machines and access desktop environments." Margin="0,0,2,0"/><TextBlock Name="WPFInstallrustdeskLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://rustdesk.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsimplewall" Content="SimpleWall" ToolTip="SimpleWall is a free and open-source firewall application for Windows. It allows users to control and manage the inbound and outbound network traffic of applications." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsimplewallLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.henrypp.org/product/simplewall" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallventoy" Content="Ventoy" ToolTip="Ventoy is an open-source tool for creating bootable USB drives. It supports multiple ISO files on a single USB drive, making it a versatile solution for installing operating systems." Margin="0,0,2,0"/><TextBlock Name="WPFInstallventoyLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.ventoy.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwinscp" Content="WinSCP" ToolTip="WinSCP is a popular open-source SFTP, FTP, and SCP client for Windows. It allows secure file transfers between a local and a remote computer." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwinscpLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://winscp.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwireguard" Content="WireGuard" ToolTip="WireGuard is a fast and modern VPN (Virtual Private Network) protocol. It aims to be simpler and more efficient than other VPN protocols, providing secure and reliable connections." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwireguardLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.wireguard.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwireshark" Content="WireShark" ToolTip="Wireshark is a widely-used open-source network protocol analyzer. It allows users to capture and analyze network traffic in real-time, providing detailed insights into network activities." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwiresharkLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.wireshark.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallxpipe" Content="X-Pipe" ToolTip="X-Pipe is an open-source tool for orchestrating containerized applications. It simplifies the deployment and management of containerized services in a distributed environment." Margin="0,0,2,0"/><TextBlock Name="WPFInstallxpipeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://xpipe.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Utilities" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstall1password" Content="1Password" ToolTip="1Password is a password manager that allows you to store and manage your passwords securely." Margin="0,0,2,0"/><TextBlock Name="WPFInstall1passwordLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://1password.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstall7zip" Content="7-Zip" ToolTip="7-Zip is a free and open-source file archiver utility. It supports several compression formats and provides a high compression ratio, making it a popular choice for file compression." Margin="0,0,2,0"/><TextBlock Name="WPFInstall7zipLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.7-zip.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallalacritty" Content="Alacritty Terminal" ToolTip="Alacritty is a fast, cross-platform, and GPU-accelerated terminal emulator. It is designed for performance and aims to be the fastest terminal emulator available." Margin="0,0,2,0"/><TextBlock Name="WPFInstallalacrittyLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/alacritty/alacritty" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallanydesk" Content="AnyDesk" ToolTip="AnyDesk is a remote desktop software that enables users to access and control computers remotely. It is known for its fast connection and low latency." Margin="0,0,2,0"/><TextBlock Name="WPFInstallanydeskLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://anydesk.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallauthy" Content="Authy" ToolTip="Simple and cross-platform 2FA app" Margin="0,0,2,0"/><TextBlock Name="WPFInstallauthyLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://authy.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallautohotkey" Content="AutoHotkey" ToolTip="AutoHotkey is a scripting language for Windows that allows users to create custom automation scripts and macros. It is often used for automating repetitive tasks and customizing keyboard shortcuts." Margin="0,0,2,0"/><TextBlock Name="WPFInstallautohotkeyLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.autohotkey.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbarrier" Content="Barrier" ToolTip="Barrier is an open-source software KVM (keyboard, video, and mouseswitch). It allows users to control multiple computers with a single keyboard and mouse, even if they have different operating systems." Margin="0,0,2,0"/><TextBlock Name="WPFInstallbarrierLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/debauchee/barrier" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbat" Content="Bat (Cat)" ToolTip="Bat is a cat command clone with syntax highlighting. It provides a user-friendly and feature-rich alternative to the traditional cat command for viewing and concatenating files." Margin="0,0,2,0"/><TextBlock Name="WPFInstallbatLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/sharkdp/bat" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbitcomet" Content="BitComet" ToolTip="BitComet is a free and open-source BitTorrent client that supports HTTP/FTP downloads and provides download management features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallbitcometLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.bitcomet.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbitwarden" Content="Bitwarden" ToolTip="Bitwarden is an open-source password management solution. It allows users to store and manage their passwords in a secure and encrypted vault, accessible across multiple devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallbitwardenLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://bitwarden.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbleachbit" Content="BleachBit" ToolTip="Clean Your System and Free Disk Space" Margin="0,0,2,0"/><TextBlock Name="WPFInstallbleachbitLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.bleachbit.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallbulkcrapuninstaller" Content="Bulk Crap Uninstaller" ToolTip="Bulk Crap Uninstaller is a free and open-source uninstaller utility for Windows. It helps users remove unwanted programs and clean up their system by uninstalling multiple applications at once." Margin="0,0,2,0"/><TextBlock Name="WPFInstallbulkcrapuninstallerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.bcuninstaller.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallcarnac" Content="Carnac" ToolTip="Carnac is a keystroke visualizer for Windows. It displays keystrokes in an overlay, making it useful for presentations, tutorials, and live demonstrations." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcarnacLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/Code52/carnac" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallcpuz" Content="CPU-Z" ToolTip="CPU-Z is a system monitoring and diagnostic tool for Windows. It provides detailed information about the computer''s hardware components, including the CPU, memory, and motherboard." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcpuzLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.cpuid.com/softwares/cpu-z.html" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallcrystaldiskinfo" Content="Crystal Disk Info" ToolTip="Crystal Disk Info is a disk health monitoring tool that provides information about the status and performance of hard drives. It helps users anticipate potential issues and monitor drive health." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcrystaldiskinfoLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://crystalmark.info/en/software/crystaldiskinfo/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallcrystaldiskmark" Content="Crystal Disk Mark" ToolTip="Crystal Disk Mark is a disk benchmarking tool that measures the read and write speeds of storage devices. It helps users assess the performance of their hard drives and SSDs." Margin="0,0,2,0"/><TextBlock Name="WPFInstallcrystaldiskmarkLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://crystalmark.info/en/software/crystaldiskmark/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallddu" Content="Display Driver Uninstaller" ToolTip="Display Driver Uninstaller (DDU) is a tool for completely uninstalling graphics drivers from NVIDIA, AMD, and Intel. It is useful for troubleshooting graphics driver-related issues." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldduLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.wagnardsoft.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldeluge" Content="Deluge" ToolTip="Deluge is a free and open-source BitTorrent client. It features a user-friendly interface, support for plugins, and the ability to manage torrents remotely." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldelugeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://deluge-torrent.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldevtoys" Content="Devtoys" ToolTip="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." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldevtoysLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://devtoys.app/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalldmt" Content="Dual Monitor Tools" ToolTip="Dual Monitor Tools (DMT) is a FOSS app that customize handling multiple monitors and even lock the mouse on specific monitor. Useful for full screen games and apps that does not handle well a second monitor or helps the workflow." Margin="0,0,2,0"/><TextBlock Name="WPFInstalldmtLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://dualmonitortool.sourceforge.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallduplicati" Content="Duplicati 2" ToolTip="Duplicati is an open-source backup solution that supports encrypted, compressed, and incremental backups. It is designed to securely store data on cloud storage services." Margin="0,0,2,0"/><TextBlock Name="WPFInstallduplicatiLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.duplicati.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallerrorlookup" Content="Windows Error Code Lookup" ToolTip="ErrorLookup is a tool for looking up Windows error codes and their descriptions." Margin="0,0,2,0"/><TextBlock Name="WPFInstallerrorlookupLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/HenryPP/ErrorLookup" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallesearch" Content="Everything Search" ToolTip="Everything Search is a fast and efficient file search utility for Windows." Margin="0,0,2,0"/><TextBlock Name="WPFInstallesearchLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.voidtools.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallespanso" Content="Espanso" ToolTip="Cross-platform and open-source Text Expander written in Rust" Margin="0,0,2,0"/><TextBlock Name="WPFInstallespansoLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://espanso.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalletcher" Content="Etcher USB Creator" ToolTip="Etcher is a powerful tool for creating bootable USB drives with ease." Margin="0,0,2,0"/><TextBlock Name="WPFInstalletcherLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.balena.io/etcher/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfileconverter" Content="File Converter" ToolTip="File Converter is a very simple tool which allows you to convert and compress one or several file(s) using the context menu in windows explorer." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfileconverterLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://file-converter.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallflux" Content="f.lux Redshift" ToolTip="f.lux Redshift adjusts the color temperature of your screen to reduce eye strain during nighttime use." Margin="0,0,2,0"/><TextBlock Name="WPFInstallfluxLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://justgetflux.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallfzf" Content="Fzf" ToolTip="A command-line fuzzy finder" Margin="0,0,2,0"/><TextBlock Name="WPFInstallfzfLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/junegunn/fzf/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallglaryutilities" Content="Glary Utilities" ToolTip="Glary Utilities is a comprehensive system optimization and maintenance tool for Windows." Margin="0,0,2,0"/><TextBlock Name="WPFInstallglaryutilitiesLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.glarysoft.com/glary-utilities/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgoogledrive" Content="Google Drive" ToolTip="File syncing across devices all tied to your google account" Margin="0,0,2,0"/><TextBlock Name="WPFInstallgoogledriveLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.google.com/drive/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgpuz" Content="GPU-Z" ToolTip="GPU-Z provides detailed information about your graphics card and GPU." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgpuzLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.techpowerup.com/gpuz/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallgsudo" Content="Gsudo" ToolTip="Gsudo is a sudo implementation for Windows, allowing elevated privilege execution." Margin="0,0,2,0"/><TextBlock Name="WPFInstallgsudoLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/gerardog/gsudo" />
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
<Border Grid.Row="1" Grid.Column="4">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallhwinfo" Content="HWInfo" ToolTip="HWInfo provides comprehensive hardware information and diagnostics for Windows." Margin="0,0,2,0"/><TextBlock Name="WPFInstallhwinfoLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.hwinfo.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallintelpresentmon" Content="Intel?? PresentMon" ToolTip="A new gaming performance overlay and telemetry application to monitor and measure your gaming experience." Margin="0,0,2,0"/><TextBlock Name="WPFInstallintelpresentmonLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://game.intel.com/us/stories/intel-presentmon/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalljdownloader" Content="J Download Manager" ToolTip="JDownloader is a feature-rich download manager with support for various file hosting services." Margin="0,0,2,0"/><TextBlock Name="WPFInstalljdownloaderLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="http://jdownloader.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallkdeconnect" Content="KDE Connect" ToolTip="KDE Connect allows seamless integration between your KDE desktop and mobile devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallkdeconnectLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://community.kde.org/KDEConnect" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallkeepass" Content="KeePassXC" ToolTip="KeePassXC is a cross-platform, open-source password manager with strong encryption features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallkeepassLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://keepassxc.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalllivelywallpaper" Content="Lively Wallpaper" ToolTip="Free and open-source software that allows users to set animated desktop wallpapers and screensavers." Margin="0,0,2,0"/><TextBlock Name="WPFInstalllivelywallpaperLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.rocksdanister.com/lively/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalllocalsend" Content="LocalSend" ToolTip="An open source cross-platform alternative to AirDrop." Margin="0,0,2,0"/><TextBlock Name="WPFInstalllocalsendLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://localsend.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmalwarebytes" Content="MalwareBytes" ToolTip="MalwareBytes is an anti-malware software that provides real-time protection against threats." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmalwarebytesLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.malwarebytes.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmeld" Content="Meld" ToolTip="Meld is a visual diff and merge tool for files and directories." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmeldLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://meldmerge.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmonitorian" Content="Monitorian" ToolTip="Monitorian is a utility for adjusting monitor brightness and contrast on Windows." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmonitorianLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.monitorian.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallMotrix" Content="Motrix Download Manager" ToolTip="A full-featured download manager." Margin="0,0,2,0"/><TextBlock Name="WPFInstallMotrixLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/agalwood/Motrix" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallmsiafterburner" Content="MSI Afterburner" ToolTip="MSI Afterburner is a graphics card overclocking utility with advanced features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallmsiafterburnerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.msi.com/Landing/afterburner" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnanazip" Content="NanaZip" ToolTip="NanaZip is a fast and efficient file compression and decompression tool." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnanazipLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/M2Team/NanaZip" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallneofetchwin" Content="Neofetch" ToolTip="Neofetch is a command-line utility for displaying system information in a visually appealing way." Margin="0,0,2,0"/><TextBlock Name="WPFInstallneofetchwinLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/dylanaraps/neofetch" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnextclouddesktop" Content="Nextcloud Desktop" ToolTip="Nextcloud Desktop is the official desktop client for the Nextcloud file synchronization and sharing platform." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnextclouddesktopLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://nextcloud.com/install/#install-clients" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnilesoftShel" Content="Shell (Expanded Context Menu)" ToolTip="Shell is an expanded context menu tool that adds extra functionality and customization options to the Windows context menu." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnilesoftShelLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://nilesoft.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnushell" Content="Nushell" ToolTip="Nushell is a new shell that takes advantage of modern hardware and systems to provide a powerful, expressive, and fast experience." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnushellLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.nushell.sh/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallnvclean" Content="NVCleanstall" ToolTip="NVCleanstall is a tool designed to customize NVIDIA driver installations, allowing advanced users to control more aspects of the installation process." Margin="0,0,2,0"/><TextBlock Name="WPFInstallnvcleanLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.techpowerup.com/nvcleanstall/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallOPAutoClicker" Content="OPAutoClicker" ToolTip="A full-fledged autoclicker with two modes of autoclicking, at your dynamic cursor location or at a prespecified location." Margin="0,0,2,0"/><TextBlock Name="WPFInstallOPAutoClickerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.opautoclicker.com" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallopenhashtab" Content="OpenHashTab" ToolTip="OpenHashTab is a shell extension for conveniently calculating and checking file hashes from file properties." Margin="0,0,2,0"/><TextBlock Name="WPFInstallopenhashtabLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/namazso/OpenHashTab/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallopenrgb" Content="OpenRGB" ToolTip="OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals." Margin="0,0,2,0"/><TextBlock Name="WPFInstallopenrgbLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://openrgb.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallopenshell" Content="Open Shell (Start Menu)" ToolTip="Open Shell is a Windows Start Menu replacement with enhanced functionality and customization options." Margin="0,0,2,0"/><TextBlock Name="WPFInstallopenshellLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/Open-Shell/Open-Shell-Menu" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallOVirtualBox" Content="Oracle VirtualBox" ToolTip="Oracle VirtualBox is a powerful and free open-source virtualization tool for x86 and AMD64/Intel64 architectures." Margin="0,0,2,0"/><TextBlock Name="WPFInstallOVirtualBoxLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.virtualbox.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallownclouddesktop" Content="ownCloud Desktop" ToolTip="ownCloud Desktop is the official desktop client for the ownCloud file synchronization and sharing platform." Margin="0,0,2,0"/><TextBlock Name="WPFInstallownclouddesktopLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://owncloud.com/desktop-app/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallparsec" Content="Parsec" ToolTip="Parsec is a low-latency, high-quality remote desktop sharing application for collaborating and gaming across devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallparsecLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://parsec.app/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpeazip" Content="Peazip" ToolTip="Peazip is a free, open-source file archiver utility that supports multiple archive formats and provides encryption features." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpeazipLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://peazip.github.io/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallpiimager" Content="Raspberry Pi Imager" ToolTip="Raspberry Pi Imager is a utility for writing operating system images to SD cards for Raspberry Pi devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallpiimagerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.raspberrypi.com/software/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallprocesslasso" Content="Process Lasso" ToolTip="Process Lasso is a system optimization and automation tool that improves system responsiveness and stability by adjusting process priorities and CPU affinities." Margin="0,0,2,0"/><TextBlock Name="WPFInstallprocesslassoLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://bitsum.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallprucaslicer" Content="Prusa Slicer" ToolTip="Prusa Slicer is a powerful and easy-to-use slicing software for 3D printing with Prusa 3D printers." Margin="0,0,2,0"/><TextBlock Name="WPFInstallprucaslicerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.prusa3d.com/prusaslicer/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallqbittorrent" Content="qBittorrent" ToolTip="qBittorrent is a free and open-source BitTorrent client that aims to provide a feature-rich and lightweight alternative to other torrent clients." Margin="0,0,2,0"/><TextBlock Name="WPFInstallqbittorrentLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.qbittorrent.org/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallrainmeter" Content="Rainmeter" ToolTip="Rainmeter is a desktop customization tool that allows you to create and share customizable skins for your desktop." Margin="0,0,2,0"/><TextBlock Name="WPFInstallrainmeterLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.rainmeter.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallrevo" Content="RevoUninstaller" ToolTip="RevoUninstaller is an advanced uninstaller tool that helps you remove unwanted software and clean up your system." Margin="0,0,2,0"/><TextBlock Name="WPFInstallrevoLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.revouninstaller.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallripgrep" Content="Ripgrep" ToolTip="Fast and powerful commandline search tool" Margin="0,0,2,0"/><TextBlock Name="WPFInstallripgrepLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/BurntSushi/ripgrep/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallrufus" Content="Rufus Imager" ToolTip="Rufus is a utility that helps format and create bootable USB drives, such as USB keys or pen drives." Margin="0,0,2,0"/><TextBlock Name="WPFInstallrufusLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://rufus.ie/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsamsungmagician" Content="Samsung Magician" ToolTip="Samsung Magician is a utility for managing and optimizing Samsung SSDs." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsamsungmagicianLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://semiconductor.samsung.com/consumer-storage/magician/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsandboxie" Content="Sandboxie Plus" ToolTip="Sandboxie Plus is a sandbox-based isolation program that provides enhanced security by running applications in an isolated environment." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsandboxieLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.sandboxie.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsdio" Content="Snappy Driver Installer Origin" ToolTip="Snappy Driver Installer Origin is a free and open-source driver updater with a vast driver database for Windows." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsdioLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://sourceforge.net/projects/snappy-driver-installer-origin" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallspacedrive" Content="Spacedrive File Manager" ToolTip="Spacedrive is a file manager that offers cloud storage integration and file synchronization across devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallspacedriveLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.spacedrive.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallstartallback" Content="StartAllBack" ToolTip="StartAllBack is a Tool that can be used to edit the Windows appearance by your liking (Taskbar, Start Menu, File Explorer, Control Panel, Context Menu ...)" Margin="0,0,2,0"/><TextBlock Name="WPFInstallstartallbackLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.startallback.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsuperf4" Content="SuperF4" ToolTip="SuperF4 is a utility that allows you to terminate programs instantly by pressing a customizable hotkey." Margin="0,0,2,0"/><TextBlock Name="WPFInstallsuperf4Link" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://stefansundin.github.io/superf4/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsyncthingtray" Content="syncthingtray" ToolTip="Might be the alternative for Synctrayzor. Windows tray utility / filesystem watcher / launcher for Syncthing" Margin="0,0,2,0"/><TextBlock Name="WPFInstallsyncthingtrayLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/Martchus/syncthingtray" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallsynctrayzor" Content="Synctrayzor" ToolTip="Windows tray utility / filesystem watcher / launcher for Syncthing" Margin="0,0,2,0"/><TextBlock Name="WPFInstallsynctrayzorLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/canton7/SyncTrayzor/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltailscale" Content="Tailscale" ToolTip="Tailscale is a secure and easy-to-use VPN solution for connecting your devices and networks." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltailscaleLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://tailscale.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallteamviewer" Content="TeamViewer" ToolTip="TeamViewer is a popular remote access and support software that allows you to connect to and control remote devices." Margin="0,0,2,0"/><TextBlock Name="WPFInstallteamviewerLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.teamviewer.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltotalcommander" Content="Total Commander" ToolTip="Total Commander is a file manager for Windows that provides a powerful and intuitive interface for file management." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltotalcommanderLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.ghisler.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltreesize" Content="TreeSize Free" ToolTip="TreeSize Free is a disk space manager that helps you analyze and visualize the space usage on your drives." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltreesizeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.jam-software.com/treesize_free/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallttaskbar" Content="Translucent Taskbar" ToolTip="Translucent Taskbar is a tool that allows you to customize the transparency of the Windows taskbar." Margin="0,0,2,0"/><TextBlock Name="WPFInstallttaskbarLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/TranslucentTB/TranslucentTB" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstalltwinkletray" Content="Twinkle Tray" ToolTip="Twinkle Tray lets you easily manage the brightness levels of multiple monitors." Margin="0,0,2,0"/><TextBlock Name="WPFInstalltwinkletrayLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://twinkletray.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwindirstat" Content="WinDirStat" ToolTip="WinDirStat is a disk usage statistics viewer and cleanup tool for Windows." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwindirstatLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://windirstat.net/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwindowspchealth" Content="Windows PC Health Check" ToolTip="Windows PC Health Check is a tool that helps you check if your PC meets the system requirements for Windows 11." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwindowspchealthLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwingetui" Content="WingetUI" ToolTip="WingetUI is a graphical user interface for Microsoft''s Windows Package Manager (winget)." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwingetuiLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/marticliment/WingetUI" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwinpaletter" Content="WinPaletter" ToolTip="WinPaletter is a tool for adjusting the color palette of Windows 10, providing customization options for window colors." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwinpaletterLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/Abdelrhman-AK/WinPaletter" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwinrar" Content="WinRAR" ToolTip="WinRAR is a powerful archive manager that allows you to create, manage, and extract compressed files." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwinrarLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://www.win-rar.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwisetoys" Content="WiseToys" ToolTip="WiseToys is a set of utilities and tools designed to enhance and optimize your Windows experience." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwisetoysLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://toys.wisecleaner.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallwiztree" Content="WizTree" ToolTip="WizTree is a fast disk space analyzer that helps you quickly find the files and folders consuming the most space on your hard drive." Margin="0,0,2,0"/><TextBlock Name="WPFInstallwiztreeLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://wiztreefree.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallxdm" Content="Xtreme Download Manager" ToolTip="Xtreme Download Manager is an advanced download manager with support for various protocols and browsers.*Browser integration deprecated by google store. No official release.*" Margin="0,0,2,0"/><TextBlock Name="WPFInstallxdmLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/subhra74/xdm" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallzerotierone" Content="ZeroTier One" ToolTip="ZeroTier One is a software-defined networking tool that allows you to create secure and scalable networks." Margin="0,0,2,0"/><TextBlock Name="WPFInstallzerotieroneLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://zerotier.com/" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<CheckBox Name="WPFInstallzoxide" Content="Zoxide" ToolTip="Zoxide is a fast and efficient directory changer (cd) that helps you navigate your file system with ease." Margin="0,0,2,0"/><TextBlock Name="WPFInstallzoxideLink" Style="{StaticResource HoverTextBlockStyle}" Text="(?)" ToolTip="https://github.com/ajeetdsouza/zoxide" />
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Border Grid.Row="1" Grid.Column="0">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<Label Content="Features" FontSize="16"/>
|
|
||||||
<CheckBox Name="WPFFeaturesdotnet" Content="All .Net Framework (2,3,4)" Margin="5,0" ToolTip=".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications."/>
|
|
||||||
<CheckBox Name="WPFFeatureshyperv" Content="HyperV Virtualization" Margin="5,0" ToolTip="Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines."/>
|
|
||||||
<CheckBox Name="WPFFeatureslegacymedia" Content="Legacy Media (WMP, DirectPlay)" Margin="5,0" ToolTip="Enables legacy programs from previous versions of windows"/>
|
|
||||||
<CheckBox Name="WPFFeaturenfs" Content="NFS - Network File System" Margin="5,0" ToolTip="Network File System (NFS) is a mechanism for storing files on a network."/>
|
|
||||||
<CheckBox Name="WPFFeatureEnableSearchSuggestions" Content="Enable Search Box Web Suggestions in Registry(explorer restart)" Margin="5,0" ToolTip="Enables web suggestions when searching using Windows Search."/>
|
|
||||||
<CheckBox Name="WPFFeatureDisableSearchSuggestions" Content="Disable Search Box Web Suggestions in Registry(explorer restart)" Margin="5,0" ToolTip="Disables web suggestions when searching using Windows Search."/>
|
|
||||||
<CheckBox Name="WPFFeatureRegBackup" Content="Enable Daily Registry Backup Task 12.30am" Margin="5,0" ToolTip="Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803."/>
|
|
||||||
<CheckBox Name="WPFFeatureEnableLegacyRecovery" Content="Enable Legacy F8 Boot Recovery" Margin="5,0" ToolTip="Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes."/>
|
|
||||||
<CheckBox Name="WPFFeatureDisableLegacyRecovery" Content="Disable Legacy F8 Boot Recovery" Margin="5,0" ToolTip="Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes."/>
|
|
||||||
<CheckBox Name="WPFFeaturewsl" Content="Windows Subsystem for Linux" Margin="5,0" ToolTip="Windows Subsystem for Linux is an optional feature of Windows that allows Linux programs to run natively on Windows without the need for a separate virtual machine or dual booting."/>
|
|
||||||
<CheckBox Name="WPFFeaturesandbox" Content="Windows Sandbox" Margin="5,0" ToolTip="Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation."/>
|
|
||||||
<Button Name="WPFFeatureInstall" Content="Install Features" HorizontalAlignment = "Left" Width="150" Margin="5" Padding="20,5" />
|
|
||||||
<Label Content="Fixes" FontSize="16"/>
|
|
||||||
<Button Name="WPFPanelAutologin" Content="Set Up Autologin" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFFixesUpdate" Content="Reset Windows Update" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFFixesNetwork" Content="Reset Network" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFPanelDISM" Content="System Corruption Scan" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFFixesWinget" Content="WinGet Reinstall" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFRunAdobeCCCleanerTool" Content="Remove Adobe Creative Cloud" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
<Border Grid.Row="1" Grid.Column="1">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<Label Content="Legacy Windows Panels" FontSize="16"/>
|
|
||||||
<Button Name="WPFPanelcontrol" Content="Control Panel" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFPanelnetwork" Content="Network Connections" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFPanelpower" Content="Power Panel" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFPanelregion" Content="Region" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFPanelsound" Content="Sound Settings" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFPanelsystem" Content="System Properties" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFPaneluser" Content="User Accounts" HorizontalAlignment = "Left" Width="200" Margin="5" Padding="20,5" />
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
|
|
@ -1,94 +0,0 @@
|
|||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Border Grid.Row="1" Grid.Column="0">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<Label Content="Essential Tweaks" FontSize="16"/>
|
|
||||||
<CheckBox Name="WPFTweaksRestorePoint" Content="Create Restore Point" IsChecked="True" Margin="5,0" ToolTip="Creates a restore point at runtime in case a revert is needed from WinUtil modifications"/>
|
|
||||||
<CheckBox Name="WPFTweaksOO" Content="Run OO Shutup" Margin="5,0" ToolTip="Runs OO Shutup from https://www.oo-software.com/en/shutup10"/>
|
|
||||||
<CheckBox Name="WPFTweaksTele" Content="Disable Telemetry" Margin="5,0" ToolTip="Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser."/>
|
|
||||||
<CheckBox Name="WPFTweaksWifi" Content="Disable Wifi-Sense" Margin="5,0" ToolTip="Wifi Sense is a spying service that phones home all nearby scanned wifi networks and your current geo location."/>
|
|
||||||
<CheckBox Name="WPFTweaksAH" Content="Disable Activity History" Margin="5,0" ToolTip="This erases recent docs, clipboard, and run history."/>
|
|
||||||
<CheckBox Name="WPFTweaksDeleteTempFiles" Content="Delete Temporary Files" Margin="5,0" ToolTip="Erases TEMP Folders"/>
|
|
||||||
<CheckBox Name="WPFTweaksDiskCleanup" Content="Run Disk Cleanup" Margin="5,0" ToolTip="Runs Disk Cleanup on Drive C: and removes old Windows Updates."/>
|
|
||||||
<CheckBox Name="WPFTweaksLoc" Content="Disable Location Tracking" Margin="5,0" ToolTip="Disables Location Tracking...DUH!"/>
|
|
||||||
<CheckBox Name="WPFTweaksHome" Content="Disable Homegroup" Margin="5,0" ToolTip="Disables HomeGroup - HomeGroup is a password-protected home networking service that lets you share your stuff with other PCs that are currently running and connected to your network."/>
|
|
||||||
<CheckBox Name="WPFTweaksStorage" Content="Disable Storage Sense" Margin="5,0" ToolTip="Storage Sense deletes temp files automatically."/>
|
|
||||||
<CheckBox Name="WPFTweaksHiber" Content="Disable Hibernation" Margin="5,0" ToolTip="Hibernation is really meant for laptops as it saves what''s in memory before turning the pc off. It really should never be used, but some people are lazy and rely on it. Don''t be like Bob. Bob likes hibernation."/>
|
|
||||||
<CheckBox Name="WPFTweaksDVR" Content="Disable GameDVR" Margin="5,0" ToolTip="GameDVR is a Windows App that is a dependency for some Store Games. I''ve never met someone that likes it, but it''s there for the XBOX crowd."/>
|
|
||||||
<CheckBox Name="WPFTweaksTeredo" Content="Disable Teredo" Margin="5,0" ToolTip="Teredo network tunneling is a ipv6 feature that can cause additional latency."/>
|
|
||||||
<CheckBox Name="WPFTweaksServices" Content="Set Services to Manual" Margin="5,0" ToolTip="Turns a bunch of system services to manual that don''t need to be running all the time. This is pretty harmless as if the service is needed, it will simply start on demand."/>
|
|
||||||
<Label Content="Advanced Tweaks - CAUTION" FontSize="16"/>
|
|
||||||
<CheckBox Name="WPFTweaksDisplay" Content="Set Display for Performance" Margin="5,0" ToolTip="Sets the system preferences to performance. You can do this manually with sysdm.cpl as well."/>
|
|
||||||
<CheckBox Name="WPFTweaksUTC" Content="Set Time to UTC (Dual Boot)" Margin="5,0" ToolTip="Essential for computers that are dual booting. Fixes the time sync with Linux Systems."/>
|
|
||||||
<CheckBox Name="WPFTweaksDisableUAC" Content="Disable UAC" Margin="5,0" ToolTip="Disables User Account Control. Only recommended for Expert Users."/>
|
|
||||||
<CheckBox Name="WPFTweaksDisableNotifications" Content="Disable Notification Tray/Calendar" Margin="5,0" ToolTip="Disables all Notifications INCLUDING Calendar"/>
|
|
||||||
<CheckBox Name="WPFTweaksDeBloat" Content="Remove ALL MS Store Apps - NOT RECOMMENDED" Margin="5,0" ToolTip="USE WITH CAUTION!!!!! This will remove ALL Microsoft store apps other than the essentials to make winget work. Games installed by MS Store ARE INCLUDED!"/>
|
|
||||||
<CheckBox Name="WPFTweaksRemoveEdge" Content="Remove Microsoft Edge - NOT RECOMMENDED" Margin="5,0" ToolTip="Removes MS Edge when it gets reinstalled by updates."/>
|
|
||||||
<CheckBox Name="WPFTweaksRemoveOnedrive" Content="Remove OneDrive" Margin="5,0" ToolTip="Copies OneDrive files to Default Home Folders and Uninstalls it."/>
|
|
||||||
<CheckBox Name="WPFTweaksRightClickMenu" Content="Set Classic Right-Click Menu " Margin="5,0" ToolTip="Great Windows 11 tweak to bring back good context menus when right clicking things in explorer."/>
|
|
||||||
<CheckBox Name="WPFTweaksEnableipsix" Content="Enable IPv6" Margin="5,0" ToolTip="Enables IPv6."/>
|
|
||||||
<CheckBox Name="WPFTweaksDisableipsix" Content="Disable IPv6" Margin="5,0" ToolTip="Disables IPv6."/>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
|
|
||||||
<Label Content="DNS" HorizontalAlignment="Left" VerticalAlignment="Center"/>
|
|
||||||
<ComboBox Name="WPFchangedns" Height="32" Width="186" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5,5">
|
|
||||||
<ComboBoxItem IsSelected="True" Content="Default"/>
|
|
||||||
<ComboBoxItem Content="DHCP"/>
|
|
||||||
<ComboBoxItem Content="Google"/>
|
|
||||||
<ComboBoxItem Content="Cloudflare"/>
|
|
||||||
<ComboBoxItem Content="Cloudflare_Malware"/>
|
|
||||||
<ComboBoxItem Content="Cloudflare_Malware_Adult"/>
|
|
||||||
<ComboBoxItem Content="Level3"/>
|
|
||||||
<ComboBoxItem Content="Open_DNS"/>
|
|
||||||
<ComboBoxItem Content="Quad9"/>
|
|
||||||
</ComboBox>
|
|
||||||
</StackPanel><Button Name="WPFTweaksbutton" Content="Run Tweaks" HorizontalAlignment = "Left" Width="160" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFUndoall" Content="Undo Selected Tweaks" HorizontalAlignment = "Left" Width="160" Margin="5" Padding="20,5" />
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
<Border Grid.Row="1" Grid.Column="1">
|
|
||||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
|
||||||
<Label Content="Customize Preferences" FontSize="16"/>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="Dark Theme" Style="{StaticResource labelfortweaks}" ToolTip="Enable/Disable Dark Mode." />
|
|
||||||
<CheckBox Name="WPFToggleDarkMode" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="Bing Search in Start Menu" Style="{StaticResource labelfortweaks}" ToolTip="If enable then includes web search results from Bing in your Start Menu search." />
|
|
||||||
<CheckBox Name="WPFToggleBingSearch" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="NumLock on Startup" Style="{StaticResource labelfortweaks}" ToolTip="Toggle the Num Lock key state when your computer starts." />
|
|
||||||
<CheckBox Name="WPFToggleNumLock" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="Verbose Logon Messages" Style="{StaticResource labelfortweaks}" ToolTip="Show detailed messages during the login process for troubleshooting and diagnostics." />
|
|
||||||
<CheckBox Name="WPFToggleVerboseLogon" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="Show File Extensions" Style="{StaticResource labelfortweaks}" ToolTip="If enabled then File extensions (e.g., .txt, .jpg) are visible." />
|
|
||||||
<CheckBox Name="WPFToggleShowExt" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="Snap Assist Flyout" Style="{StaticResource labelfortweaks}" ToolTip="If enabled then Snap preview is disabled when maximize button is hovered." />
|
|
||||||
<CheckBox Name="WPFToggleSnapFlyout" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="Mouse Acceleration" Style="{StaticResource labelfortweaks}" ToolTip="If Enabled then Cursor movement is affected by the speed of your physical mouse movements." />
|
|
||||||
<CheckBox Name="WPFToggleMouseAcceleration" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
|
||||||
<Label Content="Sticky Keys" Style="{StaticResource labelfortweaks}" ToolTip="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." />
|
|
||||||
<CheckBox Name="WPFToggleStickyKeys" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
<Label Content="Performance Plans" FontSize="16"/>
|
|
||||||
<Button Name="WPFAddUltPerf" Content="Add and Activate Ultimate Performance Profile" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
<Button Name="WPFRemoveUltPerf" Content="Remove Ultimate Performance Profile" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
<Label Content="Shortcuts" FontSize="16"/>
|
|
||||||
<Button Name="WPFWinUtilShortcut" Content="Create WinUtil Shortcut" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
|
||||||
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
|||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Background="{MainBackgroundColor}"
|
Background="{MainBackgroundColor}"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
|
UseLayoutRounding="True"
|
||||||
WindowStyle="None"
|
WindowStyle="None"
|
||||||
Title="Chris Titus Tech's Windows Utility" Height="800" Width="1280">
|
Title="Chris Titus Tech's Windows Utility" Height="800" Width="1280">
|
||||||
<WindowChrome.WindowChrome>
|
<WindowChrome.WindowChrome>
|
||||||
@ -294,7 +295,7 @@
|
|||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="CheckBox">
|
<ControlTemplate TargetType="CheckBox">
|
||||||
<Grid Background="{TemplateBinding Background}">
|
<Grid Background="{TemplateBinding Background}" Margin="6,0,0,0">
|
||||||
<BulletDecorator Background="Transparent">
|
<BulletDecorator Background="Transparent">
|
||||||
<BulletDecorator.Bullet>
|
<BulletDecorator.Bullet>
|
||||||
<Grid Width="16" Height="16">
|
<Grid Width="16" Height="16">
|
||||||
@ -402,86 +403,93 @@
|
|||||||
</Setter.Value>
|
</Setter.Value>
|
||||||
</Setter>
|
</Setter>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style x:Key="ColorfulToggleSwitchStyle" TargetType="{x:Type CheckBox}">
|
<Style x:Key="ColorfulToggleSwitchStyle" TargetType="{x:Type CheckBox}">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="{x:Type ToggleButton}">
|
<ControlTemplate TargetType="{x:Type ToggleButton}">
|
||||||
<Grid x:Name="toggleSwitch">
|
<Grid x:Name="toggleSwitch">
|
||||||
<Border x:Name="Border" CornerRadius="10"
|
|
||||||
Background="#FFFFFFFF"
|
<Grid.ColumnDefinitions>
|
||||||
Width="70" Height="25">
|
<ColumnDefinition Width="Auto"/>
|
||||||
<Border.Effect>
|
<ColumnDefinition Width="Auto"/>
|
||||||
<DropShadowEffect ShadowDepth="0.5" Direction="0" Opacity="0.3" />
|
</Grid.ColumnDefinitions>
|
||||||
</Border.Effect>
|
<TextBlock Grid.Column="0" x:Name="txtToggle" VerticalAlignment="Center" FontWeight="DemiBold" Foreground="{MainForegroundColor}" FontSize="12">
|
||||||
<Ellipse x:Name="Ellipse" Fill="#FFFFFFFF" Stretch="Uniform"
|
<TextBlock.Style>
|
||||||
Margin="2 2 2 1"
|
<Style TargetType="TextBlock">
|
||||||
Stroke="Gray" StrokeThickness="0.2"
|
<Setter Property="Text" Value="Off"/>
|
||||||
HorizontalAlignment="Left" Width="22">
|
<Setter Property="Margin" Value="4,0,4,0"/>
|
||||||
<Ellipse.Effect>
|
<Style.Triggers>
|
||||||
<DropShadowEffect BlurRadius="10" ShadowDepth="1" Opacity="0.3" Direction="260" />
|
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked}" Value="True">
|
||||||
</Ellipse.Effect>
|
<Setter Property="Text" Value="On"/>
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</TextBlock.Style>
|
||||||
|
</TextBlock>
|
||||||
|
|
||||||
|
<Border Grid.Column="1" x:Name="Border" CornerRadius="8"
|
||||||
|
BorderThickness="1"
|
||||||
|
Width="34" Height="17">
|
||||||
|
<Ellipse x:Name="Ellipse" Fill="{MainForegroundColor}" Stretch="Uniform"
|
||||||
|
Margin="2,2,2,1"
|
||||||
|
HorizontalAlignment="Left" Width="12">
|
||||||
</Ellipse>
|
</Ellipse>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<TextBlock x:Name="txtDisable" Text="Disable " VerticalAlignment="Center" FontWeight="DemiBold" HorizontalAlignment="Right" Foreground="White" FontSize="12" />
|
|
||||||
<TextBlock x:Name="txtEnable" Text=" Enable" VerticalAlignment="Center" FontWeight="DemiBold" Foreground="White" HorizontalAlignment="Left" FontSize="12" />
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<ControlTemplate.Triggers>
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter TargetName="Border" Property="BorderBrush" Value="{MainForegroundColor}" />
|
||||||
|
<Setter TargetName="Border" Property="Background" Value="{LinkHoverForegroundColor}"/>
|
||||||
|
<Setter Property="Cursor" Value="Hand" />
|
||||||
|
<Setter Property="Panel.ZIndex" Value="1000"/>
|
||||||
|
</Trigger>
|
||||||
<Trigger Property="ToggleButton.IsChecked" Value="False">
|
<Trigger Property="ToggleButton.IsChecked" Value="False">
|
||||||
<Setter TargetName="Border" Property="Background" Value="#C2283B" />
|
<Setter TargetName="Border" Property="Background" Value="{MainBackgroundColor}" />
|
||||||
<Setter TargetName="Ellipse" Property="Margin" Value="2 2 2 1" />
|
<Setter TargetName="Border" Property="BorderBrush" Value="{MainForegroundColor}" />
|
||||||
<Setter TargetName="txtDisable" Property="Opacity" Value="1.0" />
|
<Setter TargetName="Ellipse" Property="Fill" Value="{MainForegroundColor}" />
|
||||||
<Setter TargetName="txtEnable" Property="Opacity" Value="0.0" />
|
|
||||||
</Trigger>
|
</Trigger>
|
||||||
|
|
||||||
<Trigger Property="ToggleButton.IsChecked" Value="True">
|
<Trigger Property="ToggleButton.IsChecked" Value="True">
|
||||||
|
<Setter TargetName="Border" Property="Background" Value="{MainBackgroundColor}" />
|
||||||
|
<Setter TargetName="Border" Property="BorderBrush" Value="{MainForegroundColor}" />
|
||||||
|
<Setter TargetName="Ellipse" Property="Fill" Value="{MainForegroundColor}" />
|
||||||
|
|
||||||
<Trigger.EnterActions>
|
<Trigger.EnterActions>
|
||||||
<BeginStoryboard>
|
<BeginStoryboard>
|
||||||
<Storyboard>
|
<Storyboard>
|
||||||
<ColorAnimation Storyboard.TargetName="Border"
|
<ColorAnimation Storyboard.TargetName="Border"
|
||||||
Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
|
Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
|
||||||
To="#34A543" Duration="0:0:0.1" />
|
To="{ToggleButtonOnColor}" Duration="0:0:0.1" />
|
||||||
|
<ColorAnimation Storyboard.TargetName="Border"
|
||||||
|
Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
|
||||||
|
To="{ToggleButtonOnColor}" Duration="0:0:0.1" />
|
||||||
|
|
||||||
|
<ColorAnimation Storyboard.TargetName="Ellipse"
|
||||||
|
Storyboard.TargetProperty="(Fill).(SolidColorBrush.Color)"
|
||||||
|
To="White" Duration="0:0:0.1" />
|
||||||
<ThicknessAnimation Storyboard.TargetName="Ellipse"
|
<ThicknessAnimation Storyboard.TargetName="Ellipse"
|
||||||
Storyboard.TargetProperty="Margin"
|
Storyboard.TargetProperty="Margin"
|
||||||
To="46 2 2 1" Duration="0:0:0.1" />
|
To="18,2,2,2" Duration="0:0:0.1" />
|
||||||
|
|
||||||
<DoubleAnimation Storyboard.TargetName="txtDisable"
|
|
||||||
Storyboard.TargetProperty="(TextBlock.Opacity)"
|
|
||||||
To="0.0" Duration="0:0:0:0.1" />
|
|
||||||
|
|
||||||
<DoubleAnimation Storyboard.TargetName="txtEnable"
|
|
||||||
Storyboard.TargetProperty="(TextBlock.Opacity)"
|
|
||||||
To="1.0" Duration="0:0:0:0.1" />
|
|
||||||
</Storyboard>
|
</Storyboard>
|
||||||
</BeginStoryboard>
|
</BeginStoryboard>
|
||||||
</Trigger.EnterActions>
|
</Trigger.EnterActions>
|
||||||
|
|
||||||
<!-- Some out fading -->
|
|
||||||
<Trigger.ExitActions>
|
<Trigger.ExitActions>
|
||||||
<BeginStoryboard>
|
<BeginStoryboard>
|
||||||
<Storyboard>
|
<Storyboard>
|
||||||
<ColorAnimation Storyboard.TargetName="Border"
|
<ColorAnimation Storyboard.TargetName="Border"
|
||||||
Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
|
Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
|
||||||
To="#C2283B" Duration="0:0:0.1" />
|
To="{MainBackgroundColor}" Duration="0:0:0.1" />
|
||||||
|
|
||||||
<ThicknessAnimation Storyboard.TargetName="Ellipse"
|
<ThicknessAnimation Storyboard.TargetName="Ellipse"
|
||||||
Storyboard.TargetProperty="Margin"
|
Storyboard.TargetProperty="Margin"
|
||||||
To="2 2 2 1" Duration="0:0:0.1" />
|
To="2,2,2,1" Duration="0:0:0.1" />
|
||||||
|
|
||||||
<DoubleAnimation Storyboard.TargetName="txtDisable"
|
|
||||||
Storyboard.TargetProperty="(TextBlock.Opacity)"
|
|
||||||
To="1.0" Duration="0:0:0:0.1" />
|
|
||||||
|
|
||||||
<DoubleAnimation Storyboard.TargetName="txtEnable"
|
|
||||||
Storyboard.TargetProperty="(TextBlock.Opacity)"
|
|
||||||
To="0.0" Duration="0:0:0:0.1" />
|
|
||||||
</Storyboard>
|
</Storyboard>
|
||||||
</BeginStoryboard>
|
</BeginStoryboard>
|
||||||
</Trigger.ExitActions>
|
</Trigger.ExitActions>
|
||||||
|
|
||||||
<Setter Property="Foreground" Value="{DynamicResource IdealForegroundColorBrush}" />
|
|
||||||
</Trigger>
|
</Trigger>
|
||||||
</ControlTemplate.Triggers>
|
</ControlTemplate.Triggers>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
@ -489,6 +497,7 @@
|
|||||||
</Setter>
|
</Setter>
|
||||||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style x:Key="labelfortweaks" TargetType="{x:Type Label}">
|
<Style x:Key="labelfortweaks" TargetType="{x:Type Label}">
|
||||||
<Setter Property="Foreground" Value="{MainForegroundColor}" />
|
<Setter Property="Foreground" Value="{MainForegroundColor}" />
|
||||||
<Setter Property="Background" Value="{MainBackgroundColor}" />
|
<Setter Property="Background" Value="{MainBackgroundColor}" />
|
||||||
@ -690,7 +699,7 @@
|
|||||||
<RowDefinition Height="0.95*"/>
|
<RowDefinition Height="0.95*"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.ColumnSpan="3" Margin="5">
|
<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 Selected" Margin="2" />
|
<Button Name="WPFinstall" Content=" Install/Upgrade Selected" Margin="2" />
|
||||||
<Button Name="WPFInstallUpgrade" Content=" Upgrade All" Margin="2"/>
|
<Button Name="WPFInstallUpgrade" Content=" Upgrade All" Margin="2"/>
|
||||||
<Button Name="WPFuninstall" Content=" Uninstall Selection" Margin="2"/>
|
<Button Name="WPFuninstall" Content=" Uninstall Selection" Margin="2"/>
|
||||||
<Button Name="WPFGetInstalled" Content=" Get Installed" Margin="2"/>
|
<Button Name="WPFGetInstalled" Content=" Get Installed" Margin="2"/>
|
||||||
@ -717,8 +726,7 @@
|
|||||||
{{InstallPanel_tweaks}}
|
{{InstallPanel_tweaks}}
|
||||||
<StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="10">
|
<StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="10">
|
||||||
<Label Content="Recommended Selections:" FontSize="14" VerticalAlignment="Center"/>
|
<Label Content="Recommended Selections:" FontSize="14" VerticalAlignment="Center"/>
|
||||||
<Button Name="WPFdesktop" Content=" Desktop " Margin="1"/>
|
<Button Name="WPFstandard" Content=" Standard " Margin="1"/>
|
||||||
<Button Name="WPFlaptop" Content=" Laptop " Margin="1"/>
|
|
||||||
<Button Name="WPFminimal" Content=" Minimal " Margin="1"/>
|
<Button Name="WPFminimal" Content=" Minimal " Margin="1"/>
|
||||||
<Button Name="WPFclear" Content=" Clear " Margin="1"/>
|
<Button Name="WPFclear" Content=" Clear " Margin="1"/>
|
||||||
<Button Name="WPFGetInstalledTweaks" Content=" Get Installed " Margin="1"/>
|
<Button Name="WPFGetInstalledTweaks" Content=" Get Installed " Margin="1"/>
|
||||||
@ -794,20 +802,29 @@
|
|||||||
</TextBlock>
|
</TextBlock>
|
||||||
<CheckBox x:Name="WPFMicrowinISOScratchDir" Content="Use ISO directory for ScratchDir " IsChecked="False" Margin="1"
|
<CheckBox x:Name="WPFMicrowinISOScratchDir" Content="Use ISO directory for ScratchDir " IsChecked="False" Margin="1"
|
||||||
ToolTip="Use ISO directory for ScratchDir " />
|
ToolTip="Use ISO directory for ScratchDir " />
|
||||||
|
<Grid>
|
||||||
<Button Name="MicrowinScratchDirBT" Margin="2" Padding="1">
|
<Grid.ColumnDefinitions>
|
||||||
<Button.Content>
|
<ColumnDefinition Width="*" /> <!-- Takes the remaining space -->
|
||||||
|
<ColumnDefinition Width="30" /> <!-- Fixed width for Button -->
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
<TextBox Name="MicrowinScratchDirBox" Background="Transparent" BorderBrush="{MainForegroundColor}"
|
<TextBox Name="MicrowinScratchDirBox" Background="Transparent" BorderBrush="{MainForegroundColor}"
|
||||||
Text="Scratch" Padding="0"
|
Text="Scratch"
|
||||||
ToolTip="Alt Path For Scratch Directory" BorderThickness="1"
|
Margin="2"
|
||||||
Margin="0,0,0,3" HorizontalAlignment="Left"
|
|
||||||
IsReadOnly="False"
|
IsReadOnly="False"
|
||||||
Height="Auto"
|
ToolTip="Alt Path For Scratch Directory"
|
||||||
Width="110"
|
Grid.Column="0"
|
||||||
Foreground="{ButtonForegroundColor}"
|
VerticalAlignment="Center"
|
||||||
/>
|
Foreground="{LabelboxForegroundColor}">
|
||||||
|
</TextBox>
|
||||||
|
<Button Name="MicrowinScratchDirBT"
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="2"
|
||||||
|
Padding="1" VerticalAlignment="Center">
|
||||||
|
<Button.Content>
|
||||||
|
...
|
||||||
</Button.Content>
|
</Button.Content>
|
||||||
</Button>
|
</Button>
|
||||||
|
</Grid>
|
||||||
<TextBox Name="MicrowinFinalIsoLocation" Background="Transparent" BorderBrush="{MainForegroundColor}"
|
<TextBox Name="MicrowinFinalIsoLocation" Background="Transparent" BorderBrush="{MainForegroundColor}"
|
||||||
Text="ISO location will be printed here"
|
Text="ISO location will be printed here"
|
||||||
Margin="2"
|
Margin="2"
|
||||||
@ -842,6 +859,7 @@
|
|||||||
Foreground="{LabelboxForegroundColor}"
|
Foreground="{LabelboxForegroundColor}"
|
||||||
ToolTip="Path to unpacked drivers all sys and inf files for devices that need drivers"
|
ToolTip="Path to unpacked drivers all sys and inf files for devices that need drivers"
|
||||||
/>
|
/>
|
||||||
|
<CheckBox Name="MicrowinImportDrivers" Content="Import drivers from current system" Margin="5,0" IsChecked="False" ToolTip="Export all third-party drivers from your system and inject them to the MicroWin image"/>
|
||||||
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<CheckBox Name="WPFMicrowinCopyToUsb" Content="Copy to Ventoy" Margin="5,0" IsChecked="False" ToolTip="Copy to USB disk with a label Ventoy"/>
|
<CheckBox Name="WPFMicrowinCopyToUsb" Content="Copy to Ventoy" Margin="5,0" IsChecked="False" ToolTip="Copy to USB disk with a label Ventoy"/>
|
||||||
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
|
Reference in New Issue
Block a user