友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VC语言6.0程序设计从入门到精通-第102章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






         接库中收集通用的 MFC 资源,应用程序特定资源会被本地化。  



    这样,应用程序和动态链接库都成功地建立完毕,Languages                        应用程序将根据操作系统 

                                                /英文版的应用程序运行结果分别如图 

的不同版本来决定是加载中文资源还是英文资源。中文 

10…6 和图 10…7 所示。  



                                                                    



                           图 10…6    汉化的中文版应用程序界面  



                                                                    



                             图 10…7    英文版的应用程序界面  



 ·270 ·  


…………………………………………………………Page 282……………………………………………………………

                                                第 10 章    动态链接库  



10。7    使用钩子(Hook )函数  



   Windows 系统是建立在事件驱动的机制上的,即整个系统都是通过消息的传递来实现的。 

而钩子是 Windows 系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消 

息,然后完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息, 

截获发往目标窗口的消息并进行处理。这样,就可以在系统中安装自定义的钩子,监视系统 

中特定事件的发生,完成特定的功能,比如截获键盘/ 鼠标的输入、屏幕取词、日志监视等。 

可见,利用钩子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握钩子 

的编程方法是很有必要的。  



10。7。1    钩子函数的类型  



   1.按事件类型分类  



   按事件分类,钩子函数有如下几种常用类型。  

   o  键盘钩子和低级键盘钩子可以监视各种键盘消息;  

   o   鼠标钩子和低级鼠标钩子可以监视各种鼠标消息;  

   o  外壳钩子可以监视各种 Shell 事件消息。比如启动和关闭应用程序;  

   o   日志钩子可以记录从系统消息队列中取出的各种事件消息;  

   o  窗口过程钩子监视所有从系统消息队列发往目标窗口的消息。  

   下面对常用的 Hook 类型进行介绍:  



   (1)WH_CALLWNDPROC 和 WH_CALLWNDPROCRET Hooks  

   WH_CALLWNDPROC 和 WH_CALLWNDPROCRET  Hooks 可以监视发送到窗口过 

程的消息。系统在消息发送到接收窗口过程之前调用 WH_CALLWNDPROC Hook 子程, 

并 且 在 窗 口 过 程 处 理 完 消 息 之 后 调 用 WH_CALLWNDPROCRET  Hook 子 程 。 

WH_CALLWNDPROCRET Hook 传递指针到 CWPRETSTRUCT 结构,再传递到 Hook 子程。 

CWPRETSTRUCT 结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息 

关联的消息参数。  



   (2 )WH_CBT Hook  

   在如下事件之前,系统都会调用 WH_CBT Hook 子程。    

   o  激活、建立、销毁、最小化、最大化、移动、改变尺寸等窗口事件。    

   o  完成系统指令。  

   o  来自系统消息队列中的移动鼠标、键盘事件。  

   o  设置输入焦点事件。  

   o  同步系统消息队列事件。    

   o  Hook 子程的返回值确定系统是否允许或者防止这些操作中的一个。  



                                                        ·271 ·  


…………………………………………………………Page 283……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



    (3 )WH_DEBUG Hook  

    在系统调用系统中与其他 Hook 关联的 Hook 子程之前,系统会调用 WH_DEBUG  Hook 

子程。可以使用这个 Hook 来决定是否允许系统调用与其他 Hook 关联的 Hook 子程。  



    (4 )WH_FOREGROUNDIDLE Hook  

    当应用程序的前台线程处于空闲状态时,可以使用 WH_FOREGROUNDIDLE Hook 执行 

低 优 先 级 的 任 务 。 当 应 用 程 序 的 前 台 线 程 要 变 成 空 闲 状 态 时 , 系 统 就 会 调 用 

WH_FOREGROUNDIDLE Hook 子程。  



    (5 )WH_GETMESSAGE Hook  

    应用程序用 WH_GETMESSAGE Hook 来监视从 GetMessage 或者 PeekMessage 函数返回 

的消息。可以使用 WH_GETMESSAGE  Hook 去监视鼠标和键盘输入,以及其他发送到消息 

队列中的消息。  



    (6 )WH_JOURNALPLAYBACK Hook  

    WH_JOURNALPLAYBACK  Hook 使应用程序可以插入消息到系统消息队列。可以使用 

该  Hook 回放用  WH_JOURNALRECORD  Hook    记录下来的连续的鼠标和键盘事件。只要 

WH_JOURNALPLAYBACK   Hook   已 经 安 装 , 正 常 的 鼠 标 和 键 盘 事 件 就 是 无 效 的 。 

WH_JOURNALPLAYBACK  Hook    是全局   Hook ,它不能像线程特定         Hook 一样使用。 

WH_JOURNALPLAYBACK Hook 返回超时值,这个值告诉系统在处理来自回放 Hook 当前消 

息 之 前 需 要 等 待 多 长 时 间 ( 毫 秒 )。 这 就 使     Hook 可 以 控 制 实 时 事 件 的 回 放 。 

WH_JOURNALPLAYBACK 是 system…wide local hooks,它们不会被映射到任何进程的地址空 

间中。  



    (7 )WH_JOURNALRECORD Hook  

    WH_JOURNALRECORD Hook 用来监视和记录输入事件。可以使用这个 Hook 记录连续的 

鼠 标 和 键 盘 事 件 , 然 后 通 过 使 用        WH_JOURNALPLAYBACK    Hook  来 回 放 。 

WH_JOURNALRECORD   Hook   是 全 局  Hook , 它 不 能 像 线 程 特 定  Hook 一 样 使 用 。 

WH_JOURNALRECORD 是 system…wide local hooks,它们不会被映射到任何进程的地址空 

间中。  



    (8)WH_KEYBOARD Hook  

    在应用程序中,WH_KEYBOARD  Hook 用来监视 WM_KEYDOWN 和 WM_KEYUP 消 

息,这些消息通过 GetMessage 或 PeekMessage  function 返回。可以用该 Hook 来监视输入到 

消息队列中的键盘消息。  



    (9 )WH_KEYBOARD_LL Hook  

    WH_KEYBOARD_LL Hook 监视输入到线程消息队列中的键盘消息。  



    (10)WH_MOUSE Hook  

    WH_MOUSE  Hook 监视从 GetMessage 或者 PeekMessage 函数中返回的鼠标消息。使用 

这个 Hook 监视输入到消息队列中的鼠标消息。  



    (11)WH_MOUSE_LL Hook  

    WH_MOUSE_LL Hook 监视输入到线程消息队列中的鼠标消息。  



 ·272 ·  


…………………………………………………………Page 284……………………………………………………………

                                                     第 10 章    动态链接库  



   (12)WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks  

   WH_MSGFILTER 和 WH_SYSMSGFILTER  Hooks 可以监视菜单、滚动条、消息框、对 

话框消息并且发现用户使用  ALT+TAB  或者  ALT+ESC  组合键切换窗口。WH_MSGFILTER  

Hook 只能监视传递到菜单、滚动条、消息框的消息,以及传递到通过安装了 Hook 子程的应 

用 程 序 建 立 的 对 话 框 的 消 息 。 WH_SYSMSGFILTER   Hook 监 视 所 有 应 用 程 序 消 息 。 

WH_MSGFILTER 和 WH_SYSMSGFILTER  Hooks 可以在模式循环期间过滤消息,这等价于 

在主消息循环中过滤消息。通过调用 CallMsgFilter  function 可以直接调用 WH_MSGFILTER  

Hook 。通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同 

在主消息循环里一样。  



   (13)WH_SHELL Hook  

   外壳应用程序可以使用 WH_SHELL Hook 去接收重要的通知。当外壳应用程序为激活状 

态并且当顶层窗口建立或者销毁时,系统�
返回目录 上一页 下一页 回到顶部 赞(1) 踩(1)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!