Hallo Franz,
wahrscheinlich wäre es besser gleich die erwähnte GetMonitorInfo() zu verwenden.
To get the work area of a monitor other than the primary display monitor, call the GetMonitorInfo function.
Ich habe momentan keinen ZUgriff auf einen zweiten Monitor um das zu überprüfen, aber falls die Anwendung mehrheitlich

auf einem zweiten Monitor angezeigt wird würde a[1] und a[2] höchstwahrscheinlich andere Werte als SystemParametersInfo() anzeigen, auf jeden Fall müsste a[3] aber false beinhalten.
LOCAL struRect IS _winrect
LOCAL a AS ARRAY
a := MonitorInfos ( GetDesktopWindow() )
? a [1] , a [2] , "primary monitor ?", a [3]
SystemParametersInfo(SPI_GETWORKAREA, 0, @struRect, 0)
? struRect.bottom , struRect.right
STRUCTURE _winMONITORINFO
MEMBER cbSize AS DWORD
MEMBER rcMonitor IS _winrect
MEMBER rcWork IS _winrect
MEMBER dwFlags AS DWORD
_DLL FUNCTION MonitorFromWindow ( hwnd AS PTR , dwFlags AS DWORD ) AS PTR PASCAL:User32.MonitorFromWindow
_DLL FUNCTION GetMonitorInfo ( hMonitor AS PTR, lpmi AS _winMONITORINFO ) AS LOGIC PASCAL:User32.GetMonitorInfoA
DEFINE MONITORINFOF_PRIMARY := 0x00000001
FUNCTION MonitorInfos ( hwnd AS PTR ) AS ARRAY PASCAL
LOCAL struInfo IS _winMONITORINFO
LOCAL hMonitor AS PTR
hMonitor := MonitorFromWindow( hwnd, MONITOR_DEFAULTTONEAREST )
struInfo.cbSize := _SIZEOF(_winMONITORINFO)
GetMonitorInfo( hMonitor, @struInfo)
RETURN { struInfo.rcWork.bottom - struInfo.rcWork.top , struInfo.rcWork.right - struInfo.rcWork.Left , struInfo.dwFlags == MONITORINFOF_PRIMARY }
Gruß
Karl-Heinz