DELPHI中調用API函數ExitWindowsEX可以實現系統的關機,註銷,和重啓
關機:ExitWindowsEx(EWX_POWEROFF OR EWD SHUTDOWN,0)
註銷:ExitWindowsEx(EWX_LOGOFF,0)
重啓:ExitWindowsEx(EWX_REBOOT,0)
不過函數ExitWindowsEx在完成系統的關機、註銷、重啓動作之前必須要使應用程序獲得系統相應的權限。
可以在窗體初始化時進行操作:
procedure TForm1.FormCreate(Sender: TObject);
var
hToken : THandle;
Tkp : TTokenPrivileges;
Zero:WORD;
begin
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
Tkp.PrivilegeCount :=1;
Tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,Tkp,SizeOf(TTokenPrivileges),nil,Zero);
end;
執行以上代碼,應用程序就獲得了系統關機、註銷、重啓的權限了,然後加上ExitWindowsEx(EWX_POWEROFF OR EWD SHUTDOWN,0)就行了。
在xp中運行成功。
註銷:ExitWindowsEx(EWX_LOGOFF,0)
重啓:ExitWindowsEx(EWX_REBOOT,0)
不過函數ExitWindowsEx在完成系統的關機、註銷、重啓動作之前必須要使應用程序獲得系統相應的權限。
可以在窗體初始化時進行操作:
procedure TForm1.FormCreate(Sender: TObject);
var
hToken : THandle;
Tkp : TTokenPrivileges;
Zero:WORD;
begin
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
Tkp.PrivilegeCount :=1;
Tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,Tkp,SizeOf(TTokenPrivileges),nil,Zero);
end;
執行以上代碼,應用程序就獲得了系統關機、註銷、重啓的權限了,然後加上ExitWindowsEx(EWX_POWEROFF OR EWD SHUTDOWN,0)就行了。
在xp中運行成功。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.