WndProc和hook区别

3 篇文章 0 订阅

WndProc和hook区别

 1)WndProc函数作用:主要在程序中拦截并处理系统消息和自定义消息 

      比如:windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息。这个函数就是默认的消息处理函数。你可以重载这个函数来制定自己的消息处理流程.

在CS中,可以重写WndProc函数,来捕捉所有发生有窗口消息。这样,我们就可以"篡改"传入的消息,而人为的让窗口改变行为。

 

      2)钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子同时又分为全局(整个系统)钩子和局部(某个线程)钩子,全局钩子可以截断windows下所有程序带来的消息响应,而局部钩子只能截断对应线程带来的消息响应

      钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控

制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

 

      几者区别:

      1、wndproc只能拦截当前应用程序的消息,例如你在wndproc中定义了鼠标函数,鼠标单击时输出:Console.WriteLine("wndproc:mouse down")

            1) 当你在这个窗口内点击以下鼠标时,程序输出wndproc:mouse down

            2)当你在窗口外单击鼠标时,程序没有接收到消息,不做任何输出

      2、全局钩子(hook)可以拦截系统内所有程序带来的响应消息,例如你定义了一个全局hook鼠标函数,鼠标单击时输出:Console.WriteLine("hook:mouse down")

            1) 当你在这个窗口内点击以下鼠标时,程序输出hook:mouse down

            2)当你在窗口外单击鼠标时,程序输出hook:mouse down

      3、局部钩子(hook)用于拦截指定线程的响应消息(类似于wndproc,但是优先级要早于wndproc,例如你定义了一个局部hook鼠标函数,鼠标单击时输出:Console.WriteLine("hook:mouse down")

            1)当你在这个窗口内点击以下鼠标时,程序输出hook:mouse down

            2)当你在窗口外单击鼠标时,程序没有接收到消息,不做任何输出 

    

      备注,优先级按如下顺序

           1) 当你在这个窗口内点击以下鼠标时

                    全局hook》局部hook》wndproc

            2)当你在窗口外单击鼠标时

                     只有全局hook响应

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值