- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
钩子函数使用说明
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息
的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获
并处理送给 其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子
可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。
这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完
成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。可见,
利用钩子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握
钩子的编程方法是很有必要的。
钩子的类型
一. 按事件分类,有如下的几种常用类型
(1) 键盘钩子和低级键盘钩子可以监视各种键盘消息。
(2) 鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。
(3) 外壳钩子可以监视各种Shell事件消息。比如启动和关闭应用程序。
(4) 日志钩子可以记录从系统消息队列中取出的各种事件消息。
(5) 窗口过程钩子监视所有从系统消息队列发往目标窗口的消息。
此外,还有一些特定事件的钩子提供给我们使用,不一一列举。
下面描述常用的Hook类型:
1、WH_CALLWNDPROC和WH_CALLWNDPROCRETHooks
WH_CALLWNDPROC和WH_CALLWNDPROCRETHooks使你可以监视发送到窗口
过程的消息。系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROCHook
子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRETHook子程。
WH_CALLWNDPROCRETHook传递指针到CWPRETSTRUCT结构,再传递到Hook
子程。CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包
括了与这个消息关联的消息参数。
2、WH_CBTHook
在以下事件之前,系统都会调用WH_CBTHook子程,这些事件包括:
1.激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;
2.完成系统指令;
3.来自系统消息队列中的移动鼠标,键盘事件;
4.设置输入焦点事件;
5.同步系统消息队列事件。
Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。
3、WH_DEBUGHook
在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用
WH_DEBUGHook子程。你可以使用这个Hook来决定是否允许系统调用与其他Hook
关联的Hook子程。
4、WH_FOREGROUNDIDLEHook
Create PDF with GO2PDF for free, if you wish to remove this line, click here to buy Virtual PDF Printer
当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE
Hook执行低优先级的任务。当应用程序的前台线程大概要变成空闲状态时,系
统就会调用WH_FOREGROUNDIDLEHook子程。
5、WH_GETMESSAGEHook
应用程序使用WH_GETMESSAGEHook来监视从GetMessageorPeekMessage
函数返回的消息。你可以使用WH_GETMESSAGEHook去监视鼠标和键盘输入,以
及其他发送到消息队列中的消息。
6、WH_JOURNAL
文档评论(0)