::::::::::模块里:::: —————————————modAppBar.bas—————————————— Option ExplicitType POINTAPI x As Long y As Long End TypeType RECT Left As Long Top As Long Right As Long Bottom As Long End TypeType APPBARDATA cbSize As Long hwnd As Long uCallbackMessage As Long uEdge As Long rc As RECT lParam As Long ' message specific End Type Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long 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 Long Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Const WM_MOUSEMOVE = &H200 Public Const WM_ACTIVATE = &H6 Public Const WM_WINDOWPOSCHANGED = &H47Public Const ABE_BOTTOM = 3 Public Const ABE_LEFT = 0 Public Const ABE_RIGHT = 2 Public Const ABE_TOP = 1 Public Const ABM_ACTIVATE = &H6 Public Const ABM_GETAUTOHIDEBAR = &H7 Public Const ABM_GETSTATE = &H4 Public Const ABM_GETTASKBARPOS = &H5 Public Const ABM_NEW = &H0 Public Const ABM_QUERYPOS = &H2 Public Const ABM_REMOVE = &H1 Public Const ABM_SETAUTOHIDEBAR = &H8 Public Const ABM_SETPOS = &H3 Public Const ABM_WINDOWPOSCHANGED = &H9 Public Const ABN_FULLSCREENAPP = &H2 Public Const ABN_POSCHANGED = &H1 Public Const ABN_STATECHANGE = &H0 Public Const ABN_WINDOWARRANGE = &H3Public Const SM_CXSCREEN = 0 Public Const SM_CYSCREEN = 1Public Const HWND_TOP = 0 Public Const HWND_TOPMOST = -1Public Const SWP_NOACTIVATE = &H10 Public Const SWP_SHOWWINDOW = &H40 ____________________________________________________________________-- 需要:::::::::: Picture1 timer1:::::::::::::::::_______________________________AppBar.frm_________________________________________ Option ExplicitDim BarData As APPBARDATADim bAutoHide As Boolean Dim bAnimate As Boolean Private Sub Form_Load() Picture1.AutoSize = True Picture1.BorderStyle = 0 Dim lResult As Long Move 0, 0, 0, 0 Screen.MousePointer = vbDefault
bAutoHide = True bAnimate = True
BarData.cbSize = Len(BarData) BarData.hwnd = hwnd BarData.uCallbackMessage = WM_MOUSEMOVE lResult = SHAppBarMessage(ABM_NEW, BarData) lResult = SetRect(BarData.rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)) BarData.uEdge = ABE_TOP lResult = SHAppBarMessage(ABM_QUERYPOS, BarData) If bAutoHide Then BarData.rc.Bottom = BarData.rc.Top + 2 'tbrToolBar.Bands("ToolBar").Height + 6 lResult = SHAppBarMessage(ABM_SETPOS, BarData) BarData.lParam = True lResult = SHAppBarMessage(ABM_SETAUTOHIDEBAR, BarData) If lResult = 0 Then bAutoHide = False Else lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top - 42, BarData.rc.Right - BarData.rc.Left, 44, SWP_NOACTIVATE) End If End If If Not bAutoHide Then BarData.rc.Bottom = BarData.rc.Top + 42 lResult = SHAppBarMessage(ABM_SETPOS, BarData) lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE) End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Static bRecieved As Boolean Dim lResult As Long Dim newRC As RECT Dim lMessage As Long
lMessage = x / Screen.TwipsPerPixelX
If bRecieved = False Then bRecieved = True Select Case lMessage Case WM_ACTIVATE lResult = SHAppBarMessage(ABM_ACTIVATE, BarData) Case WM_WINDOWPOSCHANGED lResult = SHAppBarMessage(ABM_WINDOWPOSCHANGED, BarData) Case ABN_STATECHANGE lResult = SetRect(BarData.rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)) BarData.uEdge = ABE_TOP lResult = SHAppBarMessage(ABM_QUERYPOS, BarData) If bAutoHide Then BarData.rc.Bottom = BarData.rc.Top + 2 lResult = SHAppBarMessage(ABM_SETPOS, BarData) BarData.lParam = True lResult = SHAppBarMessage(ABM_SETAUTOHIDEBAR, BarData) If lResult = 0 Then bAutoHide = False Else lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top - 42, BarData.rc.Right - BarData.rc.Left, 44, SWP_NOACTIVATE) End If End If If Not bAutoHide Then BarData.rc.Bottom = BarData.rc.Top + 42 lResult = SHAppBarMessage(ABM_SETPOS, BarData) lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE) End If Case ABN_FULLSCREENAPP Beep End Select bRecieved = False End If End SubPrivate Sub Form_Resize() Picture1.Move 0, 0, Width, Height End SubPrivate Sub Form_Unload(Cancel As Integer) If BarData.hwnd <> 0 Then SHAppBarMessage ABM_REMOVE, BarData End Sub Private Sub Picture1_DblClick() Unload Me End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Dim lResult As Long Dim iCounter As Integer If Top < 0 Then If bAnimate Then For iCounter = -36 To -1 BarData.rc.Top = iCounter lResult = SetWindowPos(BarData.hwnd, 0&, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE) Next End If BarData.rc.Top = 0 lResult = SetWindowPos(BarData.hwnd, HWND_TOPMOST, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_SHOWWINDOW) tmrHide.Enabled = True End If End Sub Private Sub tmrHide_Timer() Dim lResult As Long Dim lpPoint As POINTAPI Dim iCounter As Integer lResult = GetCursorPos(lpPoint) If lpPoint.x < Left \ Screen.TwipsPerPixelX Or lpPoint.x > (Left + Width) \ Screen.TwipsPerPixelX Or lpPoint.y < Top \ Screen.TwipsPerPixelY Or lpPoint.y - 10 > (Top + Height) \ Screen.TwipsPerPixelY Then If bAnimate Then For iCounter = -1 To -37 Step -1 BarData.rc.Top = iCounter lResult = SetWindowPos(BarData.hwnd, 0&, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE) Next End If BarData.rc.Top = -42 lResult = SetWindowPos(BarData.hwnd, HWND_TOPMOST, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 44, SWP_NOACTIVATE) tmrHide.Enabled = False End If End Sub
但你想实现像任务栏一样的功能的,需要枚举窗体枚举窗体的方法可参考:
http://www.dapha.net/vb/list.asp?id=643
码名称 显示工作条上的运行窗口
代码类型 系统控制
运行环境 VB5.0/Win9x
授权方式 免费代码
代码大小 4K
代码评价
上传时间 2001-11-29
相关链接 主页
本日下载 1 本周:39 总计:65
下载地址1 下载
代码简介 显示工作条上的运行窗口,程序还获得每个运行窗口的图标,另外可以把选中的窗口放到最上.
Option ExplicitType POINTAPI
x As Long
y As Long
End TypeType RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypeType APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long ' message specific
End Type
Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
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 Long
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Const WM_MOUSEMOVE = &H200
Public Const WM_ACTIVATE = &H6
Public Const WM_WINDOWPOSCHANGED = &H47Public Const ABE_BOTTOM = 3
Public Const ABE_LEFT = 0
Public Const ABE_RIGHT = 2
Public Const ABE_TOP = 1
Public Const ABM_ACTIVATE = &H6
Public Const ABM_GETAUTOHIDEBAR = &H7
Public Const ABM_GETSTATE = &H4
Public Const ABM_GETTASKBARPOS = &H5
Public Const ABM_NEW = &H0
Public Const ABM_QUERYPOS = &H2
Public Const ABM_REMOVE = &H1
Public Const ABM_SETAUTOHIDEBAR = &H8
Public Const ABM_SETPOS = &H3
Public Const ABM_WINDOWPOSCHANGED = &H9
Public Const ABN_FULLSCREENAPP = &H2
Public Const ABN_POSCHANGED = &H1
Public Const ABN_STATECHANGE = &H0
Public Const ABN_WINDOWARRANGE = &H3Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1Public Const HWND_TOP = 0
Public Const HWND_TOPMOST = -1Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
____________________________________________________________________--
需要:::::::::: Picture1 timer1:::::::::::::::::_______________________________AppBar.frm_________________________________________
Option ExplicitDim BarData As APPBARDATADim bAutoHide As Boolean
Dim bAnimate As Boolean
Private Sub Form_Load()
Picture1.AutoSize = True
Picture1.BorderStyle = 0
Dim lResult As Long Move 0, 0, 0, 0
Screen.MousePointer = vbDefault
bAutoHide = True
bAnimate = True
BarData.cbSize = Len(BarData)
BarData.hwnd = hwnd
BarData.uCallbackMessage = WM_MOUSEMOVE
lResult = SHAppBarMessage(ABM_NEW, BarData)
lResult = SetRect(BarData.rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN))
BarData.uEdge = ABE_TOP
lResult = SHAppBarMessage(ABM_QUERYPOS, BarData)
If bAutoHide Then
BarData.rc.Bottom = BarData.rc.Top + 2 'tbrToolBar.Bands("ToolBar").Height + 6
lResult = SHAppBarMessage(ABM_SETPOS, BarData)
BarData.lParam = True
lResult = SHAppBarMessage(ABM_SETAUTOHIDEBAR, BarData)
If lResult = 0 Then
bAutoHide = False
Else
lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top - 42, BarData.rc.Right - BarData.rc.Left, 44, SWP_NOACTIVATE)
End If
End If
If Not bAutoHide Then
BarData.rc.Bottom = BarData.rc.Top + 42
lResult = SHAppBarMessage(ABM_SETPOS, BarData)
lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE)
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Static bRecieved As Boolean
Dim lResult As Long
Dim newRC As RECT
Dim lMessage As Long
lMessage = x / Screen.TwipsPerPixelX
If bRecieved = False Then
bRecieved = True
Select Case lMessage
Case WM_ACTIVATE
lResult = SHAppBarMessage(ABM_ACTIVATE, BarData)
Case WM_WINDOWPOSCHANGED
lResult = SHAppBarMessage(ABM_WINDOWPOSCHANGED, BarData)
Case ABN_STATECHANGE
lResult = SetRect(BarData.rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN))
BarData.uEdge = ABE_TOP
lResult = SHAppBarMessage(ABM_QUERYPOS, BarData)
If bAutoHide Then
BarData.rc.Bottom = BarData.rc.Top + 2
lResult = SHAppBarMessage(ABM_SETPOS, BarData)
BarData.lParam = True
lResult = SHAppBarMessage(ABM_SETAUTOHIDEBAR, BarData)
If lResult = 0 Then
bAutoHide = False
Else
lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top - 42, BarData.rc.Right - BarData.rc.Left, 44, SWP_NOACTIVATE)
End If
End If
If Not bAutoHide Then
BarData.rc.Bottom = BarData.rc.Top + 42
lResult = SHAppBarMessage(ABM_SETPOS, BarData)
lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE)
End If
Case ABN_FULLSCREENAPP
Beep
End Select
bRecieved = False
End If
End SubPrivate Sub Form_Resize()
Picture1.Move 0, 0, Width, Height
End SubPrivate Sub Form_Unload(Cancel As Integer)
If BarData.hwnd <> 0 Then SHAppBarMessage ABM_REMOVE, BarData
End Sub
Private Sub Picture1_DblClick()
Unload Me
End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim lResult As Long
Dim iCounter As Integer
If Top < 0 Then
If bAnimate Then
For iCounter = -36 To -1
BarData.rc.Top = iCounter
lResult = SetWindowPos(BarData.hwnd, 0&, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE)
Next
End If
BarData.rc.Top = 0
lResult = SetWindowPos(BarData.hwnd, HWND_TOPMOST, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_SHOWWINDOW)
tmrHide.Enabled = True
End If
End Sub
Private Sub tmrHide_Timer()
Dim lResult As Long
Dim lpPoint As POINTAPI
Dim iCounter As Integer
lResult = GetCursorPos(lpPoint)
If lpPoint.x < Left \ Screen.TwipsPerPixelX Or lpPoint.x > (Left + Width) \ Screen.TwipsPerPixelX Or lpPoint.y < Top \ Screen.TwipsPerPixelY Or lpPoint.y - 10 > (Top + Height) \ Screen.TwipsPerPixelY Then
If bAnimate Then
For iCounter = -1 To -37 Step -1
BarData.rc.Top = iCounter
lResult = SetWindowPos(BarData.hwnd, 0&, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE)
Next
End If
BarData.rc.Top = -42
lResult = SetWindowPos(BarData.hwnd, HWND_TOPMOST, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 44, SWP_NOACTIVATE)
tmrHide.Enabled = False
End If
End Sub