WM_QUERYENDSESSION сообщение
Сообщение WM_QUERYENDSESSION отправляется, когда пользователь решает завершить сеанс или когда приложение вызывает одну из функций завершения работы системы. Если какое-либо приложение возвращает ноль, сеанс не завершается. Система прекращает отправку WM_QUERYENDSESSION сообщений, как только одно приложение возвращает ноль.
После обработки этого сообщения система отправляет WM_ENDSESSION сообщение с параметром wParam , заданным для результатов WM_QUERYENDSESSION сообщения.
Окно получает это сообщение через функцию WindowProc .
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // not used
LPARAM lParam // logoff option
);
Параметры
-
hwnd
-
Дескриптор окна.
-
uMsg
-
Идентификатор WM_QUERYENDSESSION .
-
wParam
-
Этот параметр зарезервирован для использования в будущем.
-
lParam
-
Этот параметр может быть одним или несколькими из следующих значений. Если этот параметр равен 0, система завершает работу или перезапускается (невозможно определить, какое событие происходит).
Значение Значение - ENDSESSION_CLOSEAPP
- 0x00000001
Приложение использует файл, который необходимо заменить, система обслуживается или системные ресурсы исчерпаны. Дополнительные сведения см. в разделе Рекомендации по приложениям. - ENDSESSION_CRITICAL
- 0x40000000
Приложение принудительно завершает работу. - ENDSESSION_LOGOFF
- 0x80000000
Пользователь отключается. Дополнительные сведения см. в разделе Выход из системы. Обратите внимание, что этот параметр является битовой маской. Чтобы проверить это значение, используйте битовую операцию; не проверять на равенство.
Возвращаемое значение
Приложения должны учитывать намерения пользователя и возвращать значение TRUE. По умолчанию функция DefWindowProc возвращает значение TRUE для этого сообщения.
Если завершение работы приведет к повреждению системы или носителя, на который выполняется запись, приложение может вернуть значение FALSE. Однако рекомендуется соблюдать действия пользователя.
Комментарии
Когда приложение возвращает значение TRUE для этого сообщения, оно получает сообщение WM_ENDSESSION независимо от того, как другие приложения отвечают на сообщение WM_QUERYENDSESSION . Каждое приложение должно возвращать значение TRUE или FALSE сразу после получения этого сообщения и откладывать все операции очистки до получения сообщения WM_ENDSESSION .
Приложения могут отображать пользовательский интерфейс, запрашивающий у пользователя сведения при завершении работы, однако это не рекомендуется. Через пять секунд система отображает сведения о приложениях, которые препятствуют завершению работы, и позволяет пользователю завершить работу. Например, в Windows XP отображается диалоговое окно, а в Windows Vista — в полноэкранном режиме с дополнительными сведениями о том, как приложения блокируют завершение работы. Если приложение должно блокировать или отложить завершение работы системы, используйте функцию ShutdownBlockReasonCreate . Дополнительные сведения см. в разделе Изменения завершения работы для Windows Vista.
Консольные приложения могут использовать функцию SetConsoleCtrlHandler для получения уведомлений о завершении работы.
Приложения-службы могут использовать функцию RegisterServiceCtrlHandlerEx для получения уведомлений о завершении работы в подпрограмме обработчика.
Примеры
Пример см. в разделе Выкл.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера |
Windows Server 2003 [классические приложения | Приложения UWP] |
Заголовок |
|
См. также раздел