天天看點

關機,登出,重新開機函數:ExitWindowsEx

概況

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; 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; }