來源:VC編程網
鉤子(Hook),是Windows消息處理機制的一個平臺,應用程序可以在上面設置子程以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達後,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理window消息或特定事件。
使用鉤子可以讓我們的應用程序實現許多個性化的功能,VC憑藉着對系統api方便調用的優勢,用它來編寫實現鉤子的應用程序非常方便,Win7環境使用VC2008編寫DLL實現鼠標鉤子介紹了鼠標鉤子的編寫方法,本文將繼續介紹鍵盤鉤子的編寫方法。
1. 項目設置:
啓動VC2008以後,新建項目到當前解決方案,項目類型選擇:Visual C++->Win32->Win32項目,在應用程序設置界面,將應用程序類型設置成DLL,在添加公共頭文件以用於欄勾選MFC複選框。
爲了DLL導出函數的編寫方便,你也可以在附加選項欄勾選導出符號。
2. 添加自定義消息ID
|
|
該自定義消息用於鍵盤事件觸發時鉤子DLL將鼠標事件發送給接收消息的窗體。
3. 添加處理鍵盤鉤子的類CKeyboardHook
鍵盤鉤子類CMouseHook主要用於啓動和停止鍵盤鉤子,該類繼承自CObject,其頭文件的完整聲明如下:
|
4. 鍵盤鉤子的類CKeyboardHook類成員函數的定義
下面將介紹CKeyboardHook類成員函數的定義代碼:
4.1 鼠標鉤子類CKeyboardHook類的構造和析構函數:
|
構造函數沒有進行任何初始化工作,不過在析構函數中不要忘記調用stopHook函數卸載鍵盤鉤子。
4.2 安裝鍵盤鉤子的成員函數:
|
安裝鉤子的成員函數接受一個HWND的形參,用於向其發送關注的鍵盤事件消息,啓動鍵盤鉤子主要用到了api函數SetWindowsHookEx,其參數KeyboardProc是一個全局函數,該函數的具體定義我們將在後續內容介紹。安裝鉤子函數SenWindowsHookEx的原型如下:
|
該函數將一個應用程序定義的掛鉤處理過程安裝到掛鉤鏈中去,您可以通過安裝掛鉤處理過程來對系統的某些類型事件進行監控,這些事件與某個特定的線程或系統中的所有事件相關。更詳細的用法請參考MSDN。
4.3 卸載鍵盤鉤子的成員函數:
|
該函數實現鉤子的卸載和CKeyboardHook類的清理工作,卸載鉤子用到的api函數是UnhookWindowsHookEx,該函數的原型如下:
|
參數hhk是一個鍵盤鉤子的ID,即SetWindowsHookEx的返回值,該函數的返回值表示卸載鉤子是否成功。
5. 在KeyboardHook.cpp文件中聲明鍵盤鉤子函數KeyboardProc
該函數是鍵盤鉤子的具體實現函數,不能是類的成員函數,必須申明爲全局函數,其申明形式如下:
|
KeyboardProc函數的的主要功能是對鍵盤事件進行判斷,如果是我們關心的鍵盤事件,則將其以消息的方式發送到預先設定接收消息的窗口進行處理。具體實現代碼如下:
|
到此,一個使用VC實現的鍵盤鉤子DLL便完成了,用它來監視鍵盤事件,將會讓我們的程序實現更多個性化的功能。