Delphi 关机

用于 Windows2000 程序关机

procedure offcomputer;
var
   hToken : THandle;
   tkp : TOKEN_PRIVILEGES;
   ReturnLength : DWord;
begin
   if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or 
   TOKEN_ALL_ACCESS or TOKEN_QUERY,hToken) then
   begin
      exit;
   end;
   LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   ReturnLength := 0;
   AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,ReturnLength);
   if GetLastError() <> ERROR_SUCCESS then
   begin
      exit;
   end;

   if not ExitWindowsEx(EWX_POWEROFF, 0) then
   begin
      exit;
   end;
end;