安装钩子
函数原型:
HHOOK SetWindowsHookEx(
int idHook, //钩子类型
HOOKPROC lpfn, //回调函数地址
INSTANCE hMod, //钩子所在实例句柄
DWORD dwThreadId //钩子所监视的线程的线程号
)
参数说明:
idHook: 钩子类型。分两种:全局钩子何局部钩子
全局钩子可以抓取其他进程的消息,分为抓取其他进程中某一特定线程的消息和抓取所有进程的消息两种。
局部钩子只抓取当前进程的消息。
WH_CALLWNDPROC=4(发送到窗口的消息,由sendmessage触发)
lpfn:回调函数
当抓取到消息时,操作系统将自动调用该函数处理消息。在C#中要使用委托。
hMod: 对于线程钩子,参数传NULL
对于系统钩子,参数为钩子DLL的句柄
dwThreadId: 对于全局钩子,该参数为NULL
返回值:
成功: 返回SetWindowsHookEx返回所安装的钩子句柄
失败: NULL
回调函数 你要截获的消息就在这里进行。注意,回调函数应当短小精悍,不能占用太多时间,最好只用来捕获和传递消息,对消息处理应该放在其他地方
函数原型
LRESULT WINAPI MyHookProc(
int nCode, //指定是否需要处理该消息
WPARAM wParam, //包含该消息的附加消息
LPARAM lParam //包含该消息的附加消息
)
调用下一个钩子
LRESULT CallNextHookEx(
HHOOK hhk, //是您自己的钩子函数的句柄。用该句柄可以遍历钩子链
int nCode, //把传入的参数简单传给CallNextHookEx即可
WPARAM wParam, //把传入的参数简单传给CallNextHookEx即可
LPARAM lParam //把传入的参数简单传给CallNextHookEx即可
);
卸载钩子 用完后卸载 不然系统会慢
函数原型
BOOL UnhookWindowsHookEx(
HHOOK hhk //要卸载的钩子句柄
)