消息钩子使用教程

豆豆网   技术应用频道   2006年12月01日  【字号: 收藏本文

本文详细介绍消息钩子使用教程

  几点说明:

  (1)如果对于同一事件(如鼠标消息)既安装了线程勾子又安装了系统勾子,那么系统会自动先调用线程勾子,然后调用系统勾子。

  (2)对同一事件消息可安装多个勾子处理过程,这些勾子处理过程形成了勾子链。当前勾子处理结束后应把勾子信息传递给下一个勾子函数。

  (3)勾子特别是系统勾子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装勾子,在使用完毕后要及时卸载。

  --------------------------------------------------------------------------------

  钩子类型

  每一种类型的Hook可以使应用程序能够监视不同类型的系统消息处理机制。下面描述所有可以利用的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子程,这些事件包括:

  1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;

  2. 完成系统指令;

  3. 来自系统消息队列中的移动鼠标,键盘事件;

  4. 设置输入焦点事件;

  5. 同步系统消息队列事件。

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

  3、WH_DEBUG Hook

  在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用WH_DEBUG Hook子程。你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程。

作者:姜山    责编:豆豆技术应用

正在加载评论...