众所周知,消息传递在Windows系统中拥有极其重要的地位,而钩子是消息一种特殊的工具,可以截获指定窗口的消息,然后对消息进行处理或者不进行处理直接传递到下一层。
本程序分两部分:
1.KeyboardHook.dll 负责对指定窗口下钩子,删除钩子等操作。
2.KeyboardHookTest调用以上动态链接库,提供交互操作界面。
正文:
1.KeyboardHook.dll
1.1 SetHook(下钩程序)
void SetHook(DWORD dwThreadID)
{
HMODULE mod = GetModuleHandle("KeyboardHookDLL.dll"); //获取当前DLL模块句柄
g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, mod, 0);
g_dwThreadID = dwThreadID;
}
代码分析:
SetWindowsHookEx原型
HHOOK WINAPI SetWindowsHookEx(
_In_ int idHook,
_In_ HOOKPROC lpfn,
_In_ HINSTANCE hMod,
_In_ DWORD dwThreadId
);
第一个参数:idHook指示被下钩处理过程的类型
第二个参数是钩子的回调函数
第三个参数是第二个参数指示的回调函