關機 重啟 登出電腦編程
HANDLE hToken;
TOKEN_PRIVILEGES tkp,tkpNew;
LUID int64LpUid;
DWORD dwSize;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&int64LpUid);
tkp.PrivilegeCount=1;
tkp.Privileges[0].Luid=int64LpUid;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,false,&tkp,sizeof(tkp),&tkpNew,&dwSize);
ExitWindowsEx(EWX_SHUTDOWN,0);
2000下要有許可權才能關機
95/98的話簡單
一個api: ExitWindows()
函數原型如下:
BOOL ExitWindowsEx(UINT uFlags, DWORD dwReserved );
參數:
uFlags
指定關閉類型,可使用下列常量:
EWX_FORCE 強制關閉,不會詢問應用程式是否可以關閉,可造成資料丟失
EWX_LOGOFF 登出目前使用者
EWX_POWEROFF 關閉電源, 需要ATX電源支援
EWX_REBOOT 重新啟動電腦,對於Windows NT: 必須有 SE_SHUTDOWN_NAME 的安全特權方可進行此項操作
EWX_SHUTDOWN 正常關閉,在關閉之前所有緩衝區的內容都能被安全的存檔,所有進程都將被停止。對於Windows NT: 必須有 SE_SHUTDOWN_NAME 的安全特權方可進行此項操作
dwReserved
保留;忽視這個參數。
傳回值:
如果函數成功返回True(非0),否則返回False(0)。調用GetLastError.取得錯誤資訊。
執行個體:
建立Project,在 Form1添加三個 Button1、Button2、Button3,分別將其Caption屬性改為‘關閉’、‘重啟’、‘登出’,並給每個 Button 增加OnClick事件,代碼如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
ExitWindowsEx(EWX_SHUTDOWN,0); //正常關閉
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ExitWindowsEx(EWX_REBOOT,0); //重新啟動電腦
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ExitWindowsEx(EWX_ LOGOFF,0); //登出目前使用者
end;