gpt4 book ai didi

c++ - 来自仅消息窗口的电源状态更改通知

转载 作者:行者123 更新时间:2023-11-28 08:10:22 26 4
gpt4 key购买 nike

我有一个适用于 Windows 7 的 Visual Studio 2008 C++ 项目,我希望在其中收到电源状态转换(例如挂起、休眠、恢复等...)的通知。我创建了一个消息窗口,用于监视 WM_POWERBROADCAST 消息。创建窗口后,我暂停 PC。

例如(为简洁起见省略了错误检查):

const TCHAR class_name[] = _T( "Power State Monitor" );
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof( WNDCLASSEX );
wc.lpfnWndProc = PowerStateMonitor;
wc.lpszClassName = class_name;
::RegisterClassEx( &wc );
::CreateWindowEx( 0, class_name, class_name, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, wc.hInstance, NULL );

::SetSuspendState( FALSE, FALSE, FALSE );

WindowProc 看起来像这样:

LRESULT CALLBACK PowerStateMonitor( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
if( uMsg == WM_POWERBROADCAST )
{
ATLTRACE( L"WM_POWERBROADCAST:\r\n");
return TRUE;
}
ATLTRACE( L"Default Handler: %#08x\r\n", uMsg );
return ::DefWindowProc( hwnd, uMsg, wParam, lParam );
}

我希望看到 WM_POWERBROADCAST: 记录,但我看到的只是典型的窗口创建消息:

Default Handler: WM_GETMINMAXINFO
Default Handler: WM_NCCREATE
Default Handler: WM_NCCALCSIZE
Default Handler: WM_CREATE

任何人都可以建议我可以更改什么以使我的窗口正确接收电源更改通知吗?

最佳答案

仅消息窗口不接收广播消息。您将不得不使用隐藏的普通窗口。来自 MSDN ,强调我的:

Message-Only Windows

A message-only window enables you to send and receive messages. It is not visible, has no z-order, cannot be enumerated, and does not receive broadcast messages. The window simply dispatches messages.

关于c++ - 来自仅消息窗口的电源状态更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com