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