
Heute wollte ich mal eine Bitmap anlegen, die genauso groß ist wie der Bildschirm. Gesagt, getan:
Add-Type -AssemblyName System.Drawing $video = @(Get-WmiObject Win32_VideoController -Filter "CurrentHorizontalResolution>0")[0] $width = $video.CurrentHorizontalResolution $height = $video.CurrentVerticalResolution Write-Host "Resolution: $width x $height" $bitmap = New-Object System.Drawing.Bitmap $width,$height $bitmap.Save('C:\TEMP\test.bmp')
Das wurde aber mit der Ausnahme bei New-Object quittiert, dass die Parameter ungültig sind. WTF? Es sind korrekte Werte drin, in meinem Fall 1920×1200…
Es stellt sich heraus, dass WMI für diese Werte ein unsigniertes Integer liefert (was ja bei Pixel-Abmessungen eines Bildschirms auch irgendwie sinnvoll ist), während der Objekt-Konstruktor „echte“ ganze Zahlen erwartet. PowerShell versucht an dieser Stelle keine Konvertierung, und schon kommt es zu einer Kollision. Mit
$width = [int]$video.CurrentHorizontalResolution $height = [int]$video.CurrentVerticalResolution
funktioniert es dann.
Happy bitmapping!
Antworten