標籤:調用 類型 連結 msu bug 狀態 子函數 遠程 鍵盤按鍵
安裝、卸載鉤子的相關函數
鉤子類型 按功能分:
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET:使你可以監視發送到視窗過程的訊息
3、WH_DEBUG 調試鉤子
4、WH_FOREGROUNDIDLE 當應用程式的前台線程大概要變成空閑狀態時,系統就會調用WH_FOREGROUNDIDLE
5、WH_JOURNALRECORD 監視和記錄輸入事件
6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD記錄事件
7、WH_KEYBOARD 鍵盤鉤子
9、WH_KEYBOARD_LL 低層鍵盤鉤子
10、WH_MOUSE 滑鼠鉤子
11、WH_MOUSE_LL 底層滑鼠鉤子
12、WH_SHELL 外殼鉤子
13、WH_MSGFILTER 和WH_SYSMSGFILTER 使我們可以監視菜單,捲軸,訊息框等
鉤子的作用範圍
++++++++++++++++
一共有兩種範圍(類型)的鉤子:局部的和遠端。
一、局部鉤子僅鉤掛您自己進程的事件。
二、遠端鉤子還可以將鉤掛其它進程發生的事件。
遠端鉤子又有兩種:
1、基於線程的 它將捕獲其它進程中某一特定線程的事件。簡言之,就是可
以用來觀察其它進程中的某一特定線程將發生的事件。
2、系統範圍的 將捕捉系統中所有進程將發生的事件訊息。
安裝鉤子:
實現Win32的系統鉤子,必須調用SDK中的API函數SetWindowsHookEx來安裝這個鉤子函數,這個函數的原型是 HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORDdwThreadId ) 第一個參數:idHook表示鉤子類型,它是和鉤子函數類型一一對應的。如,WH_KEYBOARD,WH_MOUSE。 第二個參數:Lpfn是鉤子函數的地址。 第三個參數:HMod是鉤子函數所在的執行個體的控制代碼。對於線程鉤子,該參數為NULL;對於系統鉤子,該參數為鉤子函數所在的DLL控制代碼。 (系統鉤子必須在DLL中) 第四個參數:dwThreadId 指定鉤子所監視的線程的線程號。對於全域鉤子,該參數為NULL。其中,全域鉤子函數必須包含在DLL(動態連結程式庫)中,而線程專用鉤子還可以包含在可執行檔中。得到控制權的鉤子函數在完成對訊息的處理後,如果想要該訊息繼續傳遞,那麼它必須調用另外一個SDK中的API函數CallNextHookEx()來傳遞它。鉤子函數也可以通過直接返回TRUE來丟棄該訊息,並阻止該訊息的傳遞。 執行SetWindowsHookEx(),會返回所安裝的鉤子控制代碼。
卸載鉤子
調用函數 BOOL UnhookWindowsHookEx( HHOOK hhk)卸載鉤子,其參數hhk就是執行SetWindowsHookEx()後返回的所安裝的鉤子的控制代碼。
鉤子[回調]函數
鉤子函數是一種特殊的回呼函數。鉤子監視的特定事件發生後,比如監聽鍵盤的事件,系統會調用鉤子函數進行處理。一般為下: LRESULT WINAPI MyHookProc(int nCode,WPARAM wParam,LPARAM lParam) 參數wParam和 lParam包含所鉤訊息的資訊,比如滑鼠位置、狀態,鍵盤按索引值等。nCode包含有關訊息本身的資訊,比如是否從訊息佇列中移出。
註:回呼函數就是一個通過函數指標調用的函數。如果你把函數的指標(地址)作為參數傳遞給另一個函數,當這個指標被用來調用其所指向的函數時,我們就說這是回呼函數。回呼函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。
HOOK(鉤子)函數