Win7環境使用VC2008編寫DLL實現鍵盤鉤子
來源: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便完成了,用它來監視鍵盤事件,將會讓我們的程式實現更多個性化的功能。