一个消息窗口可以接收WM_QUERYENDSESSION吗?

在程序的debugging版本中,我创build了一个可见的窗口, WM_QUERYENDSESSION消息被WM_QUERYENDSESSION接收。 在发布版本中,窗口应该只是消息,因此在调用CreateWindowEx()时,将hWndParent指定为hWndParent 。 不幸的是,我不再收到WM_QUERYENDSESSION消息。 WM_QUERYENDSESSION是这里提到的广播消息之一吗? “只有消息的窗口没有收到广播消息。”

MSDN给出了一个“仅限消息窗口”的体面定义:

仅消息窗口使您可以发送和接收消息。 它是不可见的,没有z顺序, 不能枚举 ,并且不接收广播消息。 窗口只是发送消息。

相关的细节突出显示。

您可以使用它们来利用自己的代码中的消息分派机制。 最典型的是让工作线程以线程安全的方式与UI线程交谈。 消息循环是生产者 – 消费者问题的通用解决方案。 例如,COM中的公寓编组实现了一个消息窗口。 显然,这样一个窗口应该被隐藏,只能得到应用程序定义的消息。

调用CreateWindowEx时不要使用HWND_MESSAGE作为hWndParent。

将HWND_MESSAGE替换为hWndParent的NULL,你应该得到你想要的行为。