1

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

MSDN 有一半的帮助;它解释了发生了什么,但它给出的例子可能并不详尽。

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

4

3 回答 3

3

使用InSendMessageInSendMessageEx确定您是否正在处理通过调用SendMessage函数发送的消息。

于 2009-05-10T08:19:44.910 回答
1

有些消息既不张贴也不发送。WM_PAINT、WM_TIMER 和其他一些情况就是如此。当发布的消息队列为空时,它们仅由 GetMessage 返回。

我不确定您要挂钩哪些应用程序,但是如果您不得不问这样的问题,那我/我有点害怕。对于开发人员来说,没有什么比花时间在用户报告的崩溃上更令人沮丧的了,只是发现原因是来自其他一些注入行为不端代码的应用程序。小心踩!

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

于 2009-05-10T19:35:49.990 回答
0

记录每条消息的 MSDN 页面应被视为权威来源:

WM_LBUTTONDOWN消息发布时...

WM_SETFOCUS消息在...之后发送到一个窗口

等等

于 2009-05-10T08:00:41.617 回答