我有一个适用于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
有人可以建议我可以更改窗口以正确接收电源更改通知吗?
答案 0 :(得分:1)
仅消息窗口不接收广播消息。您将不得不使用隐藏的普通窗口。来自MSDN,强调我的:
仅限消息的Windows
仅限消息窗口可让您发送和接收消息。它不可见,没有z顺序,无法枚举,不接收广播消息。该窗口只是发送消息。