下面的程序可以判断任务栏是否是自动隐藏,不知对你是否有启发!
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate Type APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long
End TypePrivate Declare Function SHAppBarMessage Lib "shell32.dll" _
(ByVal dwMessage As Long, pData As APPBARDATA) As LongConst ABM_GETSTATE = &H4
Const ABS_ALWAYSONTOP = &H2
Const ABS_AUTOHIDE = &H1Private Sub Command1_Click()
Dim x As APPBARDATA
Dim l As Long
x.hwnd = 0
x.cbSize = Len(x)
l = SHAppBarMessage(ABM_GETSTATE, x)
If l And 1 Then
Debug.Print "自动隐藏"
Else
Debug.Print "没有自动隐藏"
End If
End Sub
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate Type APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long
End TypePrivate Declare Function SHAppBarMessage Lib "shell32.dll" _
(ByVal dwMessage As Long, pData As APPBARDATA) As LongConst ABM_GETSTATE = &H4
Const ABS_ALWAYSONTOP = &H2
Const ABS_AUTOHIDE = &H1Private Sub Command1_Click()
Dim x As APPBARDATA
Dim l As Long
x.hwnd = 0
x.cbSize = Len(x)
l = SHAppBarMessage(ABM_GETSTATE, x)
If l And 1 Then
Debug.Print "自动隐藏"
Else
Debug.Print "没有自动隐藏"
End If
End Sub
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40'隐藏任务栏
rtn = FindWindow("Shell_traywnd", "")
SetWindowPos rtn, 0, 0, 0, 0, 0, SWP_HIDEWINDOW
'显示任务栏
rtn = FindWindow("Shell_traywnd", "")
SetWindowPos rtn, 0, 0, 0, 0, 0, SWP_SHOWWINDOW
try it。
能够在用户光标离开工具栏后发送一个消息到工具栏消息处理函数,然后在消息处理函数
中处理任务栏的隐藏。可能我说的不对,因为我使用了ABM_SETAUTOHIDEBAR消息,返回的
结果也是正确的,但是任务栏并没有自动隐藏。