Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#1

Definition von MONITORINFOEX falsch?

  Alt 12. Feb 2009, 13:20
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?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat