概況ExitWindowsEX()函數用來退出、重啟或登出系統。編輯本段函數原型BOOL ExitWindowsEx(UINT uFlags, // 關閉參數DWORD dwReserved // 系統保留,一般取0);編輯本段參數uFlags指定關閉的類型。此參數必須有下列值的組合:
EWX_FORCE強制終止進程。當此標誌設定,Windows不會發送訊息WM_QUERYENDSESSION和WM_ENDSESSION的訊息給目前在系統中啟動並執行程式。這可能會導致應用程式遺失資料。因此,你應該只在緊急情況下使用此標誌。
EWX_LOGOFF關閉所有進程,然後登出使用者。
EWX_POWEROFF關閉系統並關閉電源。該系統必須支援斷電。Windows要求:Windows NT中調用進程必須有 SE_SHUTDOWN_NAME 特權。Windows 9X中:可以直接調用。
EWX_REBOOT關閉系統,然後重新啟動系統。Windows要求:Windows NT中:調用進程必須有SE_SHUTDOWN_NAME特權。Windows 9X中:可以直接調用。
EWX_SHUTDOWN關閉系統,安全地關閉電源。所有檔案緩衝區已經重新整理到磁碟上,所有正在啟動並執行進程已經停止。Windows要求:Windows NT中:調用進程必須有SE_SHUTDOWN_NAME特權。Windows 9X中:可以直接調用。dwReserved系統保留,這參數被忽略。一般取0。傳回值如果函數成功,傳回值為非零。如果函數失敗,傳回值是零。想獲得更多錯誤資訊,請調用GetLastError函數。編輯本段備忘ExitWindowsEx函數返回後,啟動了關閉。關閉或登出。在關機或登入操作中,應用程式在允許關閉的時間具體數額內回應關機請求。如果時間到期時,Windows會顯示一個對話方塊,允許使用者強行關閉應用程式:關閉、重試,或取消關機要求。如果存在EWX_FORCE指定值,Windows會關閉應用程式而不顯示該對話方塊。Windows NT中:關閉或重新啟動系統,調用進程必須使用AdjustTokenPrivileges函數使SE_SHUTDOWN_NAME特權。Windows
95中:安全特權,不支援或需要。編輯本段例子Windows 9X:ExitWindowsEx(EWX_SHUTDOWN, 0); //關閉系統ExitWindowsEx(EWX_REBOOT, 0); //重啟系統Windows NT/2000/XP:以下給出一個函數如果不是MFC,加入以下語句在該函數之前#define BOOL int#define TRUE 1#define FALSE 0如果是,直接加入BOOL SystemShutdown(){HANDLE hToken;TOKEN_PRIVILEGES tkp;/* OpenProcessToken() 這個函數的作用是開啟一個進程的存取權杖GetCurrentProcess() 函數的作用是得到本進程的控制代碼*/if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))return FALSE;// LookupPrivilegeValue() 的作用是修改進程的許可權LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);tkp.PrivilegeCount = 1; // one privilege to set 賦給本進程特權tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;// AdjustTokenPrivileges()的作用是通知Windows NT修改本進程的權利AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);if (GetLastError() != ERROR_SUCCESS) //失敗return FALSE;if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0)) //參數在這裡設定。強行退出WINDOWS(EWX_FORCE)。return FALSE;return TRUE;}