procedure PowerOff;
var
Succ: bool;
hToken: Thandle;
i,j : dword;
TokenPriv,TokenPriv1: TTokenPrivileges;
begin
i := 0;
j := GetCurrentProcess;
OpenProcessToken(j,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
TokenPriv.PrivilegeCount := 1;
Succ := LookupPrivilegeValue(nil,'SeShutdownPrivilege', TokenPriv.Privileges[0].LUID);if Succ then begin
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;Succ := WinProcs.AdjustTokenPrivileges(hToken,False,TokenPriv,SizeOf(TokenPriv1),TokenPriv1,i);
if Succ then Succ := ExitWindowsEx(EWX_POWEROFF, 0);
if not Succ then messagedlg('关机失败', mtInformation, [mbOk], 0)
end;CloseHandle(hToken);end;