KeyboardProc
鍵盤鉤子處理函式:
首先鍵盤鉤子處理函式的函式名是可以自定義的 ,例如:MyKeyboardProc()
函式原型:
LRESULT CALLBACK KeyboardProc( int code,
WPARAM wParam,
LPARAM lParam
);
參數:
code:
根據這個數值決定怎樣處理訊息
如果 code 小於0,則 必須讓KeyboardProc()函式返回CallNextHookEx()
code可以是下列值:
HC_ACTION:wParam和lParam包含按鍵訊息
HC_NOREMOVE:wParam和lParam包含按鍵訊息,並且按鍵訊息不能從訊息佇列中移除(一個被PeekMessage函式調用的請求,指定
PM_NOREMOVE標誌)
wParam:
按鍵的虛擬鍵值訊息,例如:VK_F1
lParam:
32位記憶體,內容描述包括:指定擴展鍵值,掃描碼,上下文,重複次數。
0-15位:
描述:按下鍵盤次數。
16-23位
指定掃描碼. 依賴於OEM
24位
當24位為1時候:表示按鍵是擴展鍵
當24位為0時候:表示按鍵是是數字鍵盤按鍵
25-28位
保留位
29位
上下文鍵:為1時: ALT按下,其他情況為0
30位
如果是按鍵按下後傳送的訊息,30位為0,如果是按鍵抬起後30位為1;
31位
指定轉變狀態:31位為0時候,按鍵正在被按下,為1時候,按鍵正在被釋放
返回值:
如果參數1:code小於0,則必須 返回CallNextHookEx(),也就是返回CallNextHookEx()的返回值
如果參數1:code大於等於0,並且鉤子處理函式沒有處理訊息,強烈建議您 返回CallNextHookEx()的返回值,否則當您安裝WH_KEYBOARD鉤子時
,鉤子將不會得到通知,並返回錯誤結果。
如果鉤子處理的訊息,您可以返回一個非0值,防止系統把訊息傳遞給鉤子鏈中的下一個鉤子,或者把訊息傳送到目標視窗。
備註:
安裝鍵盤鉤子需要把WH_KEYBOARD作為SetWindowsHookEx()的第一個參數,並且把鍵盤鉤子處理函式的函式指針作為SetWindowsHookEx()的第2 個參數.
需求:
頭檔案:Declared in Winuser.h, include Windows.h
導入庫:無
最小系統需求:Windows 95, Windows NT 3.1
相關:
Hooks Overview, CallNextHookEx, GetMessage, PeekMessage, SetWindowsHookEx, WM_KEYUP, WM_KEYDOWN
附贈例子:
//禁止所有鍵盤輸入
//DLL項目中代碼
//DLL.cpp
#include <windows.h>
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
return 1;
}
_declspec(dllexport) void SetHook()
{
SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,::GetModuleHandle(TEXT("DLL.dll")),0);
}
調用端代碼:
_declspec(DllImport) void SetHook();
SetHook();
後衛大師 製作版
23:49 2008-9-21