param( [string]$ProcessName = "python", [string]$OutPng = "$env:TEMP\edid-window.png" ) Add-Type @" using System; using System.Runtime.InteropServices; public class Win32Cap { [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr h, out RECT r); [DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr h); public struct RECT { public int Left, Top, Right, Bottom; } } "@ Add-Type -AssemblyName System.Drawing $proc = Get-Process -Name $ProcessName -ErrorAction Stop | Where-Object { $_.MainWindowHandle -ne 0 -and $_.MainWindowTitle -like 'EDID*' } | Select-Object -First 1 if (-not $proc) { throw "no EDID window found for process '$ProcessName'" } $hwnd = $proc.MainWindowHandle [Win32Cap]::SetForegroundWindow($hwnd) | Out-Null Start-Sleep -Milliseconds 800 $r = New-Object Win32Cap+RECT [Win32Cap]::GetWindowRect($hwnd, [ref]$r) | Out-Null $w = $r.Right - $r.Left; $h2 = $r.Bottom - $r.Top $bmp = New-Object System.Drawing.Bitmap($w, $h2) $g = [System.Drawing.Graphics]::FromImage($bmp) $g.CopyFromScreen($r.Left, $r.Top, 0, 0, (New-Object System.Drawing.Size($w, $h2))) $bmp.Save($OutPng, [System.Drawing.Imaging.ImageFormat]::Png) $g.Dispose(); $bmp.Dispose() Write-Output "saved $OutPng ($w x $h2)"