请解释一下什么是所谓的”钩子“好吗?

解决方案 »

  1.   

    我也是在书中看到过,在窗体建立以前,就有两个函数,Windows 的所有消息都要经过检验,如果你编成的需要,可以 拦截 消息,已达到你编写程序的目的。
      

  2.   

    http://dev.csdn.net/develop/article/31/31825.shtm
      

  3.   

    钩子很多种,PE勾,API勾,反正不只一种了
      

  4.   

    钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定
    的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得
    到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传
    递该消息,还可以强制结束消息的传递。对每种类型的钩子由系统来维护一个钩子链
    ,最近安装的钩子放在链的开始,而最先安装的钩子放在最后,也就是后加入的先获
    得控制权。要实现Win32的系统钩子,必须调用SDK中的API函数SetWindowsHookEx来
    安装这个钩子函数,这个函数的原型是HHOOK SetWindowsHookEx(int 
    idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);,其中,第一个参数是
    钩子的类型;第二个参数是钩子函数的地址;第三个参数是包含钩子函数的模块句柄
    ;第四个参数指定监视的线程。如果指定确定的线程,即为线程专用钩子;如果指定
    为空,即为全局钩子。其中,全局钩子函数必须包含在DLL(动态链接库)中,而线
    程专用钩子还可以包含在可执行文件中。得到控制权的钩子函数在完成对消息的处理
    后,如果想要该消息继续传递,那么它必须调用另外一个SDK中的API函数
    CallNextHookEx来传递它。钩子函数也可以通过直接返回TRUE来丢弃该消息,并阻止
    该消息的传递。