天天看點

什麼是鈎子(Hook)

   鈎子(Hook)是Windows提供的一種消息處理機制平台,是指在程式正常運作中接受資訊之前預先啟動的函數,用來檢查和修改傳給該程式的資訊,(鈎子)實際上是一個處理消息的程式段,通過系統調用,把它挂入系統。每當特定的消息發出,在沒有到達目的視窗前,鈎子程式就先捕獲該消息,亦即鈎子函數先得到控制權。這時鈎子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。注意:安裝鈎子函數将會影響系統的性能。監測“系統範圍事件”的系統鈎子特别明顯。因為系統在處理所有的相關事件時都将調用您的鈎子函數,這樣您的系統将會明顯的減慢。是以應謹慎使用,用完後立即解除安裝。還有,由于您可以預先截獲其它程序的消息,是以一旦您的鈎子函數出了問題的話必将影響其它的程序。

鈎子的作用範圍

    一共有兩種範圍(類型)的鈎子,局部的和遠端的。局部鈎子僅鈎挂自己程序的事件。遠端的鈎子還可以将鈎挂其它程序發生的事件。遠端的鈎子又有兩種: 基于線程的鈎子将捕獲其它程序中某一特定線程的事件。簡言之,就是可以用來觀察其它程序中的某一特定線程将發生的事件。 系統範圍的鈎子将捕捉系統中所有程序将發生的事件消息。 

Hook 類型

    Windows共有14種Hooks,每一種類型的Hook可以使應用程式能夠監視不同類型的系統消息處理機制。下面描述所有可以利用的Hook類型的發生時機。詳細内容可以查閱MSDN,這裡隻介紹我們将要用到的兩種類型的鈎子。

    (1)WH_KEYBOARD_LL Hook

        WH_KEYBOARD_LL Hook監視輸入到線程消息隊列中的鍵盤消息。

    (2)WH_MOUSE_LL Hook

        WH_MOUSE_LL Hook監視輸入到線程消息隊列中的滑鼠消息。

使用完鈎子後,要進行解除安裝,這個可以寫在析構函數中。