procedure TForm1.reboot;
var
   VerInfo:TOSVersionInfo;
   hToken:THANDLE;
   tkp:TOKEN_PRIVILEGES;
   Nothing:Cardinal;
begin
   VerInfo.dwOSVersionInfoSize:=SizeOf(VerInfo);
   GetVersionEx(VerInfo);
   if VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
   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, 0,nil, Nothing);
   End;
  //  ExitWindowsEx(EWX_POWEROFF,0);
  ExitWindowsEx(EWX_REBOOT,0);
end;

解决方案 »

  1.   

    对,你可以看看Win32 API(delphi附带的)
      

  2.   

    procedure TForm1.reboot;
    var
      VerInfo:TOSVersionInfo;
      hToken:THANDLE;
      tkp:TOKEN_PRIVILEGES;
      Nothing:Cardinal;
    begin
      VerInfo.dwOSVersionInfoSize:=SizeOf(VerInfo);
      GetVersionEx(VerInfo);
      if VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
      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, 0,nil, Nothing);
      End;
      //  ExitWindowsEx(EWX_POWEROFF,0);//这句就是关机
      ExitWindowsEx(EWX_REBOOT,0);
    end; 
      

  3.   

    不会吧,这个就是for nt/2000的。实过了吗