2012-02-15 4 views
0

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 

誰でも私ができることを提案できます私のウィンドウに電源変更通知が正しく届くように変更しますか?

答えて

1

メッセージのみのウィンドウはブロードキャストメッセージを受信しません。代わりに、隠された通常のウィンドウを使用する必要があります。 MSDNからは、重点鉱山:

メッセージのみのWindows

メッセージのみのウィンドウは、あなたがメッセージを送受信することができます。表示されず、zオーダーがなく、列挙できません。はブロードキャストメッセージを受信しません。ウィンドウは単にメッセージをディスパッチします。

関連する問題