HHOOK鉤子編程

++++{ 源代碼:Mousehook、Mouse }+++++

---------------------------------------------------------------------------------------
原理:
鉤子程序在特定消息發送沒達到目的窗口之前,將消息截獲,做出想要的處理,最後發送給目標窗口或不發送。

消息種類:
如鍵盤鉤子、鼠標鉤子、外殼鉤子->截獲啟動和關閉應用程序的消息、日誌鉤子->監視和記錄輸入事件。

建立多個鉤子系統會建立一個鉤子鏈錶,運作方式類似於棧,鉤子安裝順序遵從後來居上,捕獲的消息從表頭流向表尾。
最後安裝的鉤子最有可能處理該消息。

基本函數:
1.安裝鉤子;
在程序初始化的時候,調用函數SetWindowsHookEx安裝鉤子。

函數原型:
HHOOK SetWindowsHookEx(int idHook,//鉤子類型
            HOOK PROClpfn,//鉤子函數的地址
            INSTANCE hMod,//鉤子函數所在的實例的句柄;對於線程鉤子,為NULL;對於系統鉤子,參數為鉤子函數所在的DLL句柄
          DORD dwThreadId //指定鉤子所監視的線程的線程號。全局鉤子,該參數為NULL
            )

SetWindowsHookEx返回所安裝的鉤子句柄


2.定義鉤子函數:

LRESULT  CALLBACK  HookProc(int  nCode, WPARAM  wParam,  LPARAM  lParam)


參數 wParam 和 lParam 包含所鉤消息信息。

nCode包含有關消息的本身。

用函數 CallNextHookEx 八鉤子信息傳遞給鉤子鏈的下一個鉤子函數。

CallNextHookEx.的原型如下:
 
LRESULT  CallNextHookEx(HHOOK hhk, int nCode,WPARAM wParam,LPARAM lParam)
 
 
 
hhk是鉤子句柄。
 
nCode、wParam和lParam是鉤子函數的參數。
 
當然也可以通過直接返回TRUE來丟棄該消息,就阻止了該消息的傳遞。
 
 
 
3.卸載鉤子:
 
當不再使用鉤子時,必須及時卸載。簡單的調用函數:
 
BOOL  UnhookWindowsHookEx(HHOOK  hhk)即可。


--------------------------------------------------------------------------------------

鉤子函數具體類型:
-------------------
1.WH_CALLWNDPROC     //窗口鉤子,當系統向目標發送消息時將觸發此鉤子

2.WH_CALLWNDPROCRET     //窗口鉤子,當窗口處理完消息后將觸發此鉤子 

3.WH_CBT   //系統級鉤子,當 Windows 激活、產生、釋放、最大化、最小化或改變窗口時都將觸發此事件。

4.WH_DEBUG    //調試鉤子 

5.WH_GETMESSAGE    //當網消息隊列中增加一個消息時將觸發此鉤子

6.WH_JOURNALPLAYBACK     //回放鉤子,可以用戶與播放已記錄的鼠標和鍵盤操作

7.WH_JOURNALRECORD     //記錄鉤子,可以用於記錄鼠標和鍵盤操作,木馬程序使用此鉤子盜取從鍵盤敲入的密碼

8.WH_KEYBOARD     //當敲擊鍵盤時觸發

9.WH_MOUSE    //有鼠標操作時觸發此鉤子

10.WH_MSGFILTER   //消息過濾鉤子

11.WH_SHELL   //Shell鉤子

12.WH_SYSMSGFILTER    //系統消息過濾鉤子

13.WH_HARDWARE 當調用 GetMessage 或 PeekMessage 來從消息隊列中查詢非鼠標鍵盤消息時 

14.WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的應用程序很少使用 

(1)如果對於同一事件(如滑鼠消息)既安裝了執行緒勾子又安裝了系統勾子,那麼系統會自動先調用執行緒勾子,然後調用系統勾子。 

(2)對同一事件消息可安裝多個勾子處理過程,這些勾子處理過程形成了勾子鏈。當前勾子處理結束後應把勾子資訊傳遞給下一個勾子函數。 

(3)勾子特別是系統勾子會消耗消息處理時間,降低系統性能。只有在必要的時候才安裝勾子,在使用完畢後要及時卸載。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值