Skip to content

Commit

Permalink
Change resolution check to use the primary monitor's working area. (#168
Browse files Browse the repository at this point in the history
)

Fixes oversized windows on multiple monitor setups when using dpi scaling.
  • Loading branch information
clienthax authored May 28, 2024
1 parent a54a49b commit 57c0341
Showing 1 changed file with 8 additions and 36 deletions.
44 changes: 8 additions & 36 deletions src/lib/ui/Get-CurrentResolution.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -5,45 +5,17 @@ function Get-CurrentResolution() {
[OutputType([System.Object[]])]
param ()

# Adapted from: https://www.reddit.com/r/PowerShell/comments/67no9x/comment/dgrry3b/?utm_source=share&utm_medium=web2x&context=3
$NumberOfScreens = (Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams | Where-Object { $_.Active -like "True" }).Active.Count
$ScreenWidth = $null
$ScreenHeight = $null
Add-Type -AssemblyName System.Windows.Forms

Write-Verbose "Num. of Monitors: $NumberOfScreens"
# Get the primary screen's working area, which takes DPI scaling into account
$primaryScreen = [System.Windows.Forms.Screen]::PrimaryScreen
$bounds = $primaryScreen.Bounds
$workingArea = $primaryScreen.WorkingArea

If ($NumberOfScreens -eq 1) {
# Accepts Scaling/DPI
[System.Windows.Forms.SystemInformation]::VirtualScreen | ForEach-Object {
Write-Verbose "W: $($_.Width) | H: $($_.Height)"
$ScreenWidth = $workingArea.Width
$ScreenHeight = $workingArea.Height

If (!$ScreenWidth -or !$ScreenHeight) {
$ScreenWidth = $_.Width
$ScreenHeight = $_.Height
}
Write-Verbose "Primary Monitor: Width: $ScreenWidth, Height: $ScreenHeight (DPI Scaled)"

If (($_.Width) -and ($_.Width -le $ScreenWidth)) {
$ScreenWidth = $_.Width
$ScreenHeight = $_.Height
}
}
} Else {
# Doesn't accepts Scaling/DPI (rollback method)
Get-CimInstance -Class "Win32_VideoController" | ForEach-Object {
Write-Verbose "W: $($_.CurrentHorizontalResolution) | H: $($_.CurrentVerticalResolution)"

If (!$ScreenWidth -or !$ScreenHeight) {
$ScreenWidth = $_.CurrentHorizontalResolution
$ScreenHeight = $_.CurrentVerticalResolution
}

If (($_.CurrentHorizontalResolution) -and ($_.CurrentHorizontalResolution -le $ScreenWidth)) {
$ScreenWidth = $_.CurrentHorizontalResolution
$ScreenHeight = $_.CurrentVerticalResolution
}
}
}

Write-Verbose "Width: $ScreenWidth, Height: $ScreenHeight"
return $ScreenWidth, $ScreenHeight
}

0 comments on commit 57c0341

Please sign in to comment.