Beim Versuch, eine erweiterte Monitorinfo inklusive dem Devicenamen zu erhalten war ich lange erfolglos. Wie man sieht, hat die erweiterte Struktur genau ein Feld mit 32 Byte mehr als die "Kurzversion":
Delphi-Quellcode:
tagMONITORINFOA = record
cbSize: DWORD;
rcMonitor: TRect;
rcWork: TRect;
dwFlags: DWORD;
end;
CCHDEVICENAME = 32;
tagMONITORINFOEXA = record
cbSize: DWORD;
rcMonitor: TRect;
rcWork: TRect;
dwFlags: DWORD;
szDevice: array[0..CCHDEVICENAME] of AnsiChar;
end;
Beim Füllen von cbSize vor dem Aufruf von GetMonitorInfo habe ich SizeOf verwendet. Dabei ergibt
Delphi-Quellcode:
SizeOf(TMonitorInfo) -> 40
SizeOf(TMonitorInfoEx) -> 76
Da die Struktur aber maximal 72 Byte groß sein darf, lehnt GetMonitorInfo die Ausführung mit GetLastError 87 (Falscher Parameter) ab. Jetzt kann man natürlich einfach 4 abziehen um cbSize zu füllen, aber schön ist das nicht. Sollte die Record-Definition evtl. eher ein packed record sein?