- 1 - 编写钩子程序的步骤分为三步:定义钩子函数、安装钩子和卸载钩子
1.定义钩子函数 钩子函数是一种特殊的回调函数
钩子监视的特定事件发生后,系统会调用钩子函数进行处理
不同事件的钩子函数的形式是各不相同的
下面以鼠标钩子函数举例说明钩子函数的原型: LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam) 参数wParam 和 lParam 包含所钩消息的信息,比如鼠标位置、状态,键盘按键等
nCode 包含有关消息本身的信息,比如是否从消息队列中移出
我们先在钩子函数中实现自定义的功能,然后调用函数 CallNextHookEx
把钩子信息传递给钩子链的下一个钩子函数
CallNextHookEx
的原型如下: LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ) 参数 hhk 是钩子句柄
nCode、 wParam 和 lParam 是钩子函数
当然也可以通过直接返回TRUE 来丢弃该消息,就阻止了该消息的传递
2.安装钩子 在程序初始化的时候,调用函数SetWindowsHookEx 安装钩子
其函数原型为: HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) 参数idHook 表示钩子类型,它是和钩子函数类型一一对应的
比如,WH_KEYBOARD 表示安装的是键盘钩子,WH_MOUSE 表示是鼠标钩子等等
Lpfn 是钩子函数的地址
HMod 是钩子函数所在的实例的句柄
对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL 句柄