Winapi 为什么GetMessage不处理WM_POWERBROADCAST消息?

Winapi 为什么GetMessage不处理WM_POWERBROADCAST消息?,winapi,windows-messages,Winapi,Windows Messages,我正在创建一个隐藏窗口来处理消息。我正在经历在它的GetMessage循环中没有接收WM_POWERBROADCAST消息。然而,我确实通过我的WNDPROC收到了它。我已经确认我在这两个地方都收到了其他消息 为什么GetMessage没有接收WM_POWERBROADCAST WNDCLASSEX classInfo = {0}; classInfo.cbSize = sizeof(classInfo); classInfo.style = WS_DISABLED; // CustomWndP

我正在创建一个隐藏窗口来处理消息。我正在经历在它的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;
}
WndClassExClassInfo={0};
classInfo.cbSize=sizeof(classInfo);
classInfo.style=WS\u已禁用;
//CustomWndProc只将消息和链输出到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“消息处理窗口”,禁用WS_,0,0,0,0,0,NULL,
GetModuleHandle(NULL),NULL);
消息;
while(GetMessage(&message,NULL,0,0))
{
//这种情况永远不会发生。
if(message.message==WM_POWERBROADCAST)

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


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

哇,它甚至在页面的顶部,我不知怎么没有注意到。谢谢。我不理解这个解决方案。所以你是说我应该在窗口过程中处理它。我做到了,我也注册了事件,但它仍然不起作用。不清楚该怎么办继续。虽然我收到了消息,但在开始时只收到一次。@Laszlo AndrasZsurzsa我想你在这一过程中犯了一些错误。但除了答案中的内容之外,没有什么要说的了。问题是为什么
GetMessage
没有将消息拉到它返回的
message
结构中。这是因为我这是一条同步消息。我明白你的意思了!我的问题与此类似,但现在我明白了…WM_POWERBROADCAST只适用于软件部分。因此,如果你想用硬方法/识别物理输入,这对你一点帮助都没有。