利用Windows API獲得系統進階功能

來源:互聯網
上載者:User
利用Windows 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", "")
Handle = 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.