在哪里可以找到所有排队和非排队Win32消息的列表?

时间:2015-01-12 08:27:20

标签: windows winapi

如您所知,Windows邮件根据调度方式排队或排队。我有兴趣知道哪些是排队的,哪些是没有排队但我无法在任何地方找到该信息。官方的MSDN文档about message routing, here,虽然很好地解释了机制,但在谈论消息的排队时却很模糊。它仅引用了几个例子。所有消息特定页面都没有关于排队的任何信息。

它是否被视为一个实现细节,程序员除了提到排队存在之外不应该被打扰?无论如何,为了我自己的好奇心,我正在寻找这样的事情。它存在吗?

1 个答案:

答案 0 :(得分:2)

您通常不需要知道邮件是否排队。如果有人使用PostMessage发送消息,每条消息也可能排队。

我能想到的原因只有一个:在分派消息之前对消息进行预处理。这几乎占了99%用于鼠标和键盘消息(请参阅TranslateMessage和Accelerator以及工具提示消息文档)。

只有3组消息:

  1. 有些消息是按设计发布的:WM_TIMER,WM_PAINT。实际上,当您阅读消息队列时会生成它们。
  2. 然后有来自Mouse和的所有输入消息 键盘。 WM_MOUSEMOVE,WM_NCMOUSEMOVE,WM_xBUTTONDOWN, WM_xBUTTONUP,WM_xBUTTONDBLCLK,WM_KEYUP,WM_KEYDOWN,WM_CHAR。
  3. 从OLE,DDE等使用的大量IPC函数。
  4. 您可以自己详细检查。使用Spy ++(32位/ 64位)并观看窗口的消息。日志显示已发布消息的P和SendMessage的S. R代表从SendMessage返回。

    使用Spy ++时,您会看到所有消息中的少数都被放入队列中。

    再次: 没有必要详细了解发送的消息和发布的内容。