Обработка событий выхода из системы

Сервисные приложения, которые взаимодействуют с пользователем, должны быть готовы обработать события выхода из системы. Когда происходит событие выхода из системы, сервисное приложение должно закрыть все дескрипторы  оконной станции пользователя и рабочего стола.

Этот фрагмент демонстрирует, как окно сообщения в коде примера взаимодействия должно быть отклонено при выходе из системы. Функция ConsoleCtrlHandler в этом примере - является функцией HandlerRoutine, которая была задана вызовом  функции SetConsoleCtrlHandler.

BOOL CALLBACK EnumProc( 
    HWND hwnd, 
    LPARAM lParam) 
{ 
    // отправляем сообщение WM_CLOSE, чтобы разрушить окно, потому что функция DestroyWindow 
    // работает не со всеми потоками. 

    SendMessage(hwnd, WM_CLOSE, 0, 0); 
    return TRUE; 
} 
 
BOOL ConsoleCtrlHandler(DWORD dwCtrlType) 
{ 
    if (dwCtrlType == CTRL_LOGOFF_EVENT && dwGuiThreadId != 0) 
    { 
        SetThreadDesktop(GetThreadDesktop(dwGuiThreadId)); 
        EnumThreadWindows(dwGuiThreadId, EnumProc, 0); 
    } 
    return FALSE; 
}

Назад в оглавление
На главную страницу

Hosted by uCoz