In DeviceMode steht am Anfang nur Unsinn, da es eine lokale Variable ist. EnumDisplaySettings setzt nicht alle Felder in DeviceMode, sodass danach immer noch zum Teil Unsinn in DeviceMode steht (z.B. vielleicht in dmDisplayOrientation bei XP, was Du dann ja unverändert zurückgibst). Als erstes würde ich zu Beginn DeviceMode ausnullen
ZeroMemory(@DeviceMode, sizeof(DeviceMode));
und dann noch die Größe eintragen
DeviceMode.dmSize := sizeof(DeviceMode));
Letzteres empfiehlt zumindest das
MSDN:
Zitat:
lpDevMode
[out] Pointer to a DEVMODE structure into which the function stores information about the specified graphics mode. Before calling EnumDisplaySettings, set the dmSize member to sizeof(DEVMODE), and set the dmDriverExtra member to indicate the size, in bytes, of the additional space available to receive private driver data.
GRuß, teebee