RSS
StartseiteKnowledge LibraryTop 10Impressum

10.15 Wie kann ich die Größe des verfügbaren Arbeitsbereichs ermitteln?

Von: Thorsten Dörfler

Über das Screen-Objekt und seinen Height- und Width-Eigeschaften, bekommen Sie die Größe des gesamten Desktops. Durch diverse Leisten, wie der Taskleiste oder benutzerdefinierten Symbolleisten, kann dieser Bereich jedoch eingeschränkt sein. Diesen eingeschränkten Bereich können Sie über die API Funktion SystemParametersInfo in Erfahrung bringen:

Private Type RECT
  Left    As Long
  Top     As Long
  Right   As Long
  Bottom  As Long
End Type

Private Const SPI_GETWORKAREA As Long = 48

Private Declare Function SystemParametersInfo Lib "user32" _
        Alias "SystemParametersInfoA" ( _
		ByVal uAction As Long, _
		ByVal uParam As Long, _
		ByRef lpvParam As Any, _
		ByVal fuWinIni As Long _
			  ) As Long
			  
Public Sub WorkArea(Optional ByRef Left As Single, _
                    Optional ByRef Top As Single, _
                    Optional ByRef Width As Single, _
                    Optional ByRef Height As Single, _
                    Optional ByVal UseTwips As Boolean)
  Dim lRC As RECT

  SystemParametersInfo SPI_GETWORKAREA, 0, lRC, 0
  If UseTwips Then
    Left = CSng(lRC.Left) * Screen.TwipsPerPixelX
    Top = CSng(lRC.Top) * Screen.TwipsPerPixelY
    Width = CSng(lRC.Right - lRC.Left) * Screen.TwipsPerPixelX
    Height = CSng(lRC.Bottom - lRC.Top) * Screen.TwipsPerPixelY
  Else
    Left = CSng(lRC.Left)
    Top = CSng(lRC.Top)
    Width = CSng(lRC.Right - lRC.Left)
    Height = CSng(lRC.Bottom - lRC.Top)
  End If
End Sub

Angewendet:

Private Sub Command1_Click()
  Dim lLeft As Single
  Dim lTop As Single
  Dim lWidth As Single
  Dim lHeight As Single

  WorkArea lLeft, lTop, lWidth, lHeight, False
  
  Debug.Print "Left:"; lLeft, "Top:"; lTop, _
              "Width:"; lWidth, "Height:"; lHeight
End Sub