mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-07-06 13:13:50 -05:00
Compare commits
110 Commits
24.06.29
...
e363c90c9f
Author | SHA1 | Date | |
---|---|---|---|
e363c90c9f | |||
d5dcd0c2ef | |||
71948aeffe | |||
32a0a78356 | |||
96d3208fe4 | |||
68e11d2a8f | |||
467dc72f4f | |||
0ec64eaf74 | |||
ef81968a85 | |||
d1d3851ab5 | |||
6993ae72cd | |||
3fcb9b5e9a | |||
a424768ff8 | |||
391682277c | |||
34a49e6a8c | |||
c5ed17a917 | |||
d055e1fdc4 | |||
896637be55 | |||
2dd32ae200 | |||
06251e7015 | |||
5c4d791c8e | |||
00af474f09 | |||
18d2be336f | |||
a35cd6101a | |||
8a10e59aa8 | |||
dfcf4cb8eb | |||
8eaa1a8802 | |||
9d874a6e2f | |||
83ea3eb82c | |||
e2de347bcb | |||
48bbadc402 | |||
066d4840c7 | |||
4a52bb7298 | |||
462e2a9731 | |||
8dc8f18a8f | |||
cc0eb205d4 | |||
e85a8449e2 | |||
d5fa8b54b9 | |||
38d659b4d8 | |||
be4fbacb21 | |||
00ffad0e41 | |||
e0b7551eaa | |||
2568d5fe8b | |||
ed56090a69 | |||
8260b62d22 | |||
236e0b4da2 | |||
10ab0eda03 | |||
2cc9474aa3 | |||
2b0efd3eb3 | |||
0981509cfb | |||
e6a0e299b9 | |||
dd70526731 | |||
2c5544c4c7 | |||
9850ffd2c2 | |||
3c2b236d0a | |||
f130fc6c49 | |||
15eb12af11 | |||
eec184ee81 | |||
794d390a7f | |||
d893c0512a | |||
a0db6cfdce | |||
4993407f2c | |||
c78a48d670 | |||
800a5085fc | |||
6e201305c9 | |||
84fe67f032 | |||
5c65f32fdf | |||
7d8ff5e0f9 | |||
cc02facb11 | |||
1c80af1aca | |||
bcc5b691d6 | |||
963bfe9358 | |||
eb205771fb | |||
c4a9ab098b | |||
457e8cdcdc | |||
d43d09872d | |||
39e89f1627 | |||
5648115256 | |||
565f9c310c | |||
8eb51560d8 | |||
81fd3d1683 | |||
63f45ed446 | |||
386808d0e0 | |||
f1c52d957b | |||
b28a79d177 | |||
b0bd06be96 | |||
665f31d91a | |||
11b64623e9 | |||
d1eedd0d74 | |||
8fccb8b749 | |||
7065e2ac38 | |||
60db65b5a6 | |||
ad6dcca76e | |||
17faeef0d6 | |||
14b3c859ab | |||
841de3699f | |||
fc93ec16d6 | |||
b3fc21d7e4 | |||
fc70053789 | |||
3719b015d4 | |||
94abf3fd66 | |||
f5f506b9c5 | |||
bdf9c8378c | |||
e4bf33e3ab | |||
f398f9a63b | |||
959c85f57b | |||
f8c3fda0e7 | |||
9e3faced80 | |||
2eb9e4ea0a | |||
376a2205cd |
9
.gitattributes
vendored
9
.gitattributes
vendored
@ -1,12 +1,3 @@
|
||||
* text=auto
|
||||
|
||||
*.ps1 text eol=crlf
|
||||
*.json text eol=crlf
|
||||
*.cfg text eol=crlf
|
||||
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
|
||||
config/* diff
|
||||
config/applications.json diff
|
||||
*.json diff
|
101
.github/workflows/close-old-issues.yaml
vendored
101
.github/workflows/close-old-issues.yaml
vendored
@ -4,32 +4,91 @@ on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *' # Run daily
|
||||
workflow_dispatch: # This line enables manual triggering
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write # Ensure necessary permissions for issues
|
||||
pull-requests: none
|
||||
contents: none
|
||||
|
||||
steps:
|
||||
- name: Close inactive issues
|
||||
uses: actions/stale@v9.0.0
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
# A list of labels to reference when looking through issues,
|
||||
# and only when one (or even more) of these labels are found..
|
||||
# then skip this issue, and never try to stale and/or close it.
|
||||
exempt-issue-labels: "Keep Issue Open"
|
||||
# Split it into two weeks, after one week the issue will be marked as stale,
|
||||
# after another week have pasted without any update.. the issue will then be closed.
|
||||
days-before-issue-stale: 7
|
||||
days-before-issue-close: 7
|
||||
# NEVER mark PRs as Stale or Close + this workflow should never have write permissions on PRs, EVER!
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
# Sends a message for both the Stale and Close events of an issue.
|
||||
stale-issue-message: "This issue was marked as stale because it has been inactive for 7 days"
|
||||
close-issue-message: "This issue was closed because it has been inactive for 7 days since it was marked as stale"
|
||||
# Make this field equal true if you want to test your configuration if it works correctly or not
|
||||
debug-only: false
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const octokit = github;
|
||||
|
||||
// Get the repository owner and name
|
||||
const { owner, repo } = context.repo;
|
||||
|
||||
// Define the inactivity period (14 days)
|
||||
const inactivityPeriod = new Date();
|
||||
inactivityPeriod.setDate(inactivityPeriod.getDate() - 14);
|
||||
|
||||
const labelKeepIssue = 'Keep Issue Open';
|
||||
|
||||
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) {
|
||||
let closeIssue = true;
|
||||
|
||||
// Get all Labels of issue, and compared each label with the labelKeepIssue const variable
|
||||
try {
|
||||
const respondIssueLabels = await octokit.request("GET /repos/{owner}/{repo}/issues/{issue_number}/labels", {
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: issue.number
|
||||
});
|
||||
const labels = respondIssueLabels.data;
|
||||
|
||||
for (let i = 0; i < labels.length; i++) {
|
||||
const label = labels[i]
|
||||
if (label.name === labelKeepIssue) {
|
||||
console.log(`Issue #${issue.number} will not be closed`);
|
||||
closeIssue = false;
|
||||
break; // Break from the loop, no need to check the remaining Labels.
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error while Fetching Labels for Issue #${issue.number}, Error: ${error}`);
|
||||
}
|
||||
|
||||
if (!closeIssue) {
|
||||
continue; // Skip the next bit of code
|
||||
}
|
||||
|
||||
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}`);
|
||||
}
|
||||
|
25
.github/workflows/compile.yaml
vendored
25
.github/workflows/compile.yaml
vendored
@ -1,25 +0,0 @@
|
||||
name: Compile
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- test*
|
||||
workflow_dispatch: # Manual trigger added
|
||||
|
||||
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()
|
46
.github/workflows/pre-release.yaml
vendored
46
.github/workflows/pre-release.yaml
vendored
@ -1,46 +0,0 @@
|
||||
name: Pre-Release WinUtil
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Compile"] #Ensure Compile winget.ps1 is done
|
||||
types:
|
||||
- completed
|
||||
workflow_dispatch: # Manual trigger added
|
||||
|
||||
jobs:
|
||||
build-runspace:
|
||||
runs-on: windows-latest
|
||||
outputs:
|
||||
version: ${{ steps.extract_version.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract Version from winutil.ps1
|
||||
id: extract_version
|
||||
run: |
|
||||
$version = ''
|
||||
Get-Content ./winutil.ps1 -TotalCount 30 | ForEach-Object {
|
||||
if ($_ -match 'Version\s*:\s*(\d{2}\.\d{2}\.\d{2})') {
|
||||
$version = $matches[1]
|
||||
echo "version=$version" >> $GITHUB_ENV
|
||||
echo "::set-output name=version::$version"
|
||||
break
|
||||
}
|
||||
}
|
||||
if (-not $version) {
|
||||
Write-Error "Version not found in winutil.ps1"
|
||||
exit 1
|
||||
}
|
||||
shell: pwsh
|
||||
|
||||
- name: Create and Upload Release
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ steps.extract_version.outputs.version }}
|
||||
name: Pre-Release ${{ steps.extract_version.outputs.version }}
|
||||
files: ./winutil.ps1
|
||||
prerelease: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
50
.github/workflows/release.yaml
vendored
50
.github/workflows/release.yaml
vendored
@ -1,42 +1,24 @@
|
||||
name: Release WinUtil
|
||||
name: Update Branch
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger added
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- test*
|
||||
|
||||
jobs:
|
||||
build-runspace:
|
||||
runs-on: windows-latest
|
||||
outputs:
|
||||
version: ${{ steps.extract_version.outputs.version }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract Version from winutil.ps1
|
||||
id: extract_version
|
||||
run: |
|
||||
$version = ''
|
||||
Get-Content ./winutil.ps1 -TotalCount 30 | ForEach-Object {
|
||||
if ($_ -match 'Version\s*:\s*(\d{2}\.\d{2}\.\d{2})') {
|
||||
$version = $matches[1]
|
||||
echo "version=$version" >> $GITHUB_ENV
|
||||
echo "::set-output name=version::$version"
|
||||
break
|
||||
}
|
||||
}
|
||||
if (-not $version) {
|
||||
Write-Error "Version not found in winutil.ps1"
|
||||
exit 1
|
||||
}
|
||||
shell: pwsh
|
||||
|
||||
- name: Create and Upload Release
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
tag_name: ${{ steps.extract_version.outputs.version }}
|
||||
name: Release ${{ steps.extract_version.outputs.version }}
|
||||
files: ./winutil.ps1
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
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()
|
125
Compile.ps1
125
Compile.ps1
@ -1,57 +1,30 @@
|
||||
param (
|
||||
[switch]$Debug,
|
||||
[switch]$Run
|
||||
)
|
||||
$OFS = "`r`n"
|
||||
$scriptname = "winutil.ps1"
|
||||
|
||||
# Variable to sync between runspaces
|
||||
$sync = [Hashtable]::Synchronized(@{})
|
||||
$sync.PSScriptRoot = $PSScriptRoot
|
||||
$sync.configs = @{}
|
||||
|
||||
function Update-Progress {
|
||||
param (
|
||||
[Parameter(Mandatory, position=0)]
|
||||
[string]$StatusMessage,
|
||||
|
||||
[Parameter(Mandatory, position=1)]
|
||||
[ValidateRange(0,100)]
|
||||
[int]$Percent,
|
||||
|
||||
[Parameter(position=2)]
|
||||
[string]$Activity = "Compiling"
|
||||
)
|
||||
|
||||
Write-Progress -Activity $Activity -Status $StatusMessage -PercentComplete $Percent
|
||||
if (Test-Path -Path "$($scriptname)")
|
||||
{
|
||||
Remove-Item -Force "$($scriptname)"
|
||||
}
|
||||
|
||||
$header = @"
|
||||
Write-output '
|
||||
################################################################################################################
|
||||
### ###
|
||||
### 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.
|
||||
Update-Progress "Pre-req: Allocating Memory" 0
|
||||
$script_content = [System.Collections.Generic.List[string]]::new()
|
||||
|
||||
Update-Progress "Adding: Header" 5
|
||||
$script_content.Add($header)
|
||||
|
||||
Update-Progress "Adding: Version" 10
|
||||
$script_content.Add($(Get-Content .\scripts\start.ps1).replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)"))
|
||||
|
||||
Update-Progress "Adding: Functions" 20
|
||||
Get-ChildItem .\functions -Recurse -File | ForEach-Object {
|
||||
$script_content.Add($(Get-Content $psitem.FullName))
|
||||
Get-Content $psitem.FullName | Out-File ./$scriptname -Append -Encoding ascii
|
||||
}
|
||||
Update-Progress "Adding: Config *.json" 40
|
||||
Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object {
|
||||
|
||||
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
|
||||
@ -62,39 +35,28 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-
|
||||
$_.Replace('=}','').Replace('@{','').Replace(' ','')
|
||||
}
|
||||
|
||||
# Note:
|
||||
# Avoid using HTML Entity Codes, for example '”' (stands for "Right Double Quotation Mark"),
|
||||
# Use **HTML decimal/hex codes instead**, as using HTML Entity Codes will result in XML parse Error when running the compiled script.
|
||||
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('>','>').replace('—','—')
|
||||
$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('>','>').replace('—','—')
|
||||
$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
|
||||
}
|
||||
}
|
||||
|
||||
# Add 'WPFInstall' as a prefix to every entry-name in 'applications.json' file
|
||||
if ($psitem.Name -eq "applications.json") {
|
||||
for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) {
|
||||
$appEntryName = $firstLevelJsonList[$i]
|
||||
$appEntryContent = $jsonAsObject.$appEntryName
|
||||
# Remove the entire app entry, so we could add it later with a different name
|
||||
$jsonAsObject.PSObject.Properties.Remove($appEntryName)
|
||||
# Add the app entry, but with a different name (WPFInstall + The App Entry Name)
|
||||
$jsonAsObject | Add-Member -MemberType NoteProperty -Name "WPFInstall$appEntryName" -Value $appEntryContent
|
||||
}
|
||||
}
|
||||
|
||||
# The replace at the end is required, as without it the output of 'converto-json' will be somewhat weird for Multiline Strings
|
||||
# Most Notably is the scripts in some json files, making it harder for users who want to review these scripts, which're found in the compiled script
|
||||
# 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, make=ing 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-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" | Out-File ./$scriptname -Append -Encoding ascii
|
||||
}
|
||||
Get-ChildItem .\config | Where-Object {$PSItem.Extension -eq ".cfg"} | ForEach-Object {
|
||||
Write-output "`$sync.configs.$($psitem.BaseName) = '$(Get-Content $PSItem.FullName)'" | Out-File ./$scriptname -Append -Encoding ascii
|
||||
}
|
||||
|
||||
$xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''")
|
||||
@ -102,44 +64,29 @@ $xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''")
|
||||
# Dot-source the Get-TabXaml function
|
||||
. .\functions\private\Get-TabXaml.ps1
|
||||
|
||||
Update-Progress "Building: Xaml " 75
|
||||
$appXamlContent = Get-TabXaml "applications" 5
|
||||
$tweaksXamlContent = Get-TabXaml "tweaks"
|
||||
$featuresXamlContent = Get-TabXaml "feature"
|
||||
## Xaml Manipulation
|
||||
$tabColumns = Get-TabXaml "applications" 5
|
||||
$tabColumns | Out-File -FilePath ".\xaml\inputApp.xaml" -Encoding ascii
|
||||
$tabColumns = Get-TabXaml "tweaks"
|
||||
$tabColumns | Out-File -FilePath ".\xaml\inputTweaks.xaml" -Encoding ascii
|
||||
$tabColumns = Get-TabXaml "feature"
|
||||
$tabColumns | Out-File -FilePath ".\xaml\inputFeatures.xaml" -Encoding ascii
|
||||
|
||||
# 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
|
||||
|
||||
Update-Progress "Adding: Xaml " 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'"))
|
||||
Write-output "`$inputXML = '$xaml'" | Out-File ./$scriptname -Append -Encoding ascii
|
||||
|
||||
$script_content.Add($(Get-Content .\scripts\main.ps1))
|
||||
|
||||
if ($Debug){
|
||||
Update-Progress "Writing debug files" 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 {
|
||||
Update-Progress "Removing temporary files" 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
|
||||
|
||||
if ($run){
|
||||
try {
|
||||
Start-Process -FilePath "pwsh" -ArgumentList ".\$scriptname"
|
||||
}
|
||||
catch {
|
||||
Start-Process -FilePath "powershell" -ArgumentList ".\$scriptname"
|
||||
}
|
||||
|
||||
}
|
||||
Get-Content .\scripts\main.ps1 | Out-File ./$scriptname -Append -Encoding ascii
|
||||
|
@ -13,9 +13,14 @@
|
||||
```
|
||||
Get-Service -Name "XboxGipSvc" | Set-Service -StartupType Automatic
|
||||
```
|
||||
|
||||
- Windows Insider Builds not installing: Telemetry needs to be enabled
|
||||
```
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0
|
||||
```
|
||||
- Winget requires interaction on first run: Manually type 'y' and 'enter' into the PowerShell console to continue
|
||||
- (Windows 11) Quick Settings no longer works: Launch the Script and click 'Enable Action Center'
|
||||
- Explorer no longer launches: Go to Control Panel, File Explorer Options, Change the 'Open File Explorer to' option to 'This PC'.
|
||||
- Script doesn't run/PowerShell crashes:
|
||||
1. Press Windows Key+X and select 'PowerShell (Admin)' (Windows 10) or 'Windows Terminal (Admin)' (Windows 11)
|
||||
2. Run:
|
||||
|
26
README.md
26
README.md
@ -1,7 +1,5 @@
|
||||
# Chris Titus Tech's Windows Utility
|
||||
|
||||
[](https://github.com/ChrisTitusTech/winutil/releases/latest)
|
||||
|
||||
This utility is a compilation of Windows tasks I perform on each Windows system I use. It is meant to streamline *installs*, debloat with *tweaks*, troubleshoot with *config*, and fix Windows *updates*. I am extremely picky about any contributions to keep this project clean and efficient.
|
||||
|
||||

|
||||
@ -24,19 +22,25 @@ Winutil must be run in Admin mode because it performs system-wide tweaks. To ach
|
||||
|
||||
#### Simple way
|
||||
|
||||
```ps1
|
||||
irm "https://christitus.com/win" | iex
|
||||
```
|
||||
Courtesy of the issue: [#144](/../../issues/144)
|
||||
irm https://christitus.com/win | iex
|
||||
```
|
||||
Courtesy of the issue raised at: [#144](/../../issues/144)
|
||||
|
||||
If this site is not reachable from your country, please try running it directly from GitHub.
|
||||
```ps1
|
||||
irm "https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1" | iex
|
||||
or by executing:
|
||||
```
|
||||
iwr -useb https://christitus.com/win | iex
|
||||
```
|
||||
|
||||
if for some reason this site is not reachable from your country please try running it directly from github
|
||||
|
||||
```
|
||||
irm https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/winutil.ps1 | iex
|
||||
```
|
||||
|
||||
#### Automation
|
||||
|
||||
Some features are available through automation. This allows you to save your config file pass it to Winutil walk away and come back to a finished system. Here is how you can set it up currently with Winutil >24.01.15
|
||||
Some features are avaliable through automation. This allows you to save your config file pass it to Winutil walk away and come back to a finished system. Here is how you can set it up currently with Winutil >24.01.15
|
||||
|
||||
1. On the Install Tab, click "Get Installed", this will get all installed apps **supported by Winutil** on the system
|
||||

|
||||
@ -124,9 +128,7 @@ If you encounter any challenges or problems with the script, I kindly request th
|
||||
|
||||
## Contribute Code
|
||||
|
||||
Pull Requests are now handled directly on the MAIN branch. This was done since we can now select specific releases to launch via releases in GitHub.
|
||||
|
||||
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!
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
|
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 -
|
227
config/ooshutup10_recommended.cfg
Normal file
227
config/ooshutup10_recommended.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,11 +1,11 @@
|
||||
{
|
||||
"Standard": [
|
||||
"WPFTweaksAH",
|
||||
"WPFTweaksConsumerFeatures",
|
||||
"WPFTweaksDVR",
|
||||
"WPFTweaksHiber",
|
||||
"WPFTweaksHome",
|
||||
"WPFTweaksLoc",
|
||||
"WPFTweaksOO",
|
||||
"WPFTweaksServices",
|
||||
"WPFTweaksStorage",
|
||||
"WPFTweaksTele",
|
||||
@ -17,8 +17,8 @@
|
||||
"WPFTweaksTeredo"
|
||||
],
|
||||
"Minimal": [
|
||||
"WPFTweaksConsumerFeatures",
|
||||
"WPFTweaksHome",
|
||||
"WPFTweaksOO",
|
||||
"WPFTweaksServices",
|
||||
"WPFTweaksTele"
|
||||
]
|
||||
|
@ -58,7 +58,7 @@
|
||||
"powercfg.exe /hibernate on"
|
||||
]
|
||||
},
|
||||
"WPFTweaksLaptopHibernation": {
|
||||
"WPFToggleTweaksLaptopHybernation": {
|
||||
"Content": "Set Hibernation as default (good for laptops)",
|
||||
"Description": "Most modern laptops have connected stadby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399",
|
||||
"category": "Essential Tweaks",
|
||||
@ -1223,6 +1223,11 @@
|
||||
"StartupType": "Automatic",
|
||||
"OriginalType": "Automatic"
|
||||
},
|
||||
{
|
||||
"Name": "WwanSvc",
|
||||
"StartupType": "Manual",
|
||||
"OriginalType": "Manual"
|
||||
},
|
||||
{
|
||||
"Name": "XblAuthManager",
|
||||
"StartupType": "Manual",
|
||||
@ -1580,22 +1585,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"WPFTweaksConsumerFeatures":{
|
||||
"Content": "Disable ConsumerFeatures",
|
||||
"Description": "Windows 10 will not automatically install any games, third-party apps, or application links from the Windows Store for the signed-in user. Some default Apps will be inaccessible (eg. Phone Link)",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a003_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
|
||||
"OriginalValue": "0",
|
||||
"Name": "DisableWindowsConsumerFeatures",
|
||||
"Value": "1",
|
||||
"Type": "DWord"
|
||||
}
|
||||
]
|
||||
},
|
||||
"WPFTweaksTele": {
|
||||
"Content": "Disable Telemetry",
|
||||
"Description": "Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.",
|
||||
@ -1754,6 +1743,13 @@
|
||||
"Value": "0",
|
||||
"Type": "DWord"
|
||||
},
|
||||
{
|
||||
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent",
|
||||
"OriginalValue": "0",
|
||||
"Name": "DisableWindowsConsumerFeatures",
|
||||
"Value": "1",
|
||||
"Type": "DWord"
|
||||
},
|
||||
{
|
||||
"Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules",
|
||||
"OriginalValue": "0",
|
||||
@ -2236,7 +2232,7 @@
|
||||
"Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Checked": "False",
|
||||
"Checked": "True",
|
||||
"Order": "a001_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
@ -2317,6 +2313,20 @@
|
||||
"Invoke-WPFTweakPS7 -action \"PS5\""
|
||||
]
|
||||
},
|
||||
"WPFTweaksOO": {
|
||||
"Content": "Run OO Shutup",
|
||||
"Description": "Runs OO Shutup and applies the recommended Tweaks. https://www.oo-software.com/en/shutup10",
|
||||
"category": "Essential Tweaks",
|
||||
"panel": "1",
|
||||
"Order": "a009_",
|
||||
"ToolTip": "Runs OO Shutup and applies the recommended Tweaks https://www.oo-software.com/en/shutup10",
|
||||
"InvokeScript": [
|
||||
"Invoke-WPFOOSU -action \"recommended\""
|
||||
],
|
||||
"UndoScript": [
|
||||
"Invoke-WPFOOSU -action \"undo\""
|
||||
]
|
||||
},
|
||||
"WPFTweaksStorage": {
|
||||
"Content": "Disable Storage Sense",
|
||||
"Description": "Storage Sense deletes temp files automatically.",
|
||||
@ -2332,15 +2342,17 @@
|
||||
},
|
||||
"WPFTweaksRemoveEdge": {
|
||||
"Content": "Remove Microsoft Edge - NOT RECOMMENDED",
|
||||
"Description": "Removes MS Edge when it gets reinstalled by updates. Credit: AveYo",
|
||||
"Description": "Removes MS Edge when it gets reinstalled by updates.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a029_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
#:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat
|
||||
Invoke-WebRequest -Uri \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -OutFile \"$ENV:TEMP\\edgeremoval.bat\"
|
||||
|
||||
curl.exe -s \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -o $ENV:temp\\edgeremoval.bat
|
||||
Start-Process $ENV:temp\\edgeremoval.bat
|
||||
|
||||
"
|
||||
],
|
||||
"UndoScript": [
|
||||
@ -2382,7 +2394,7 @@
|
||||
],
|
||||
"InvokeScript": [
|
||||
"
|
||||
Write-Host \"Remove Copilot\"
|
||||
Write-Host \"Remove Popilot\"
|
||||
dism /online /remove-package /package-name:Microsoft.Windows.Copilot
|
||||
"
|
||||
],
|
||||
@ -2393,97 +2405,33 @@
|
||||
"
|
||||
]
|
||||
},
|
||||
"WPFTweaksDisableLMS1": {
|
||||
"Content": "Disable Intel MM (vPro LMS)",
|
||||
"Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a026_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
Write-Host \"Kill LMS\"
|
||||
$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 \"LMS vPro needs to be redownloaded from intel.com\"
|
||||
|
||||
"
|
||||
]
|
||||
},
|
||||
"WPFTweaksRemoveOnedrive": {
|
||||
"Content": "Remove OneDrive",
|
||||
"Description": "Moves OneDrive files to Default Home Folders and Uninstalls it.",
|
||||
"Description": "Copies OneDrive files to Default Home Folders and Uninstalls it.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a030_",
|
||||
"InvokeScript": [
|
||||
"
|
||||
$OneDrivePath = $($env:OneDrive)
|
||||
Write-Host \"Removing OneDrive\"
|
||||
$regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\"
|
||||
if (Test-Path $regPath){
|
||||
$OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\"
|
||||
$OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \")
|
||||
Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait
|
||||
}
|
||||
else{
|
||||
Write-Host \"Onedrive dosn't seem to be installed anymore\" -ForegroundColor Red
|
||||
return
|
||||
}
|
||||
# Check if OneDrive got Uninstalled
|
||||
if (-not (Test-Path $regPath)){
|
||||
Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\"
|
||||
Start-Process -FilePath powershell -ArgumentList \"robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\\' /mov /e /xj\" -NoNewWindow -Wait
|
||||
|
||||
Write-Host \"Kill OneDrive process\"
|
||||
taskkill.exe /F /IM \"OneDrive.exe\"
|
||||
taskkill.exe /F /IM \"explorer.exe\"
|
||||
|
||||
Write-Host \"Copy all OneDrive to Root UserProfile\"
|
||||
Start-Process -FilePath powershell -ArgumentList \"robocopy '$($env:USERPROFILE.TrimEnd())\\OneDrive' '$($env:USERPROFILE.TrimEnd())\\' /e /xj\" -NoNewWindow -Wait
|
||||
|
||||
Write-Host \"Remove OneDrive\"
|
||||
Start-Process -FilePath winget -ArgumentList \"uninstall -e --purge --force --silent Microsoft.OneDrive \" -NoNewWindow -Wait
|
||||
|
||||
Write-Host \"Removing OneDrive leftovers\"
|
||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\Microsoft\\OneDrive\"
|
||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:localappdata\\OneDrive\"
|
||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:programdata\\Microsoft OneDrive\"
|
||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:systemdrive\\OneDriveTemp\"
|
||||
reg delete \"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\" -f
|
||||
# check if directory is empty before removing:
|
||||
If ((Get-ChildItem \"$OneDrivePath\" -Recurse | Measure-Object).Count -eq 0) {
|
||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$OneDrivePath\"
|
||||
If ((Get-ChildItem \"$env:userprofile\\OneDrive\" -Recurse | Measure-Object).Count -eq 0) {
|
||||
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue \"$env:userprofile\\OneDrive\"
|
||||
}
|
||||
|
||||
Write-Host \"Remove Onedrive from explorer sidebar\"
|
||||
@ -2526,17 +2474,11 @@
|
||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{F42EE2D3-909F-4907-8871-4C22FC0BF756}\" -Value \"$env:userprofile\\Documents\" -Type ExpandString
|
||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\" -Name \"{0DDD015D-B06C-45D5-8C4C-F59713854639}\" -Value \"$env:userprofile\\Pictures\" -Type ExpandString
|
||||
Write-Host \"Restarting explorer\"
|
||||
taskkill.exe /F /IM \"explorer.exe\"
|
||||
Start-Process \"explorer.exe\"
|
||||
|
||||
Write-Host \"Waiting for explorer to complete loading\"
|
||||
Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
|
||||
Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow
|
||||
Write-Host \"Please Note - OneDrive folder may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\"
|
||||
Start-Sleep 5
|
||||
}
|
||||
else{
|
||||
Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red
|
||||
}
|
||||
"
|
||||
],
|
||||
"UndoScript": [
|
||||
@ -2719,7 +2661,7 @@
|
||||
},
|
||||
"WPFTweaksBlockAdobeNet": {
|
||||
"Content": "Adobe Network Block",
|
||||
"Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs",
|
||||
"Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. ",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a021_",
|
||||
@ -2982,6 +2924,28 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"WPFTweaksEnableipsix": {
|
||||
"Content": "Enable IPv6",
|
||||
"Description": "Enables IPv6.",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a023_",
|
||||
"registry": [
|
||||
{
|
||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
|
||||
"Name": "DisabledComponents",
|
||||
"Value": "0",
|
||||
"OriginalValue": "0",
|
||||
"Type": "DWord"
|
||||
}
|
||||
],
|
||||
"InvokeScript": [
|
||||
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
||||
],
|
||||
"UndoScript": [
|
||||
"Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
|
||||
]
|
||||
},
|
||||
"WPFToggleDarkMode": {
|
||||
"Content": "Dark Theme",
|
||||
"Description": "Enable/Disable Dark Mode.",
|
||||
@ -3059,19 +3023,11 @@
|
||||
"Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
|
||||
"category": "Customize Preferences",
|
||||
"panel": "2",
|
||||
"Order": "a070_",
|
||||
"Type": "Toggle"
|
||||
},
|
||||
"WPFToggleTaskbarSearch": {
|
||||
"Content": "Taskbar Search",
|
||||
"Description": "If Enabled Search Button will be on the taskbar.",
|
||||
"category": "Customize Preferences",
|
||||
"panel": "2",
|
||||
"Order": "a068_",
|
||||
"Order": "a069_",
|
||||
"Type": "Toggle"
|
||||
},
|
||||
"WPFOOSUbutton": {
|
||||
"Content": "Run OO Shutup 10",
|
||||
"Content": "Customize OO Shutup Tweaks",
|
||||
"category": "z__Advanced Tweaks - CAUTION",
|
||||
"panel": "1",
|
||||
"Order": "a039_",
|
||||
@ -3082,7 +3038,7 @@
|
||||
"Description": "If Enabled then Widgets Icon in Taskbar will be shown.",
|
||||
"category": "Customize Preferences",
|
||||
"panel": "2",
|
||||
"Order": "a069_",
|
||||
"Order": "a068_",
|
||||
"Type": "Toggle"
|
||||
},
|
||||
"WPFchangedns": {
|
||||
@ -3127,13 +3083,5 @@
|
||||
"panel": "2",
|
||||
"Order": "a082_",
|
||||
"Type": "300"
|
||||
},
|
||||
"WPFToggleTaskView": {
|
||||
"Content": "Task View",
|
||||
"Description": "If Enabled then Task View Icon in Taskbar will be shown.",
|
||||
"category": "Customize Preferences",
|
||||
"panel": "2",
|
||||
"Order": "a069_",
|
||||
"Type": "Toggle"
|
||||
}
|
||||
}
|
@ -30,5 +30,58 @@ function Get-LocalizedYesNo {
|
||||
Write-Debug "According to takeown.exe local Yes is $charactersArray[0]"
|
||||
# Return the array of characters
|
||||
return $charactersArray
|
||||
|
||||
}
|
||||
|
||||
|
||||
function Get-LocalizedYesNoTakeown {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
This function runs takeown.exe and captures its output to extract yes no in a localized Windows
|
||||
|
||||
.DESCRIPTION
|
||||
The function retrieves lines from the output of takeown.exe until there are at least 2 characters
|
||||
captured in a specific format, such as "Yes=<first character>, No=<second character>".
|
||||
|
||||
.EXAMPLE
|
||||
$yesNoArray = Get-LocalizedYesNo
|
||||
Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])"
|
||||
#>
|
||||
|
||||
# Run takeown.exe and capture its output
|
||||
$takeownOutput = & takeown.exe /? | Out-String
|
||||
|
||||
# Parse the output and retrieve lines until there are at least 2 characters in the array
|
||||
$found = $false
|
||||
$charactersArray = @()
|
||||
foreach ($line in $takeownOutput -split "`r`n")
|
||||
{
|
||||
# skip everything before /D flag help
|
||||
if ($found)
|
||||
{
|
||||
# now that /D is found start looking for a single character in double quotes
|
||||
# in help text there is another string in double quotes but it is not a single character
|
||||
$regexPattern = '"([a-zA-Z])"'
|
||||
|
||||
$charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value }
|
||||
|
||||
# if ($charactersArray.Count -gt 0) {
|
||||
# Write-Output "Extracted symbols: $($matches -join ', ')"
|
||||
# } else {
|
||||
# Write-Output "No matches found."
|
||||
# }
|
||||
|
||||
if ($charactersArray.Count -ge 2)
|
||||
{
|
||||
break
|
||||
}
|
||||
}
|
||||
elseif ($line -match "/D ")
|
||||
{
|
||||
$found = $true
|
||||
}
|
||||
}
|
||||
|
||||
Write-Debug "According to takeown.exe local Yes is $charactersArray[0]"
|
||||
# Return the array of characters
|
||||
return $charactersArray
|
||||
}
|
@ -61,19 +61,19 @@ function Get-TabXaml {
|
||||
$paneltotal = $columncount
|
||||
}
|
||||
# add ColumnDefinitions to evenly draw colums
|
||||
$blockXml="<Grid.ColumnDefinitions>`r`n"+("<ColumnDefinition Width=""*""/>`r`n"*($paneltotal))+"</Grid.ColumnDefinitions>`r`n"
|
||||
$blockXml="<Grid.ColumnDefinitions>`n"+("<ColumnDefinition Width=""*""/>`n"*($paneltotal))+"</Grid.ColumnDefinitions>`n"
|
||||
# Iterate through organizedData by panel, category, and application
|
||||
$count = 0
|
||||
foreach ($panel in ($organizedData.Keys | Sort-Object)) {
|
||||
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n"
|
||||
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
|
||||
$panelcount++
|
||||
foreach ($category in ($organizedData[$panel].Keys | Sort-Object)) {
|
||||
$count++
|
||||
if ($columncount -gt 0) {
|
||||
$panelcount2 = [Int](($count)/$maxcount-0.5)
|
||||
if ($panelcount -eq $panelcount2 ) {
|
||||
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n"
|
||||
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n"
|
||||
$blockXml +="`n</StackPanel>`n</Border>`n"
|
||||
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
|
||||
$panelcount++
|
||||
}
|
||||
}
|
||||
@ -83,49 +83,49 @@ function Get-TabXaml {
|
||||
|
||||
$categorycontent = $($category -replace '^.__', '')
|
||||
$categoryname = Get-WPFObjectName -type "Label" -name $categorycontent
|
||||
$blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`r`n"
|
||||
$blockXml += "<Label Name=""$categoryname"" Content=""$categorycontent"" FontSize=""16""/>`n"
|
||||
$sortedApps = $organizedData[$panel][$category].Keys | Sort-Object
|
||||
foreach ($appName in $sortedApps) {
|
||||
$count++
|
||||
if ($columncount -gt 0) {
|
||||
$panelcount2 = [Int](($count)/$maxcount-0.5)
|
||||
if ($panelcount -eq $panelcount2 ) {
|
||||
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n"
|
||||
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`r`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`r`n"
|
||||
$blockXml +="`n</StackPanel>`n</Border>`n"
|
||||
$blockXml += "<Border Grid.Row=""1"" Grid.Column=""$panelcount"">`n<StackPanel Background=""{MainBackgroundColor}"" SnapsToDevicePixels=""True"">`n"
|
||||
$panelcount++
|
||||
}
|
||||
}
|
||||
$appInfo = $organizedData[$panel][$category][$appName]
|
||||
if ("Toggle" -eq $appInfo.Type) {
|
||||
$blockXml += "<DockPanel LastChildFill=`"True`">`r`n<Label Content=`"$($appInfo.Content)`" ToolTip=`"$($appInfo.Description)`" HorizontalAlignment=`"Left`"/>`r`n"
|
||||
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`" HorizontalAlignment=`"Right`"/>`r`n</DockPanel>`r`n"
|
||||
$blockXml += "<DockPanel LastChildFill=`"True`">`n<Label Content=`"$($appInfo.Content)`" ToolTip=`"$($appInfo.Description)`" HorizontalAlignment=`"Left`"/>`n"
|
||||
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Style=`"{StaticResource ColorfulToggleSwitchStyle}`" Margin=`"2.5,0`" HorizontalAlignment=`"Right`"/>`n</DockPanel>`n"
|
||||
} elseif ("Combobox" -eq $appInfo.Type) {
|
||||
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,5,0,0`">`r`n<Label Content=`"$($appInfo.Content)`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`"/>`r`n"
|
||||
$blockXml += "<ComboBox Name=`"$($appInfo.Name)`" Height=`"32`" Width=`"186`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`" Margin=`"5,5`">`r`n"
|
||||
$blockXml += "<StackPanel Orientation=`"Horizontal`" Margin=`"0,5,0,0`">`n<Label Content=`"$($appInfo.Content)`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`"/>`n"
|
||||
$blockXml += "<ComboBox Name=`"$($appInfo.Name)`" Height=`"32`" Width=`"186`" HorizontalAlignment=`"Left`" VerticalAlignment=`"Center`" Margin=`"5,5`">`n"
|
||||
$addfirst="IsSelected=`"True`""
|
||||
foreach ($comboitem in ($appInfo.ComboItems -split " ")) {
|
||||
$blockXml += "<ComboBoxItem $addfirst Content=`"$comboitem`"/>`r`n"
|
||||
$blockXml += "<ComboBoxItem $addfirst Content=`"$comboitem`"/>`n"
|
||||
$addfirst=""
|
||||
}
|
||||
$blockXml += "</ComboBox>`r`n</StackPanel>"
|
||||
$blockXml += "</ComboBox>`n</StackPanel>"
|
||||
# If it is a digit, type is button and button length is digits
|
||||
} elseif ($appInfo.Type -match "^[\d\.]+$") {
|
||||
$blockXml += "<Button Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" HorizontalAlignment = `"Left`" Width=`"$($appInfo.Type)`" Margin=`"5`" Padding=`"20,5`" />`r`n"
|
||||
$blockXml += "<Button Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" HorizontalAlignment = `"Left`" Width=`"$($appInfo.Type)`" Margin=`"5`" Padding=`"20,5`" />`n"
|
||||
# else it is a checkbox
|
||||
} else {
|
||||
$checkedStatus = If ($null -eq $appInfo.Checked) {""} Else {"IsChecked=`"$($appInfo.Checked)`" "}
|
||||
if ($null -eq $appInfo.Link)
|
||||
{
|
||||
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" $($checkedStatus)Margin=`"5,0`" ToolTip=`"$($appInfo.Description)`"/>`r`n"
|
||||
$blockXml += "<CheckBox Name=`"$($appInfo.Name)`" Content=`"$($appInfo.Content)`" $($checkedStatus)Margin=`"5,0`" ToolTip=`"$($appInfo.Description)`"/>`n"
|
||||
}
|
||||
else
|
||||
{
|
||||
$blockXml += "<StackPanel Orientation=""Horizontal"">`r`n<CheckBox Name=""$($appInfo.Name)"" Content=""$($appInfo.Content)"" $($checkedStatus)ToolTip=""$($appInfo.Description)"" Margin=""0,0,2,0""/><TextBlock Name=""$($appInfo.Name)Link"" Style=""{StaticResource HoverTextBlockStyle}"" Text=""(?)"" ToolTip=""$($appInfo.Link)"" />`r`n</StackPanel>`r`n"
|
||||
$blockXml += "<StackPanel Orientation=""Horizontal"">`n<CheckBox Name=""$($appInfo.Name)"" Content=""$($appInfo.Content)"" $($checkedStatus)ToolTip=""$($appInfo.Description)"" Margin=""0,0,2,0""/><TextBlock Name=""$($appInfo.Name)Link"" Style=""{StaticResource HoverTextBlockStyle}"" Text=""(?)"" ToolTip=""$($appInfo.Link)"" />`n</StackPanel>`n"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$blockXml +="`r`n</StackPanel>`r`n</Border>`r`n"
|
||||
$blockXml +="`n</StackPanel>`n</Border>`n"
|
||||
}
|
||||
return ($blockXml)
|
||||
}
|
||||
|
@ -98,15 +98,6 @@ Function Get-WinUtilToggleStatus {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
if($ToggleSwitch -eq "WPFToggleTaskbarSearch"){
|
||||
$SearchButton = (Get-ItemProperty -path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search").SearchboxTaskbarMode
|
||||
if($SearchButton -eq 0){
|
||||
return $false
|
||||
}
|
||||
else{
|
||||
return $true
|
||||
}
|
||||
}
|
||||
if ($ToggleSwitch -eq "WPFToggleStickyKeys") {
|
||||
$StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags
|
||||
if($StickyKeys -eq 58){
|
||||
@ -116,15 +107,6 @@ Function Get-WinUtilToggleStatus {
|
||||
return $true
|
||||
}
|
||||
}
|
||||
if ($ToggleSwitch -eq "WPFToggleTaskView") {
|
||||
$TaskView = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').ShowTaskViewButton
|
||||
if($TaskView -eq 0){
|
||||
return $false
|
||||
}
|
||||
else{
|
||||
return $true
|
||||
}
|
||||
}
|
||||
if ($ToggleSwitch -eq "WPFToggleTaskbarWidgets") {
|
||||
$TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa
|
||||
if($TaskbarWidgets -eq 0) {
|
||||
|
@ -11,7 +11,9 @@ function Get-WinUtilVariables {
|
||||
[Parameter()]
|
||||
[string[]]$Type
|
||||
)
|
||||
$keys = ($sync.keys).where{ $_ -like "WPF*" }
|
||||
|
||||
$keys = $sync.keys | Where-Object { $_ -like "WPF*" }
|
||||
|
||||
if ($Type) {
|
||||
$output = $keys | ForEach-Object {
|
||||
Try {
|
||||
|
@ -1,3 +1,19 @@
|
||||
function Invoke-MicroWin-Helper {
|
||||
<#
|
||||
|
||||
.SYNOPSIS
|
||||
checking unit tests
|
||||
|
||||
.PARAMETER Name
|
||||
no parameters
|
||||
|
||||
.EXAMPLE
|
||||
placeholder
|
||||
|
||||
#>
|
||||
|
||||
}
|
||||
|
||||
function Test-CompatibleImage() {
|
||||
<#
|
||||
|
||||
@ -159,14 +175,8 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
|
||||
{
|
||||
$status = "Removing Provisioned $($appx.PackageName)"
|
||||
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
||||
try {
|
||||
Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue
|
||||
}
|
||||
catch {
|
||||
Write-Host "Application $($appx.PackageName) could not be removed"
|
||||
continue
|
||||
}
|
||||
}
|
||||
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
|
||||
}
|
||||
else
|
||||
|
@ -1,21 +1,29 @@
|
||||
function Invoke-WinUtilGPU {
|
||||
$gpuInfo = Get-CimInstance Win32_VideoController
|
||||
|
||||
# GPUs to blacklist from using Demanding Theming
|
||||
$lowPowerGPUs = (
|
||||
"*NVIDIA GeForce*M*",
|
||||
"*NVIDIA GeForce*Laptop*",
|
||||
"*NVIDIA GeForce*GT*",
|
||||
"*AMD Radeon(TM)*",
|
||||
"*UHD*"
|
||||
)
|
||||
foreach ($gpu in $gpuInfo) {
|
||||
$gpuName = $gpu.Name
|
||||
if ($gpuName -like "*NVIDIA*") {
|
||||
return $true # NVIDIA GPU found
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($gpu in $gpuInfo) {
|
||||
foreach ($gpuPattern in $lowPowerGPUs){
|
||||
if ($gpu.Name -like $gpuPattern) {
|
||||
return $false
|
||||
$gpuName = $gpu.Name
|
||||
if ($gpuName -like "*AMD Radeon RX*") {
|
||||
return $true # AMD GPU Found
|
||||
}
|
||||
}
|
||||
foreach ($gpu in $gpuInfo) {
|
||||
$gpuName = $gpu.Name
|
||||
if ($gpuName -like "*UHD*") {
|
||||
return $false # Intel Intergrated GPU Found
|
||||
}
|
||||
}
|
||||
foreach ($gpu in $gpuInfo) {
|
||||
$gpuName = $gpu.Name
|
||||
if ($gpuName -like "*AMD Radeon(TM)*") {
|
||||
return $false # AMD Intergrated GPU Found
|
||||
}
|
||||
}
|
||||
}
|
||||
return $true
|
||||
}
|
@ -15,8 +15,7 @@ function Invoke-WinUtilNumLock {
|
||||
Write-Host "Disabling Numlock on startup"
|
||||
$value = 0
|
||||
}
|
||||
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS
|
||||
$Path = "HKU:\.Default\Control Panel\Keyboard"
|
||||
$Path = "HKCU:\Control Panel\Keyboard"
|
||||
Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value
|
||||
}
|
||||
Catch [System.Security.SecurityException] {
|
||||
|
@ -1,34 +0,0 @@
|
||||
function Invoke-WinUtilTaskView {
|
||||
<#
|
||||
|
||||
.SYNOPSIS
|
||||
Enable/Disable Task View
|
||||
|
||||
.PARAMETER Enabled
|
||||
Indicates whether to enable or disable Task View
|
||||
|
||||
#>
|
||||
Param($Enabled)
|
||||
Try{
|
||||
if ($Enabled -eq $false){
|
||||
Write-Host "Enabling Task View"
|
||||
$value = 1
|
||||
}
|
||||
else {
|
||||
Write-Host "Disabling Task View"
|
||||
$value = 0
|
||||
}
|
||||
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
|
||||
Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value
|
||||
}
|
||||
Catch [System.Security.SecurityException] {
|
||||
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
|
||||
}
|
||||
Catch [System.Management.Automation.ItemNotFoundException] {
|
||||
Write-Warning $psitem.Exception.ErrorRecord
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to set $Name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
function Invoke-WinUtilTaskbarSearch {
|
||||
<#
|
||||
|
||||
.SYNOPSIS
|
||||
Enable/Disable Taskbar Widgets
|
||||
|
||||
.PARAMETER Enabled
|
||||
Indicates whether to enable or disable Taskbar Widgets
|
||||
|
||||
#>
|
||||
Param($Enabled)
|
||||
Try{
|
||||
if ($Enabled -eq $false){
|
||||
Write-Host "Enabling Search Button"
|
||||
$value = 1
|
||||
}
|
||||
else {
|
||||
Write-Host "Disabling Search Button"
|
||||
$value = 0
|
||||
}
|
||||
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\"
|
||||
Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value
|
||||
}
|
||||
Catch [System.Security.SecurityException] {
|
||||
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
|
||||
}
|
||||
Catch [System.Management.Automation.ItemNotFoundException] {
|
||||
Write-Warning $psitem.Exception.ErrorRecord
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to set $Name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
@ -178,67 +178,17 @@ $cttLogoPath = @"
|
||||
$winutilTextBlock.Foreground = $foregroundColor
|
||||
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block
|
||||
$stackPanel.Children.Add($winutilTextBlock)
|
||||
|
||||
# Add TextBlock for information with text wrapping and margins
|
||||
$messageTextBlock = New-Object Windows.Controls.TextBlock
|
||||
$messageTextBlock.Text = $Message
|
||||
$messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping
|
||||
$messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left
|
||||
$messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top
|
||||
$messageTextBlock.Margin = New-Object Windows.Thickness(10) # Add margins around the text block
|
||||
|
||||
# Define the Regex to find hyperlinks formatted as HTML <a> tags
|
||||
$regex = [regex]::new('<a href="([^"]+)">([^<]+)</a>')
|
||||
$lastPos = 0
|
||||
|
||||
# Iterate through each match and add regular text and hyperlinks
|
||||
foreach ($match in $regex.Matches($Message)) {
|
||||
# Add the text before the hyperlink, if any
|
||||
$textBefore = $Message.Substring($lastPos, $match.Index - $lastPos)
|
||||
if ($textBefore.Length -gt 0) {
|
||||
$messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textBefore)))
|
||||
}
|
||||
|
||||
# Create and add the hyperlink
|
||||
$hyperlink = New-Object Windows.Documents.Hyperlink
|
||||
$hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value)
|
||||
$hyperlink.Inlines.Add($match.Groups[2].Value)
|
||||
$hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline
|
||||
$hyperlink.Foreground = $foregroundColor
|
||||
$hyperlink.Add_Click({
|
||||
param($sender, $args)
|
||||
Start-Process $sender.NavigateUri.AbsoluteUri
|
||||
})
|
||||
$hyperlink.Add_MouseEnter({
|
||||
param($sender, $args)
|
||||
$sender.Foreground = [Windows.Media.Brushes]::LightGray
|
||||
})
|
||||
$hyperlink.Add_MouseLeave({
|
||||
param($sender, $args)
|
||||
$sender.Foreground = $foregroundColor
|
||||
})
|
||||
|
||||
$messageTextBlock.Inlines.Add($hyperlink)
|
||||
|
||||
# Update the last position
|
||||
$lastPos = $match.Index + $match.Length
|
||||
}
|
||||
|
||||
# Add any remaining text after the last hyperlink
|
||||
if ($lastPos -lt $Message.Length) {
|
||||
$textAfter = $Message.Substring($lastPos)
|
||||
$messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textAfter)))
|
||||
}
|
||||
|
||||
# If no matches, add the entire message as a run
|
||||
if ($regex.Matches($Message).Count -eq 0) {
|
||||
$messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($Message)))
|
||||
}
|
||||
|
||||
|
||||
# Add the TextBlock to the Grid
|
||||
$grid.Children.Add($messageTextBlock)
|
||||
[Windows.Controls.Grid]::SetRow($messageTextBlock, 1) # Set the row to the second row (0-based index)
|
||||
|
||||
|
||||
# Add OK button
|
||||
$okButton = New-Object Windows.Controls.Button
|
||||
$okButton.Content = "OK"
|
||||
|
@ -26,7 +26,7 @@ function Invoke-WPFButton {
|
||||
"WPFclear" {Invoke-WPFPresets -preset $null -imported $true}
|
||||
"WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"}
|
||||
"WPFtweaksbutton" {Invoke-WPFtweaksbutton}
|
||||
"WPFOOSUbutton" {Invoke-WPFOOSU}
|
||||
"WPFOOSUbutton" {Invoke-WPFOOSU -action "customize"}
|
||||
"WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enabled"}
|
||||
"WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disabled"}
|
||||
"WPFundoall" {Invoke-WPFundoall}
|
||||
|
@ -1,20 +1,43 @@
|
||||
function Invoke-WPFOOSU {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Downloads and runs OO Shutup 10
|
||||
Downloads and runs OO Shutup 10 with or without config files
|
||||
.PARAMETER action
|
||||
Specifies how OOSU should be started
|
||||
customize: Opens the OOSU GUI
|
||||
recommended: Loads and applies the recommended OOSU policies silently
|
||||
undo: Resets all policies to factory silently
|
||||
#>
|
||||
try {
|
||||
|
||||
param (
|
||||
[ValidateSet("customize", "recommended", "undo")]
|
||||
[string]$action
|
||||
)
|
||||
|
||||
$OOSU_filepath = "$ENV:temp\OOSU10.exe"
|
||||
|
||||
$Initial_ProgressPreference = $ProgressPreference
|
||||
$ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest
|
||||
Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath
|
||||
|
||||
switch ($action)
|
||||
{
|
||||
"customize"{
|
||||
Write-Host "Starting OO Shutup 10 ..."
|
||||
Start-Process $OOSU_filepath
|
||||
}
|
||||
catch {
|
||||
Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red
|
||||
"recommended"{
|
||||
$oosu_config = "$ENV:temp\ooshutup10_recommended.cfg"
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/config/ooshutup10_recommended.cfg" -OutFile $oosu_config
|
||||
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"
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/config/ooshutup10_factory.cfg" -OutFile $oosu_config
|
||||
Write-Host "Resetting all OO Shutup 10 Policies"
|
||||
Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait
|
||||
}
|
||||
}
|
||||
finally {
|
||||
$ProgressPreference = $Initial_ProgressPreference
|
||||
}
|
||||
}
|
@ -5,8 +5,6 @@ function Invoke-WPFPanelAutologin {
|
||||
Enables autologin using Sysinternals Autologon.exe
|
||||
|
||||
#>
|
||||
|
||||
# Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
|
||||
Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe"
|
||||
cmd /c "$env:temp\autologin.exe" /accepteula
|
||||
curl.exe -ss "https://live.sysinternals.com/Autologon.exe" -o $env:temp\autologin.exe # Official Microsoft recommendation https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
|
||||
cmd /c $env:temp\autologin.exe /accepteula
|
||||
}
|
@ -28,7 +28,5 @@ function Invoke-WPFToggle {
|
||||
"WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)}
|
||||
"WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)}
|
||||
"WPFToggleTaskbarWidgets" {Invoke-WinUtilTaskbarWidgets $(Get-WinUtilToggleStatus WPFToggleTaskbarWidgets)}
|
||||
"WPFToggleTaskbarSearch" {Invoke-WinUtilTaskbarSearch $(Get-WinUtilToggleStatus WPFToggleTaskbarSearch)}
|
||||
"WPFToggleTaskView" {Invoke-WinUtilTaskView $(Get-WinUtilToggleStatus WPFToggleTaskView)}
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ function Invoke-WPFUnInstall {
|
||||
$PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"]
|
||||
|
||||
if ($PackagesToInstall.Count -eq 0) {
|
||||
$WarningMsg = "Please select the program(s) to uninstall"
|
||||
$WarningMsg = "Please select the program(s) to install"
|
||||
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||
return
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ $InitialSessionState = [System.Management.Automation.Runspaces.InitialSessionSta
|
||||
$InitialSessionState.Variables.Add($hashVars)
|
||||
|
||||
# Get every private function and add them to the session state
|
||||
$functions = (Get-ChildItem function:\).where{$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
|
||||
$functions = Get-ChildItem function:\ | Where-Object {$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
|
||||
foreach ($function in $functions){
|
||||
$functionDefinition = Get-Content function:\$($function.name)
|
||||
$functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition
|
||||
@ -133,17 +133,9 @@ $sync.keys | ForEach-Object {
|
||||
|
||||
# Load computer information in the background
|
||||
Invoke-WPFRunspace -ScriptBlock {
|
||||
try{
|
||||
$oldProgressPreference = $ProgressPreference
|
||||
$ProgressPreference = "SilentlyContinue"
|
||||
$sync.ConfigLoaded = $False
|
||||
$sync.ComputerInfo = Get-ComputerInfo
|
||||
$sync.ConfigLoaded = $True
|
||||
}
|
||||
finally{
|
||||
$ProgressPreference = "Continue"
|
||||
}
|
||||
|
||||
} | Out-Null
|
||||
|
||||
#===========================================================================
|
||||
@ -153,6 +145,9 @@ Invoke-WPFRunspace -ScriptBlock {
|
||||
# Print the logo
|
||||
Invoke-WPFFormVariables
|
||||
|
||||
# Install Winget if not already present
|
||||
Install-WinUtilWinget
|
||||
|
||||
# Set the titlebar
|
||||
$sync["Form"].title = $sync["Form"].title + " " + $sync.version
|
||||
# Set the commands that will run when the form is closed
|
||||
@ -276,7 +271,7 @@ Add-Type @"
|
||||
"@
|
||||
}
|
||||
|
||||
foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) {
|
||||
foreach ($proc in (Get-Process | Where-Object { $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" })) {
|
||||
# Check if the process's MainWindowHandle is valid
|
||||
if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) {
|
||||
Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)"
|
||||
@ -287,37 +282,19 @@ Add-Type @"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Using a TaskbarItem Overlay until someone figures out how to replace the icon correctly
|
||||
|
||||
# URL of the image
|
||||
$imageUrl = "https://christitus.com/images/logo-full.png"
|
||||
|
||||
# Download the image
|
||||
$imagePath = "$env:TEMP\logo-full.png"
|
||||
Invoke-WebRequest -Uri $imageUrl -OutFile $imagePath
|
||||
|
||||
# Read the image file as a byte array
|
||||
$imageBytes = [System.IO.File]::ReadAllBytes($imagePath)
|
||||
|
||||
# Convert the byte array to a Base64 string
|
||||
$base64String = [System.Convert]::ToBase64String($imageBytes)
|
||||
|
||||
# Create a streaming image by streaming the base64 string to a bitmap streamsource
|
||||
$bitmap = New-Object System.Windows.Media.Imaging.BitmapImage
|
||||
$bitmap.BeginInit()
|
||||
$bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64String)
|
||||
$bitmap.EndInit()
|
||||
$bitmap.Freeze()
|
||||
|
||||
# Ensure TaskbarItemInfo is created if not already
|
||||
if (-not $sync["Form"].TaskbarItemInfo) {
|
||||
$sync["Form"].TaskbarItemInfo = New-Object System.Windows.Shell.TaskbarItemInfo
|
||||
}
|
||||
|
||||
# Set the overlay icon for the taskbar
|
||||
$sync["Form"].TaskbarItemInfo.Overlay = $bitmap
|
||||
|
||||
# need to experiemnt more
|
||||
# setting icon for the windows is still not working
|
||||
# $pngUrl = "https://christitus.com/images/logo-full.png"
|
||||
# $pngPath = "$env:TEMP\cttlogo.png"
|
||||
# $iconPath = "$env:TEMP\cttlogo.ico"
|
||||
# # Download the PNG file
|
||||
# Invoke-WebRequest -Uri $pngUrl -OutFile $pngPath
|
||||
# if (Test-Path -Path $pngPath) {
|
||||
# ConvertTo-Icon -bitmapPath $pngPath -iconPath $iconPath
|
||||
# }
|
||||
# $icon = [System.Drawing.Icon]::ExtractAssociatedIcon($iconPath)
|
||||
# Write-Host $icon.Handle
|
||||
# [Window]::SendMessage($windowHandle, 0x80, [IntPtr]::Zero, $icon.Handle)
|
||||
|
||||
$rect = New-Object RECT
|
||||
[Window]::GetWindowRect($windowHandle, [ref]$rect)
|
||||
@ -392,11 +369,11 @@ Add-Type @"
|
||||
|
||||
# Load Checkboxes and Labels outside of the Filter fuction only once on startup for performance reasons
|
||||
$filter = Get-WinUtilVariables -Type CheckBox
|
||||
$CheckBoxes = ($sync.GetEnumerator()).where{ $psitem.Key -in $filter }
|
||||
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter }
|
||||
|
||||
$filter = Get-WinUtilVariables -Type Label
|
||||
$labels = @{}
|
||||
($sync.GetEnumerator()).where{$PSItem.Key -in $filter} | ForEach-Object {$labels[$_.Key] = $_.Value}
|
||||
$sync.GetEnumerator() | Where-Object {$PSItem.Key -in $filter} | ForEach-Object {$labels[$_.Key] = $_.Value}
|
||||
|
||||
$allCategories = $checkBoxes.Name | ForEach-Object {$sync.configs.applications.$_} | Select-Object -Unique -ExpandProperty category
|
||||
|
||||
@ -490,14 +467,17 @@ $sync["AboutMenuItem"].Add_Click({
|
||||
# Handle Export menu item click
|
||||
Write-Debug "About clicked"
|
||||
$sync["SettingsPopup"].IsOpen = $false
|
||||
# Example usage
|
||||
$authorInfo = @"
|
||||
Author : <a href="https://github.com/ChrisTitusTech">@christitustech</a>
|
||||
Runspace : <a href="https://github.com/DeveloperDurp">@DeveloperDurp</a>
|
||||
MicroWin : <a href="https://github.com/KonTy">@KonTy</a>
|
||||
GitHub : <a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech/winutil</a>
|
||||
Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sync.version)">$($sync.version)</a>
|
||||
Author : @christitustech
|
||||
Runspace : @DeveloperDurp
|
||||
GUI : @KonTy
|
||||
MicroWin : @KonTy
|
||||
GitHub : https://github.com/ChrisTitusTech/winutil
|
||||
Version : $($sync.version)
|
||||
"@
|
||||
Show-CustomDialog -Message $authorInfo -Width 400
|
||||
})
|
||||
|
||||
$sync["Form"].ShowDialog() | out-null
|
||||
Stop-Transcript
|
||||
|
40
windev.ps1
40
windev.ps1
@ -1,40 +0,0 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
This Script is used as a target for the https://christitus.com/windev alias.
|
||||
It queries the latest winget release (no matter if Pre-Release, Draft or Full Release) and invokes It
|
||||
.DESCRIPTION
|
||||
This Script provides a simple way to always start the bleeding edge release even if it's not yet a full release.
|
||||
This function should be run with administrative privileges.
|
||||
Because this way of recursively invoking scripts via Invoke-Expression it might very well happen that AV Programs flag this because it's a common way of mulitstage exploits to run
|
||||
.EXAMPLE
|
||||
irm https://christitus.com/windev | iex
|
||||
OR
|
||||
Run in Admin Powershell > ./windev.ps1
|
||||
#>
|
||||
|
||||
# Function to fetch the latest release tag from the GitHub API
|
||||
function Get-LatestRelease {
|
||||
try {
|
||||
$releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/ChrisTitusTech/winutil/releases'
|
||||
$latestRelease = $releases | Select-Object -First 1
|
||||
return $latestRelease.tag_name
|
||||
} catch {
|
||||
Write-Host "Error fetching release data: $_" -ForegroundColor Red
|
||||
return $null
|
||||
}
|
||||
}
|
||||
|
||||
# Function to redirect to the latest pre-release version
|
||||
function RedirectToLatestPreRelease {
|
||||
$latestRelease = Get-LatestRelease
|
||||
if ($latestRelease) {
|
||||
$url = "https://raw.githubusercontent.com/ChrisTitusTech/winutil/$latestRelease/winutil.ps1"
|
||||
Invoke-RestMethod $url | Invoke-Expression
|
||||
} else {
|
||||
Write-Host 'Unable to determine latest pre-release version.' -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
# Call the redirect function
|
||||
|
||||
RedirectToLatestPreRelease
|
1492
winutil.ps1
1492
winutil.ps1
File diff suppressed because it is too large
Load Diff
1087
xaml/inputApp.xaml
Normal file
1087
xaml/inputApp.xaml
Normal file
File diff suppressed because it is too large
Load Diff
43
xaml/inputFeatures.xaml
Normal file
43
xaml/inputFeatures.xaml
Normal file
@ -0,0 +1,43 @@
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Row="1" Grid.Column="0">
|
||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||
<Label Name="WPFLabelFeatures" 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 Name="WPFLabelFixes" 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 Name="WPFLabelLegacyWindowsPanels" 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>
|
||||
|
113
xaml/inputTweaks.xaml
Normal file
113
xaml/inputTweaks.xaml
Normal file
@ -0,0 +1,113 @@
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Border Grid.Row="1" Grid.Column="0">
|
||||
<StackPanel Background="{MainBackgroundColor}" SnapsToDevicePixels="True">
|
||||
<Label Name="WPFLabelEssentialTweaks" 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="WPFTweaksDeleteTempFiles" Content="Delete Temporary Files" Margin="5,0" ToolTip="Erases TEMP Folders"/>
|
||||
<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="WPFTweaksAH" Content="Disable Activity History" Margin="5,0" ToolTip="This erases recent docs, clipboard, and run history."/>
|
||||
<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="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="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="WPFTweaksLoc" Content="Disable Location Tracking" Margin="5,0" ToolTip="Disables Location Tracking...DUH!"/>
|
||||
<CheckBox Name="WPFTweaksStorage" Content="Disable Storage Sense" Margin="5,0" ToolTip="Storage Sense deletes temp files automatically."/>
|
||||
<CheckBox Name="WPFTweaksTeredo" Content="Disable Teredo" Margin="5,0" ToolTip="Teredo network tunneling is a ipv6 feature that can cause additional latency."/>
|
||||
<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="WPFTweaksEndTaskOnTaskbar" Content="Enable End Task With Right Click" Margin="5,0" ToolTip="Enables option to end task when right clicking a program in the taskbar"/>
|
||||
<CheckBox Name="WPFTweaksDiskCleanup" Content="Run Disk Cleanup" Margin="5,0" ToolTip="Runs Disk Cleanup on Drive C: and removes old Windows Updates."/>
|
||||
<CheckBox Name="WPFTweaksOO" Content="Run OO Shutup" Margin="5,0" ToolTip="Runs OO Shutup and applies the recommended Tweaks. https://www.oo-software.com/en/shutup10"/>
|
||||
<CheckBox Name="WPFTweaksPowershell7" Content="Replace Default Powershell 5 to Powershell 7" Margin="5,0" ToolTip="This will edit the config file of the Windows Terminal Replacing the Powershell 5 to Powershell 7 and install Powershell 7 if necessary"/>
|
||||
<CheckBox Name="WPFToggleTweaksLaptopHybernation" Content="Set Hibernation as default (good for laptops)" Margin="5,0" ToolTip="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"/>
|
||||
<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 Name="WPFLabelAdvancedTweaksCAUTION" Content="Advanced Tweaks - CAUTION" FontSize="16"/>
|
||||
<CheckBox Name="WPFTweaksBlockAdobeNet" Content="Adobe Network Block" Margin="5,0" ToolTip="Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. "/>
|
||||
<CheckBox Name="WPFTweaksDebloatAdobe" Content="Adobe Debloat" Margin="5,0" ToolTip="Manages Adobe Services, Adobe Desktop Service, and Acrobat Updates"/>
|
||||
<CheckBox Name="WPFTweaksDisableipsix" Content="Disable IPv6" Margin="5,0" ToolTip="Disables IPv6."/>
|
||||
<CheckBox Name="WPFTweaksEnableipsix" Content="Enable IPv6" Margin="5,0" ToolTip="Enables IPv6."/>
|
||||
<CheckBox Name="WPFTweaksDisableFSO" Content="Disable Fullscreen Optimizations" Margin="5,0" ToolTip="Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen"/>
|
||||
<CheckBox Name="WPFTweaksRemoveCopilot" Content="Disable Microsoft Copilot" Margin="5,0" ToolTip="Disables MS Copilot AI built into Windows since 23H2."/>
|
||||
<CheckBox Name="WPFTweaksDisableNotifications" Content="Disable Notification Tray/Calendar" Margin="5,0" ToolTip="Disables all Notifications INCLUDING Calendar"/>
|
||||
<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="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="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="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."/>
|
||||
<Button Name="WPFOOSUbutton" Content="Customize OO Shutup Tweaks" HorizontalAlignment = "Left" Width="220" Margin="5" Padding="20,5" />
|
||||
<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 Name="WPFLabelCustomizePreferences" Content="Customize Preferences" FontSize="16"/>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Dark Theme" ToolTip="Enable/Disable Dark Mode." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleDarkMode" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Bing Search in Start Menu" ToolTip="If enable then includes web search results from Bing in your Start Menu search." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleBingSearch" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="NumLock on Startup" ToolTip="Toggle the Num Lock key state when your computer starts." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleNumLock" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Verbose Logon Messages" ToolTip="Show detailed messages during the login process for troubleshooting and diagnostics." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleVerboseLogon" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Show File Extensions" ToolTip="If enabled then File extensions (e.g., .txt, .jpg) are visible." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleShowExt" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Snap Window" ToolTip="If enabled you can align windows by dragging them. | Relogin Required" HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleSnapWindow" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Snap Assist Flyout" ToolTip="If enabled then Snap preview is disabled when maximize button is hovered." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleSnapFlyout" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Snap Assist Suggestion" ToolTip="If enabled then you will get suggestions to snap other applications in the left over spaces." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleSnapSuggestion" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Mouse Acceleration" ToolTip="If Enabled then Cursor movement is affected by the speed of your physical mouse movements." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleMouseAcceleration" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Taskbar Widgets" ToolTip="If Enabled then Widgets Icon in Taskbar will be shown." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleTaskbarWidgets" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<DockPanel LastChildFill="True">
|
||||
<Label Content="Sticky Keys" 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." HorizontalAlignment="Left"/>
|
||||
<CheckBox Name="WPFToggleStickyKeys" Style="{StaticResource ColorfulToggleSwitchStyle}" Margin="2.5,0" HorizontalAlignment="Right"/>
|
||||
</DockPanel>
|
||||
<Label Name="WPFLabelPerformancePlans" 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 Name="WPFLabelShortcuts" Content="Shortcuts" FontSize="16"/>
|
||||
<Button Name="WPFWinUtilShortcut" Content="Create WinUtil Shortcut" HorizontalAlignment = "Left" Width="300" Margin="5" Padding="20,5" />
|
||||
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
@ -571,18 +571,6 @@
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
<Style x:Key="ScrollVisibilityRectangle" TargetType="Rectangle">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
<Style.Triggers>
|
||||
<MultiDataTrigger>
|
||||
<MultiDataTrigger.Conditions>
|
||||
<Condition Binding="{Binding Path=ComputedHorizontalScrollBarVisibility, ElementName=scrollViewer}" Value="Visible"/>
|
||||
<Condition Binding="{Binding Path=ComputedVerticalScrollBarVisibility, ElementName=scrollViewer}" Value="Visible"/>
|
||||
</MultiDataTrigger.Conditions>
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</MultiDataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Window.Resources>
|
||||
<Grid Background="{MainBackgroundColor}" ShowGridLines="False" Name="WPFMainGrid" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
||||
<Grid.RowDefinitions>
|
||||
@ -713,20 +701,18 @@
|
||||
<StackPanel Background="{MainBackgroundColor}" Orientation="Horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.ColumnSpan="3" Margin="5">
|
||||
<Button Name="WPFinstall" Content=" Install/Upgrade Selected" Margin="2" />
|
||||
<Button Name="WPFInstallUpgrade" Content=" Upgrade All" Margin="2"/>
|
||||
<Button Name="WPFuninstall" Content=" Uninstall Selected" Margin="2"/>
|
||||
<Button Name="WPFuninstall" Content=" Uninstall Selection" Margin="2"/>
|
||||
<Button Name="WPFGetInstalled" Content=" Get Installed" Margin="2"/>
|
||||
<Button Name="WPFclearWinget" Content=" Clear Selection" Margin="2"/>
|
||||
</StackPanel>
|
||||
|
||||
<ScrollViewer x:Name="scrollViewer" Grid.Row="1" Grid.Column="0" Padding="-1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
|
||||
<ScrollViewer Grid.Row="1" Grid.Column="0" Padding="-1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
|
||||
BorderBrush="Transparent" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
{{InstallPanel_applications}}
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
|
||||
<Rectangle Grid.Row="1" Grid.Column="0" Width="18" Height="18" Fill="{MainBackgroundColor}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Style="{StaticResource ScrollVisibilityRectangle}"/>
|
||||
|
||||
</Grid>
|
||||
</TabItem>
|
||||
<TabItem Header="Tweaks" Visibility="Collapsed" Name="WPFTab2">
|
||||
|
Reference in New Issue
Block a user