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]
Заголовок
WinUser.h (включая Windows.h)

См. также раздел

Выход из системы

Завершает работу

DefWindowProc

ExitWindows

SetProcessShutdownParameters

WM_ENDSESSION