spy++ 消息钩子漫谈
我们经常使用SPY++来查看应用程序所处理的消息情况,但经常在网上看到许多人在问,SPY++是如何把应用程序所处理的消息展现出来的呢?许多人提出了很好的建议,但是资料都太零散,查找起来比较费力,我在此整理出来供大家分享。
在讲具体问题之前,我们先讲一些题外话,这样对我们下面的讲解会有帮助,
一 消息队列
在WINDOWS操作系统中,我们比较了解的消息队列有两种:一种是系统消息队列,这种消息队列在整个系统中是唯一的;一种是线程窗口消息队列,每一个拥有GDI操作的线程都会创建一个窗口消息队列。系统队列主要存储公用的消息,如当我们点击鼠标或键盘时,相应的驱动程序就会把它们放到系统队列中,然后系统经过处理会把它们传递给对应的窗口消息队列。窗口消息队列是线程私有的,它存储着此程线未处理的消息。
WINDOWS消息有两种,队列消息和非队列消息:队列消息是经过窗口消息队列的消息,如用PostMessage发送的消息都是队列消息,队列按先进先出由线程进行处理,但