安装、卸载钩子的相关函数
钩子类型 按功能分:
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET:使你可以监视发送到窗口过程的消息
3、WH_DEBUG 调试钩子
4、WH_FOREGROUNDIDLE 当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE
5、WH_JOURNALRECORD 监视和记录输入事件
6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件
7、WH_KEYBOARD 键盘钩子
9、WH_KEYBOARD_LL 低层键盘钩子
10、WH_MOUSE 鼠标钩子
11、WH_MOUSE_LL 底层鼠标钩子
12、WH_SHELL 外壳钩子
13、WH_MSGFILTER 和WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等
钩子的作用范围
++++++++++++++++
一共有两种范围(类型)的钩子:局部的和远程的。
一、局部钩子仅钩挂您自己进程的事件。
二、远程的钩子还可以将钩挂其它进程发生的事件。
远程的钩子又有两种:
1、基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可
以用来观察其它进程中的某一特定线程将发生的事件。
2、系统范围的 将捕捉系统中所有进程将发生的事件消息。
安装钩子:
实现Win32的系统钩子,必须调用SDK中的API函数SetWindowsHookEx来安装这个钩子函数,这个函数的原型是 HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) 第一个参数:idHook表示钩子类型,它是和钩子函数类型一一对应的。如,WH_KEYBOARD,WH_MOUSE。 第二个参数:Lpfn是钩子函数的地址。 第三个参数:HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 (系统钩子必须在DLL中) 第四个参数:dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。其中,全局钩子函数必须包含在DLL(动态链接库)中,而线程专用钩子还可以包含在可执行文件中。得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个SDK中的API函数CallNextHookEx()来传递它。钩子函数也可以通过直接返回TRUE来丢弃该消息,并阻止该消息的传递。 执行SetWindowsHookEx(),会返回所安装的钩子句柄。
卸载钩子
调用函数 BOOL UnhookWindowsHookEx( HHOOK hhk)卸载钩子,其参数hhk就是执行SetWindowsHookEx()后返回的所安装的钩子的句柄。
钩子[回调]函数
钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,比如监听键盘的事件,系统会调用钩子函数进行处理。一般为下: LRESULT WINAPI MyHookProc(int nCode,WPARAM wParam,LPARAM lParam) 参数wParam和 lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键值等。nCode包含有关消息本身的信息,比如是否从消息队列中移出。
注:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。