本文将试图以下面的顺序讲解 的大部分内容:
、 的消息机制
、 介绍
、 链
、 钩子的作用范围
、 类型
、 回调函数
、 钩子的安装与卸载
、 实例演示
的消息机制
系统是以消息处理为其控制机制,系统通过消息为窗口过程(
)传递输入。系统和应用两者都可以产生消息。对于每个输入事件,例如用
户按下了键盘上的某个键、移动了鼠标、单击了一个控件上的滚动条,等等,系统都
将产生一系列消息。此外,对于应用带给系统的变化,如字体资源的改变、应用本身
窗口的改变,系统都将通过消息以响应这种变化。应用通过产生消息指示应用的窗口
完成特定的任务,或与其他应用的窗口进行通信。
每个窗口都有一个处理 系统发送消息的处理程序,称为窗口程序。它是
隐含在窗口背后的一段程序脚本,其中包含对事件进行处理的代码。
系统为每条消息指定了一个消息编号,例如当一个窗口变为活动窗口时,它事
实上是收到一条来自 系统的 !"# "$ 消息,该消息的编号为 ,它对
应于 #% 窗口的 &'(& 事件。对于窗口来说,诸如
、 &'(&、、)*
等事件,实际上对应的是窗口内部的消息处理程序,这些程序对于用户来讲是不可见的。
类似地,命令按钮也有消息处理程序,它的处理程序响应诸如 +%,""
和 )%,"" 之类的消息,即激活命令按钮的 事件。
的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供
了挂接各种回调函数-.的功能。这种挂钩函数-.类似扩充中断驱动程序,
挂钩上 可以挂接多个反调函数构成一个挂接函数链。系统产生的各种消息首先被送
到各种挂接函数,挂接函数根据各自的功能对消息进行监视、修改和控制等,然后交
还控 制权或将消息传递给下一个挂接函数以致最终达到窗口函数。 系统的
这种反调函数挂接方法虽然会略加影响到系统的运行效率,但在很多场合下是非常有
用的,通过合理有效地利用键盘事件的挂钩函数监控机制可以达到预想不到的良好效
果。
/0 介绍
0(钩子)是 提供的一种消息处理机制平台,是指在程序正常运 行中接受