Windows传递消息的顺序是这样的:
在将消息传递给目标窗口之前,如果有要拦截它的处理(例如你想编一个锁鼠标的程序)就会先给该应用处理。(这就是hook(钩子))
该机制可以使你知道特定应用或系统所将要接受的消息,于是我们可以对该消息先做一些处理以影响目标应用或系统对该消息的处理。这就是钩子机制的实质。
比如上面那个锁鼠标的例子,你可以设置一个系统范围的鼠标钩子,然后在该钩子处理中把该消息扔掉,这样一来本应响应该消息的应用就收不到鼠标消息,等于是锁住了鼠标。

解决方案 »

  1.   

        钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志钩子可以监视和记录输入事件。钩子分为线程专用钩子和全局钩子,线程专用钩子只监视指定的线程,要监视系统中的所有线程,必须用到全局钩子。对于全局钩子,钩子函数必须包含在独立的动态链接库(DLL)中,这样才能被各种相关联的应用程序调用。
      

  2.   

    刚看,从msdn翻的:
    HOOK(钩子)过程
    由应用程序定义的回调函数,当它的地址被安装到hook链中后我们就称它为HOOK过程。
    hook procedure
    An application-defined callback function whose address has been installed 
    in a hook chain. 回调函数
    用于同步读取队列中的消息。它是应用程序定义的函数,由MSMQ(也就是MS的消息队列)在
    某个消息可用,出现超时或者发生错误时呼叫。
    callback function 
    Used to asynchronously read the messages in a queue. It is an application-defined
    function that MSMQ calls when a message is available, a time-out occurs, or an
     error occurs. 
      

  3.   

    为什么叫钩子呢?hook应该是陷井的意思吧。
      

  4.   

    具体见msdn目录中
    平台sdk\Windows Base Service\Interprocess Communication\Hooks老兄,msdn是个好东东,几乎有你需要的一切