为什么GetMessage不处理WM_POWERBROADCAST消息?

时间:2013-12-02 22:24:14

标签: winapi windows-messages

我正在创建一个隐藏窗口,用于处理邮件。我遇到我在GetMessage循环中没有收到WM_POWERBROADCAST消息。但是,我会通过我的WNDPROC收到它。我已经确认我在两个地方都收到了其他消息。

为什么GetMessage没有收到WM_POWERBROADCAST?

WNDCLASSEX classInfo = {0};
classInfo.cbSize = sizeof(classInfo);
classInfo.style = WS_DISABLED;
// CustomWndProc just outputs the message and chains to DefaultWndProc
classInfo.lpfnWndProc = CustomWndProc; 
classInfo.hInstance = GetModuleHandle(NULL);
classInfo.hCursor = NULL;
classInfo.hbrBackground = NULL;
classInfo.lpszMenuName = NULL;
classInfo.lpszClassName = L"MyMessageWindow";
ATOM windowClass = RegisterClassEx(&classInfo);

HWND messageWindow = CreateWindowEx(WS_EX_NOACTIVATE, L"MyMessageWindow", 
    L"Message Handling Window", WS_DISABLED, 0, 0, 0, 0, 0, NULL, 
    GetModuleHandle(NULL), NULL);

MSG message;
while (GetMessage(&message, NULL, 0, 0))
{
    // This condition is never true.
    if (message.message == WM_POWERBROADCAST)
        std::cout << "Got WM_POWERBROADCAST" << std::endl;
}

1 个答案:

答案 0 :(得分:5)

这是因为WM_POWERBROADCAST是同步调度的,因此不会放在消息队列中。

为了让您处理它,您需要在窗口过程中处理它。