http://xory001.blog.163.com/blog/static/136215947201181805757873/

Windows的消息分2种,进队和不进队.

    WH_CALLWNDPROC钩子能监视不进队消息,但是不能修改或者拦截(即丢弃),仅仅是监视,不进队消息通常是SendMessage触发的.

    WH_GETMESSAE钩子发生在GetMessage或者PeekMessage调用开始,但是还没返回的时候,此钩子能监视或者修改或者丢弃进队消息,在监视到消息的时候,如果想要修改,可以直接赋值,如果要丢弃,可以把消息类型赋值为 WM_NULL,Windows就会忽略此消息并丢弃.PostMessage可以触发进队消息.

    更详细的解释和讨论,可参见http://topic.csdn.net/u/20100127/17/8a272bff-5739-4208-a707-6a7493bfa2cc.html,其中13楼详细描述了二者的区别.摘录如下:

楼主我给你个最完整的解答,要给我加分哦。 
  WH_CALLWNDPROC类型的钩子专门用来截获通过SendMessage()函数发送到窗口的消息,不管是系统内部调用的SendMessage()函数还是用户进程中调用的SendMessage()函数。SendMessage()把消息直接交给窗口过程WndProc()来处理,WndProc()处理完消息后SendMessage()函数才返回(return resultValue;).如果设置了WH_CALLWNDPROC类型的钩子,则当SendMessage()把消息交给WndProc时,在WndProc尚未执行前,系统调用CallWndProc钩子函数,钩子函数执行后才执行窗口过程WndProc。 
  上面所说的“发送消息”与“寄送消息”相对应,发送消息是SendMessage(),寄送消息是PoseMessage(),PostMessage把消息发送到程序的消息队列,而不是直接交给窗口过程WndProc。寄送的消息由窗口过程WndProc自动到消息队列中去取,用GetMessage()函数。 
  一般来说,键盘消息与鼠标消息都是通过PostMessge函数寄送到程序消息队列中的,所以楼主不明白的地主就在这里了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值