我知道某些消息类型直接发送到窗口过程,而其他消息类型则发布到线程的消息队列,但我还没有找到任何方法来确定是否发送或发布消息。
MSDN 有一半的帮助;它解释了发生了什么,但它给出的例子可能并不详尽。
是否有明确的已发送消息与已发布消息列表,或确定消息类型的方法?
使用InSendMessage
或InSendMessageEx
确定您是否正在处理通过调用SendMessage
函数发送的消息。
有些消息既不张贴也不发送。WM_PAINT、WM_TIMER 和其他一些情况就是如此。当发布的消息队列为空时,它们仅由 GetMessage 返回。
我不确定您要挂钩哪些应用程序,但是如果您不得不问这样的问题,那我/我有点害怕。对于开发人员来说,没有什么比花时间在用户报告的崩溃上更令人沮丧的了,只是发现原因是来自其他一些注入行为不端代码的应用程序。小心踩!
此外,Spy++(Visual Studio 附带的工具)将显示为任何给定的实时 Windows 应用程序发布/发送/接收了哪些消息。