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