您还必须使用一些本机方法来访问任务栏的属性。
用法:
TaskbarInfo.Height
班级:
Public NotInheritable Class TaskbarInfo
<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
End Function
<DllImport("shell32.dll", SetLastError:=True)> _
Public Shared Function SHAppBarMessage(ByVal dwMessage As ABM, <[In]()> ByRef pData As APPBARDATA) As IntPtr
End Function
Enum ABM As UInteger
[New] = &H0
Remove = &H1
QueryPos = &H2
SetPos = &H3
GetState = &H4
GetTaskbarPos = &H5
Activate = &H6
GetAutoHideBar = &H7
SetAutoHideBar = &H8
WindowPosChanged = &H9
SetState = &HA
End Enum
Enum ABE As UInteger
Left = 0
Top = 1
Right = 2
Bottom = 3
End Enum
<StructLayout(LayoutKind.Sequential)> _
Structure APPBARDATA
Public cbSize As UInteger
Public hWnd As IntPtr
Public uCallbackMessage As UInteger
Public uEdge As ABE
Public rc As RECT
Public lParam As Integer
End Structure
<StructLayout(LayoutKind.Sequential)> _
Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
Public Shared Function Height() As Integer
Dim taskbarHandle As IntPtr = FindWindow("Shell_TrayWnd", Nothing)
Dim data As New APPBARDATA()
data.cbSize = CUInt(Marshal.SizeOf(GetType(APPBARDATA)))
data.hWnd = taskbarHandle
Dim result As IntPtr = SHAppBarMessage(ABM.GetTaskbarPos, data)
If result = IntPtr.Zero Then
Throw New InvalidOperationException()
End If
Return Rectangle.FromLTRB(data.rc.left, data.rc.top, data.rc.right, data.rc.bottom).Height
End Function
End Class
资料来源:http ://winsharp93.wordpress.com/2009/06/29/find-out-size-and-position-of-the-taskbar/