vb api 控制 任務欄 桌面 托盤。。

VB無疑是最先進的編程工具之一,但在涉及windows 32位系統的核心編程方面——譬如一些高級功能的實現上,它仍然顯得有些力不從心,這需要我們充分利用vb的強大的Windows API函數調用能力來彌補。以下代碼將向您展示如何利用Windows API控制系統托盤(圖標)區、開始菜單、任務欄以及禁用/起用ctrl-alt-del、退出網絡登錄、立即關機、重新啓動等系統高級功能。

  啓動VB6,建立一個標準exe工程,添加14個command按鈕,caption屬性依次爲 “隱藏開始菜單”、“顯示開始菜單”、“隱藏系統托盤”、“顯示系統托盤”、“禁用 ctrl-alt-del”、“起用 ctrl-alt-del”、“隱藏任務欄”、“顯示任務欄”、“立即重新啓動”、“關機”、“退出網絡登陸”、“顯示關機對話框”,調整上述控件到適當位置,雙擊窗體,寫入以下代碼:



Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'尋找窗口列表中第一個符合指定條件的頂級窗口
'lpClassName指向包含了窗口類名的空中止(C語言)字串的指針;或設爲零,'表示接收任何類
'lpWindowName指向包含了窗口文本(或標籤)的空中止(C語言)字串的指針;'或設爲零,表示接收任何窗口標題


Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
'控制窗口的可見性
'hwnd窗口句柄,要向這個窗口應用由nCmdShow指定的命令
'nCmdShow爲窗口指定可視性方面的一個命令



Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
'在窗口列表中尋找與指定條件相符的第一個子窗口
'hWnd1在其中查找子的父窗口
'hWnd2從這個窗口後開始查找。這樣便可利用對FindWindowEx的多次調用找到符合條件的所有子窗口。如設爲零,表示從第一個子窗口開始搜索


Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long)
'退出windows,並用特定的選項重新啓動


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
'允許獲取和設置數量衆多的windows系統參數
'uAction指定要設置的參數


Private Const EWX_LOGOFF = 0'中止進程,然後註銷
Private Const EWX_SHUTDOWN = 1'關掉系統電源
Private Const EWX_REBOOT = 2'重新引導系統
Private Const EWX_FORCE = 4'強迫中止沒有響應的進程
Private Const SPI_SCREENSAVERRUNNING = 97


Private Sub Command1_Click() '隱藏開始菜單
Dim Handle As Long, FindClass As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Handle = FindWindowEx(FindClass, 0, "Button", vbNullString)
ShowWindow Handle, 0
End Sub


Private Sub Command11_Click() '起用 ctrl-alt-del
Dim ret As Integer
Dim pOld As Boolean
ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
End Sub


Private Sub Command12_Click() '禁用 ctrl-alt-del
Dim ret As Integer
Dim pOld As Boolean
ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)
End Sub


Private Sub Command13_Click() '立即重新啓動
ExitWindowsEx EWX_REBOOT, 0
End Sub


Private Sub Command14_Click() '關機
ExitWindowsEx EWX_SHUTDOWN, 0
End Sub


Private Sub Command15_Click() '退出網絡登陸
ExitWindowsEx EWX_LOGOFF, 0
End Sub


Private Sub Command16_Click() '顯示關機對話框
ExitWindowsEx EWX_FORCE, 0
End Sub


Private Sub Command2_Click() '顯示開始菜單
Dim Handle As Long, FindClass As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Handle = FindWindowEx(FindClass, 0, "Button", vbNullString)
ShowWindow Handle, 1
End Sub


Private Sub Command5_Click() '隱藏系統托盤
Dim FindClass As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Handle = FindWindowEx(FindClass, 0, "TrayNotifyWnd", vbNullString)
ShowWindow Handle, 0
End Sub


Private Sub Command6_Click() '顯示系統托盤
Dim FindClass As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Han

dle = FindWindowEx(FindClass, 0, "TrayNotifyWnd", vbNullString)
ShowWindow Handle, 1
End Sub


Private Sub Command7_Click() '顯示任務欄
Dim FindClass As Long, FindClass2 As Long, Parent As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
FindClass2 = FindWindowEx(FindClass, 0, "ReBarWindow32", vbNullString)
Parent = FindWindowEx(FindClass2, 0, "MSTaskSwWClass", vbNullString)
Handle = FindWindowEx(Parent, 0, "SysTabControl32", vbNullString)
ShowWindow Handle, 0
End Sub


Private Sub Command8_Click() '隱藏任務欄
Dim FindClass As Long, FindClass2 As Long, Parent As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
FindClass2 = FindWindowEx(FindClass, 0, "ReBarWindow32", vbNullString)
Parent = FindWindowEx(FindClass2, 0, "MSTaskSwWClass", vbNullString)
Handle = FindWindowEx(Parent, 0, "SysTabControl32", vbNullString)
ShowWindow Handle, 1
End Sub


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End
End Sub
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章