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_QUERYENDSESSION消息,它都会收到WM_ENDSESSION消息。 收到此消息后,每个应用程序应立即返回 TRUEFALSE ,并延迟任何清理操作,直到收到 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