vb.net如何調用Hook

來源:互聯網
上載者:User
本文不是講解Hook原理的文章,僅是討論一下在vb.net如何調用Hook功能,以及vb.net中API使用的變化問題。由於Hook種類較多,本文中以最常用的鍵盤Hook為例進行分析。一、先來看一下在vb中是如何?的。截的是空格鍵。表現的目標是:一個form,上面有一個textbox,不管焦點是否落在textbox裡,按空格鍵,不會在textbox中輸入一個空格,而是變成在textbox中寫入一句話:“HOOK成功!”1.在一個Module中寫入下列代碼:調用的API的申明:Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long函數說明:本函數是用於啟動Hook設定。idHook是Hook的類型,即處理的訊息類型。Lpfn是Hook子程(函數或過程)的地址指標。如果dwThreadId參數為0或是一個由別的進程建立的線程的標識,lpfn必須指向DLL中的Hook子程。除此以外,lpfn可以指向當前進程的一段Hook子程代碼(我們利用的就是這個性質)。hMod是應用程式執行個體的控制代碼,標識包含lpfn所指的子程的DLL。如果dwThreadId 標識當前進程建立的一個線程,而且子程代碼位於當前進程,hMod必須為NULL。dwThreadId是與安裝Hook子程相關聯的線程的標識符,如果為0,Hook子程與所有的線程關聯。 傳回值:函數成功則返回Hook子程的控制代碼,失敗返回NULL。Declare Function UnHookWindowsHookEx Lib "user32"  (ByVal hHook As Long) As Long函數說明:    本函數是解除Hook之用。hHook是Hook函數的控制代碼。 Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long函數說明:本函數的作用是將當前Hook鏈中的Hook資訊傳遞給下一個Hook。hHook是當前Hook的控制代碼,一個應用程式接收這個控制代碼,作為先前調用SetWindowsHookEx函數的結果。nCode指的是傳遞到當前Hook過程的Hook代碼,下一個Hook過程使用這段代碼去決定如何處理Hook資訊。wParam指傳遞給當前Hook過程的wParam值,它的具體含義是由當前Hook鏈中的相關Hook的類型決定的。lParam指傳遞給當前Hook過程的lParam值,它的具體含義是由當前Hook鏈中的相關Hook的類型決定的。 2. 定義的常量是:Public hnextHookproc As LongPublic Const WH_KEYBOARD = 2 ‘這個是表明Hook的種類是鍵盤HookPublic Const PM_KEY_SPACE = &H20 ‘空格鍵 3.程式碼片段Public Sub UnHookKBD()  ‘解鍵盤HOOK函數    If hnextHookproc <> 0 Then       UnHookWindowsHookEx hnextHookproc       hnextHookproc = 0    End IfEnd Sub Public Function EnableKBDHook() ‘設定鍵盤HOOK    If hnextHookproc <> 0 Then       Exit Function    End If    hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _                MyKBHFunc, App.hInstance, 0)    If hnextHookproc <> 0 Then       EnableKBDHook = hnextHookproc    End IfEnd Function Public Function MyKBHFunc(ByVal iCode As Long, _    ByVal wParam As Long, ByVal lParam As Long) As Long   MyKBHFunc = 0   If iCode < 0 Then    MyKBHFunc = CallNextHookEx(hnextHookproc, iCode, wParam, lParam)    Exit Function  End IfIf wParam = PM_KEY_SPACE Then  ''偵測 有沒有按到空格鍵       MyKBHFunc = 1       ‘加入自己的代碼,用於表明響應    form1.text1.text=”Hook成功!”   End IfEnd Function4.在Form中的代碼很簡單:Private Sub Form_Load()    Call EnableKBDHookEnd Sub Private Sub Form_Unload(Cancel As Integer)   Call UnHookKBDEnd Sub打完收工!現在在form表單狀態下,敲空格鍵,就會響應你在MyKBHFunc函數中寫的代碼了。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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