一、钩子
为了监视或控制windows的系统事件,windows提供钩子技术。Windows应用可以安装一个子进程来监控windows中消息的往来,还能把消息到达目的窗口过程之前处理某种类型的消息。
Windows系统为每种类型的钩子管理一个独立的钩子链。钩子链是Windows应用程序定义回调函数的指针列表。Windows会把该消息一个接着一个传给每一个钩子链的钩子过程(回调函数)。有些类型钩子过程只能监控消息。有些类型钩子过程能够禁止消息到达下一个钩子过程或目的窗口。
二、钩子过程
钩子过程可以是全局的,监控Windows中所有线程的消息,也可以监控特定线程的消息。全局钩子过程必须在一个独立的DLL模块中。钩子过程如下:LRESULT CALLBACK HookProc(int nCode,WAPRAM wParam,LPARAM lParam)
{
}
参数nCode是钩子代码,每中钩子类型都有自己的钩子代码。
参数wParam和lParam的值取取决与钩子代码,其包含消息的信息。
SetWindowsHookex会把新的钩子过程安装在钩子链的开始。
CallNextHookEx 把消息传到下一个过程。
UnhookWindowsHookEx 卸载钩子过程
三、钩子类型
Windows系统中钩子类型很多,最常用的钩子类型:WH_KEYBOARD_LL和WH_MOUSE_LL。
WH_KEYBOARD_LL : 底层键盘钩子,可以捕获全部的系统按键
WH_MOUSE_LL : 底层鼠标钩子,可以截获全部的鼠标事件。
五、代码示例 WH_KEYBOARD_LL
1、钩子过程
2. 安装钩子过程
3. 卸载钩子过程