WM_QUERYENDSESSION消息

当用户选择结束会话或应用程序调用某个系统关闭函数时,将发送 WM_QUERYENDSESSION 消息。 如果任何应用程序返回零,则会话不会结束。 只要一个应用程序返回 ,系统就会停止发送WM_QUERYENDSESSION消息。

处理此消息后,系统会将 wParam 参数设置为WM_QUERYENDSESSION消息的结果发送WM_ENDSESSION消息。

窗口通过其 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