Files
cloudhost/seediso/windows11/81-Toggle-Scale.ps1
T
GuofangandClaude Sonnet 5.5 2b237bb8b3 Add a tool to switch the Windows display scale between 100% and 200%
81-Toggle-Scale.ps1 writes LogPixels, Win8DpiScaling and AppliedDPI for
the current user; the change needs a restart, so the .bat launcher offers
to restart at the end. It is picked up by the existing NN-*.bat/.ps1
globs and copied to Desktop\Tools.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 15:06:08 +08:00

35 lines
1.3 KiB
PowerShell

# Switches the display scale between 100% and 200% for the current user.
# With no argument it toggles; -Scale 100 or -Scale 200 forces a value.
# The scale is stored in the registry (LogPixels), so the change takes effect only after
# a restart. Use -Restart to reboot right away.
param(
[ValidateSet(0, 100, 200)]
[int]$Scale = 0,
[switch]$Restart
)
$ErrorActionPreference = 'Stop'
$desktopKey = 'HKCU:\Control Panel\Desktop'
$metricsKey = 'HKCU:\Control Panel\Desktop\WindowMetrics'
$logPixels = (Get-ItemProperty -Path $desktopKey -Name LogPixels -ErrorAction SilentlyContinue).LogPixels
if (-not $logPixels) { $logPixels = 96 }
$current = [int][math]::Round($logPixels * 100 / 96)
$target = if ($Scale -ne 0) { $Scale } elseif ($current -eq 100) { 200 } else { 100 }
$dpi = [int]($target * 96 / 100)
Write-Host "Scale: $current% -> $target%"
# Win8DpiScaling=1 makes Windows use LogPixels instead of the per-monitor recommendation.
Set-ItemProperty -Path $desktopKey -Name LogPixels -Type DWord -Value $dpi
Set-ItemProperty -Path $desktopKey -Name Win8DpiScaling -Type DWord -Value 1
Set-ItemProperty -Path $metricsKey -Name AppliedDPI -Type DWord -Value $dpi
Write-Host 'Restart Windows for the new scale to take effect.'
if ($Restart) {
Write-Host 'Restarting in 5 seconds...'
shutdown.exe /r /t 5
}