如何确定是发送还是发布消息类型?

时间:2009-05-10 07:55:38

标签: windows winapi capture messages

我知道某些消息类型会直接发送到窗口过程,而其他消息类型会发布到线程的消息队列中,但是我没有找到任何方法来确定是否会发送或发布消息。

MSDN有一半的帮助;它解释了what's going on,但它给出的例子可能并非详尽无遗。

是否有确定的已发送消息与已发布消息的列表,或者确定消息类型的方法?

3 个答案:

答案 0 :(得分:3)

使用InSendMessageInSendMessageExdetermine if you are processing a message that was sent by a call SendMessage功能。

答案 1 :(得分:1)

有些消息既未发布也未发送。 WM_PAINT,WM_TIMER和其他一些案例就属于这种情况。当发布的消息队列为空时,GetMessage只返回它们。

我不确定你试图挂钩的应用程序,但如果你不得不提出这样的问题,那么我有点害怕。对于开发人员而言,花费时间在用户报告的崩溃上只是为了发现原因来自其他注入行为不端代码的应用程序,没有什么比这更令人沮丧的了。仔细踩!

此外,Spy ++(Visual Studio附带的工具)将显示为任何给定的实时Windows应用程序发布/发送/接收的消息。

答案 2 :(得分:0)

记录每封邮件的MSDN页面应被视为此权威的来源:

  

The WM_LBUTTONDOWN message is posted when ...

     

The WM_SETFOCUS message is sent to a window after ...