Получить уведомление о Windows собирается спать / просыпаться в C ++ - PullRequest
7 голосов
/ 31 августа 2011

Я работаю над приложением, в котором есть несколько потоков, ожидающих различных входных данных из библиотек DLL и последовательных портов.

Я хочу добавить функциональность, которая перед тем, как машина переходит в спящий режим, должна выгружать определенную DLL и при пробуждении должна перезагружать DLL. Для этого мне нужно получить уведомление о Sleep and Wake up.

Я нашел много файлов о выполнении в C #, но я хочу сделать это в C ++.

Я пытался использовать этот код Project , но не смог зафиксировать какое-либо событие. Я удалил все, что связано с Window Paint и все, что мне не нужно, это графический интерфейс и сохранил только main message loop (The While loop in the main)

EDIT: -

Я использую это в качестве основного цикла: -

 // Start the message loop. 

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
} 

Честно говоря, я скопировал это из CodeProject и сделал только одну модификацию, т.е. проверил GetMessage (..)! = 0 из статьи MSDN.

Я что-то упустил?

или любое другое решение ??

Я использую VS2010 и программирую на C ++

Заранее спасибо!

1 Ответ

7 голосов
/ 31 августа 2011

Попробуйте обработать сообщение WM_POWERBROADCAST

Вот пример кода, который должен работать.Очевидно, вам нужно создать окно, иначе вы не получите сообщения.Образец создает скрытое окно для достижения этого.

static long FAR PASCAL WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    if(message == WM_POWERBROADCAST)
    {
        //Do something
        return TRUE;
    }
    else
        return DefWindowProc(hWnd, message, wParam, lParam);
}

int _tmain(int argc, _TCHAR* argv[])
{
    WNDCLASS wc = {0};


    // Set up and register window class
    wc.lpfnWndProc = WindowProc;
    wc.lpszClassName = _T("SomeNameYouInvented");
    RegisterClass(&wc);
    HWND hWin = CreateWindow(_T("SomeNameYouInvented"), _T(""), 0, 0, 0, 0, 0, NULL, NULL, NULL, 0);

    BOOL bRet;
    MSG msg;
    while( (bRet = GetMessage( &msg, hWin, 0, 0 )) != 0)
    { 
        if (bRet == -1)
        {
            // handle the error and possibly exit
        }
        else
        {
            TranslateMessage(&msg); 
            DispatchMessage(&msg); 
        }
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...