Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen
  • Page:
  • 1

TOPIC:

Verfügbare Bildschirmgröße 27 Dec 2021 09:01 #20891

  • lagraf
  • lagraf's Avatar
  • Topic Author


  • Posts: 294
  • Hallo,
    wie kann ich die verfügbare Bildschirmfläche (Breite und Höhe) in VO 2.8 ermitteln?
    hScrDC := CreateDC(Cast2Psz("DISPLAY"), NULL_PSZ, NULL_PSZ , NULL_PSZ )
    GetDeviceCaps(hScrDC, HORZRES)
    GetDeviceCaps(hScrDC, VERTRES)
    bestimmt die gesamte Bildschirmgröße. Ich benötige aber den verfügbaren Platz (abzüglich Taskleiste unten oder anderswo platziert).

    Please Log in or Create an account to join the conversation.

    Verfügbare Bildschirmgröße 27 Dec 2021 11:44 #20892

    • Karl-Heinz
    • Karl-Heinz's Avatar


  • Posts: 765
  • Hallo Franz,

    Eine Suche findet das hier:

    docs.microsoft.com/en-us/windows/win32/a...ystemparametersinfoa

    [...]
    SPI_GETWORKAREA
    0x0030

    Retrieves the size of the work area on the primary display monitor. The work area is the portion of the screen not obscured by the system taskbar or by application desktop toolbars
    [...]

    LOCAL struRect IS _winRECT 
    
    IF SystemParametersInfo(SPI_GETWORKAREA, 0, @struRect, 0)
     
     ?  struRect.Top , struRect.Bottom , struRect.Left, struRect.Right
    
    ENDIF

    Gruß
    Karl-Heinz

    Please Log in or Create an account to join the conversation.

    Verfügbare Bildschirmgröße 27 Dec 2021 17:36 #20895

    • Karl-Heinz
    • Karl-Heinz's Avatar


  • Posts: 765
  • 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

    Please Log in or Create an account to join the conversation.

    Verfügbare Bildschirmgröße 03 Jan 2022 15:23 #20984

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 294
  • Hallo Karl-Heinz,
    danke für deinen Code!

    Die Anwendung läuft ausschließlich auf einem System mit 1 Monitor, sodaß die erste Variante genügen wird. Ich selber habe auch nur 1 Monitor, kanns daher auch nicht für mehrere Monitore probieren.

    Please Log in or Create an account to join the conversation.

    • Page:
    • 1
    Moderators: wriedmann