ExitWindowsEx 函式 (winuser.h)
登出互動式使用者、關閉系統,或關閉並重新啟動系統。 它會將 WM_QUERYENDSESSION 訊息傳送至所有應用程式,以判斷是否可以終止這些訊息。
語法
BOOL ExitWindowsEx(
[in] UINT uFlags,
[in] DWORD dwReason
);
參數
[in] uFlags
關機類型。 此參數必須包含下列其中一個值。
值 | 意義 |
---|---|
|
從 Windows 8 開始: 您可以將 EWX_HYBRID_SHUTDOWN 旗標與 EWX_SHUTDOWN 旗標結合,以準備系統以加快啟動速度。 |
|
關閉在呼叫 ExitWindowsEx 函式之進程的登入會話中執行的所有進程。 然後,它會將使用者登出。
此旗標只能由在互動式使用者的登入會話中執行的進程使用。 |
|
關閉系統並關閉電源。 系統必須支援關閉電源功能。
呼叫進程必須具有SE_SHUTDOWN_NAME許可權。 如需詳細資訊,請參閱接下來的<備註>一節。 |
|
關閉系統,然後重新開機系統。
呼叫進程必須具有SE_SHUTDOWN_NAME許可權。 如需詳細資訊,請參閱接下來的<備註>一節。 |
|
關閉系統,然後重新開機系統,以及使用 RegisterApplicationRestart 函式註冊以重新開機的任何應用程式。 這些應用程式會接收WM_QUERYENDSESSION訊息,並將 lParam設定為 ENDSESSION_CLOSEAPP 值。 如需詳細資訊,請參閱 應用程式的指導方針。 |
|
將系統關機到關閉電源的安全點。 所有檔案緩衝區都已排清到磁片,而且所有執行中的進程都已停止。
呼叫進程必須具有SE_SHUTDOWN_NAME許可權。 如需詳細資訊,請參閱接下來的<備註>一節。 即使系統支援關閉電源功能,指定此旗標也不會關閉電源。 您必須指定EWX_POWEROFF來執行此動作。具有 SP1 的 Windows XP: 如果系統支援關閉電源功能,請指定此旗標會關閉電源。 |
此參數可以選擇性地包含下列其中一個值。
值 | 意義 |
---|---|
|
如果啟用終端機服務,此旗標就不會有任何作用。 否則,系統不會傳送 WM_QUERYENDSESSION 訊息。 這可能會導致應用程式遺失資料。 因此,您應該只在緊急狀況中使用這個旗標。 |
|
強制進程在逾時間隔內未回應 WM_QUERYENDSESSION 或 WM_ENDSESSION 訊息時終止。 如需詳細資訊,請參閱<備註>一節。 |
[in] dwReason
起始關機的原因。 此參數必須是其中一個 系統關機原因碼。
如果此參數為零,則不會設定SHTDN_REASON_FLAG_PLANNED原因代碼,因此預設動作是未定義的關機,記錄為「找不到此原因的標題」。 根據預設,它也是非計劃性關機。 視系統設定方式而定,非計劃性關機會觸發建立包含系統狀態資訊的檔案,這可能會延遲關機。 因此,請勿對此參數使用零。
傳回值
如果函式成功,則傳回非零的值。 因為函式會以非同步方式執行,所以非零傳回值表示已起始關機。 它不會指出關機是否成功。 系統、使用者或其他應用程式可能會中止關機。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
ExitWindowsEx函式會在啟動關機程式時立即傳回。 然後,關閉或登出會以非同步方式繼續。 函式的設計目的是要停止呼叫端登入會話中的所有進程。 因此,如果您不是互動式使用者,則函式可以成功,而不需要實際關閉電腦。 如果您不是互動式使用者,請使用 InitiateSystemShutdown 或 InitiateSystemShutdownEx 函式。
非零的傳回值不表示登出是或將會成功。 關機是非同步進程,而且在 API 呼叫傳回或完全不傳回之後可能會發生。 即使逾時值為零,關機仍可由應用程式、服務或甚至系統中止。 非零的傳回值表示許可權和參數的驗證成功,而且系統接受關機要求。
呼叫此函式時,呼叫端必須指定是否應該強制關閉具有未儲存變更的應用程式。 如果呼叫端選擇不要強制關閉這些應用程式,且具有未儲存變更的應用程式正在主控台會話上執行,則在使用者登入主控台會話中止關機、儲存變更、關閉應用程式或強制應用程式關閉之前,關機會保持進行中。 在此期間,除了主控台使用者之外,可能不會中止關機,而且可能不會起始另一個關機。
呼叫此函式,並將 uFlags 參數的值設定為 EWX_FORCE可避免這種情況。 請記住,這樣做可能會導致資料遺失。
若要設定應用程式相對於系統中其他應用程式的關機優先順序,請使用 SetProcessShutdownParameters 函式。
在關機或登出作業期間,允許執行中的應用程式在特定時間內回應關機要求。 如果此時間在停止所有應用程式之前到期,系統會顯示使用者介面,讓使用者強制關閉系統或取消關機要求。 如果指定了EWX_FORCE值,系統會強制執行中的應用程式在時間到期時停止。
如果指定了EWX_FORCEIFHUNG值,系統會強制停止回應應用程式關閉,而且不會顯示對話方塊。
主控台進程會在情況需要時收到個別的通知訊息,CTRL_SHUTDOWN_EVENT或CTRL_LOGOFF_EVENT。 主控台進程會將這些訊息路由傳送至 其 HandlerRoutine 函式 。 ExitWindowsEx 會以非同步方式傳送這些通知訊息;因此,應用程式無法假設呼叫 ExitWindowsEx 傳回時已處理主控台通知訊息。
若要關閉或重新開機系統,呼叫進程必須使用 AdjustTokenPrivileges 函式來啟用SE_SHUTDOWN_NAME許可權。 如需詳細資訊,請參閱 使用特殊許可權執行。
範例
如需範例,請參閱 如何關閉系統。
規格需求
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包括 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
API 集合 | ext-ms-win-ntuser-misc-l1-1-0 (在 Windows 8) |