mfc中钩子的使用(来自个人博客)

mfc中钩子的使用(来自个人博客)

ID:34250610

大小:67.30 KB

页数:4页

时间:2019-03-04

mfc中钩子的使用(来自个人博客)_第1页
mfc中钩子的使用(来自个人博客)_第2页
mfc中钩子的使用(来自个人博客)_第3页
mfc中钩子的使用(来自个人博客)_第4页
资源描述:

《mfc中钩子的使用(来自个人博客)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、钩子的安装与卸载  系统是通过调用位于钩子链表最开始处的钩子函数而进行消息拦截处理的,因此在设置钩子时要把回调函数放置于钩子链表的链首,操作系统会使其首先被调用。由函数SetWindowsHookEx()负责将回调函数放置于钩子链表的开始位置。SetWindowsHookEx()函数原型声明为:HHOOKSetWindowsHookEx(intidHook;HOOKPROClpfn;HINSTANCEhMod;DWORDdwThreadId);  其中,参数idHook指定了钩子的类型,可以使用的类型有以下13种:WH_CALLWNDPROC系统将消息发送到指定窗口之前的“钩子”WH_C

2、ALLWNDPROCRET消息已经在窗口中处理的“钩子”WH_CBT基于计算机培训的“钩子”WH_DEBUG差错“钩子”WH_FOREGROUNDIDLE前台空闲窗口“钩子”WH_GETMESSAGE接收消息投递的“钩子”WH_JOURNALPLAYBACK回放以前通过WH_JOURNALRECORD“钩子”记录的输入消息WH_JOURNALRECORD输入消息记录“钩子”WH_KEYBOARD键盘消息“钩子”WH_MOUSE鼠标消息“钩子”WH_MSGFILTER对话框、消息框、菜单或滚动条输入消息“钩子”WH_SHELL外壳“钩子”WH_SYSMSGFILTER系统消息“钩子”  参

3、数lpfn为指向钩子函数的指针,也即回调函数的首地址;参数hMod标识了钩子处理函数所处模块的句柄;参数dwThreadId指定被监视的线程,如果明确指定了某个线程的ID就只监视该线程,此时的钩子即为线程钩子;如果该参数被设置为0,则表示此钩子为监视系统所有线程的全局钩子。此函数在执行完后将返回一个钩子句柄。  在SetWindowsHookEx()函数完成对钩子的安装后,如果被监视的事件发生,系统会立即调用位于相应钩子链表开始处的钩子函数进行处理,每一个钩子函数在进行处理时都要考虑是否需要把事件传递给下一个钩子处理函数。如果需要传递,就要调用函数CallNestHookEx()。尽管在

4、理论上不调用CallNestHookEx()也并不算错,但在实际使用时还是强烈建议无论是否需要进行事件传递都要在过程的最后调用一次CallNextHookEx(),否则将会引起一些无法预知的系统行为或是系统锁定。该函数将返回位于钩子链表中的下一个钩子处理过程的地址,至于具体的返回值类型则要视所设置的钩子类型而定。CallNextHookEx()的函数原型为:LRESULTCallNextHookEx(HHOOKhhk;intnCode;WPARAMwParam;LPARAMlParam);  其中,参数hhk为由SetWindowsHookEx()函数返回的当前钩子句柄;参数nCode为

5、传给钩子过程的事件代码;参数wParam和lParam则为传给钩子处理函数的参数值,其具体含义同设置的钩子类型有关。  由于安装钩子对系统的性能有一定的影响,所以在钩子使用完毕后应及时将其卸载以释放其所占资源。释放钩子的函数为UnhookWindowsHookEx(),该函数比较简单只有一个参数用于指定此前由SetWindowsHookEx()函数所返回的钩子句柄,原型声明如下:BOOLUnhookWindowsHookEx(HHOOKhhk);  使用鼠标钩子  由于系统全局钩子在功能上完全覆盖了线程局部钩子,因此其实际使用范围要远比线程局部钩子广泛的多。本节也由此着重对系统全局钩子的

6、使用进行介绍。  鼠标钩子是钩子中比较常用也是使用比较简单的一类钩子。下面给出的应用示例将通过安装鼠标全局钩子来捕获鼠标当前所处窗口的窗口标题。由于本例程使用了全局钩子,因此首先构造全局钩子的载体——动态链接库。考虑到 Win32DLL与Win16DLL存在的差别,在Win32环境下要在多个进程间共享数据,就必须采取一些措施将待共享的数据提取到一个独立的数据段,并通过def文件将其属性设置为读写共享:#pragmadata_seg("mydata")HWNDglhPrevTarWnd=NULL;//上次鼠标所指的窗口句柄HWNDglhDisplayWnd=NULL;//显示目标窗口标题编

7、辑框的句柄HWNDglhHook=NULL;//安装的鼠标钩子句柄HINSTANCEglhInstance=NULL;//DLL实例句柄#pragmadata_seg()……SECTIONS//def文件中将数据段TestData设置为读写共享TestDataREADWRITESHARED  在完成上述准备工作后,在动态库输出函数StartHook()中调用SetWindowsHookEx()函数完成对全局鼠标钩子的安装,设定鼠标钩

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。