Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Object, ByVal fuWinIni As Long) As Long
Const SPI_GETWORKAREA As Long = 48
Public Structure Rect
Public Left As Long
Public Top As Long
Public Right As Long
Public Bottom As Long
End Structure
Public Enum AlignmentConst
vbLeft = 0
vbRight = 1
vbTop = 2
vbBottom = 3
End Enum
Public Function GetWorkArea() As Rect
'PIXELS
Dim Result As Long
Dim WorkArea As Rect
Result = SystemParametersInfo(SPI_GETWORKAREA, 0&, WorkArea, 0&)
GetWorkArea = WorkArea
End Function
Public Function GetAlignment() As AlignmentConst
'Find the alignment of the taskbar
Dim WorkArea As Rect
Dim Align As AlignmentConst
WorkArea = GetWorkArea
If WorkArea.Left <> 0 Then
'the taskbar MUST be right aligned
Align = AlignmentConst.vbLeft
Else
If WorkArea.Top <> 0 Then
'The taskbar MUST be bottom aligned
Align = AlignmentConst.vbTop
Else
If (WorkArea.Bottom - WorkArea.Top) = Screen.PrimaryScreen.Bounds.Height Then
'If the workarea height is equal to the screen height then
'the taskbar MUST be left aligned
Align = AlignmentConst.vbRight
Else
Align = AlignmentConst.vbBottom
End If
End If
End If
GetAlignment = Align
End Function
Public Function TaskBarDimensions() As Rect
'Find out what the taskbars', left, top, right and bottom values are
'in TWIPS
Const X = 0
Const Y = 1
Dim WorkArea As Rect
Dim TaskBarDet As Rect
Dim TwipsPP(2) As Byte 'Twips Per Pixel
WorkArea = GetWorkArea
TwipsPP(X) = Screen.PrimaryScreen.Bounds.Left
TwipsPP(Y) = Screen.PrimaryScreen.Bounds.Top
'set the taskbars' default values to the screen size
TaskBarDet.Top = 0
TaskBarDet.Bottom = Screen.PrimaryScreen.Bounds.Height
TaskBarDet.Left = 0
TaskBarDet.Right = Screen.PrimaryScreen.Bounds.Width
'change the appropiate value according to alignment
Select Case GetAlignment
Case AlignmentConst.vbLeft
TaskBarDet.Right = (WorkArea.Left * TwipsPP(X))
Case AlignmentConst.vbRight
TaskBarDet.Left = (WorkArea.Right * TwipsPP(X))
Case AlignmentConst.vbTop
TaskBarDet.Bottom = (WorkArea.Top * TwipsPP(Y))
Case AlignmentConst.vbBottom
TaskBarDet.Top = (WorkArea.Bottom * TwipsPP(Y))
End Select
'return result
TaskBarDimensions = TaskBarDet
End Function