Уведомления об изменении состояния питания из окна только для сообщений - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть проект Visual Studio 2008 C ++ для Windows 7, в котором я хотел бы получать уведомления о переходах состояния питания (например, приостановка, спящий режим, возобновление и т. Д.).Я создал окно только для сообщений, которое отслеживает сообщения WM_POWERBROADCAST.После того, как окно создано, я приостанавливаю ПК.

Например (проверка ошибок для краткости опущена):

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 Ответ

1 голос
/ 15 февраля 2012

Только окна сообщений не принимают широковещательные сообщения.Вы должны будете использовать скрытое, нормальное окно вместо этого.Начиная с MSDN , выделение:

Только для сообщений Windows

Окно только для сообщений позволяет отправлять и получать сообщения.Он не виден, не имеет z-порядка, не может быть перечислен, и не получает широковещательные сообщения .Окно просто отправляет сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...