如题

解决方案 »

  1.   

    exitwindowsex(EWX_POWEROFF+EWX_SHUTDOWN+EWX_FORCE,0)
      

  2.   

    定义一个过程:
    procedure ExitWindowsNT(uFlags : integer);
    var
     hToken : THANDLE;
     tkp, tkDumb : TTokenPrivileges;
     DumbInt : integer;
    begin
     FillChar(tkp, sizeof(tkp), 0);
     // Get a token for this process
     if not (OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES
             or TOKEN_QUERY, hToken)) then
        raise Exception.create('OpenProcessToken failed with code '
                  + inttostr(GetLastError)); // Get the LUID for the Shutdown privilege
     LookupPrivilegeValue(nil, pchar('SeShutdownPrivilege'),
                          tkp.Privileges[0].Luid); tkp.PrivilegeCount := 1; // one privilege to set
     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; // Get the shutdown provolege for this process
     AdjustTokenPrivileges(hToken, false, tkp, sizeof(tkDumb), tkDumb, DumbInt); // Cannot test the return value of AdjustTokenPrivileges
     if GetLastError <> ERROR_SUCCESS then
        Raise Exception.create('AdjustTokenPrivileges failed with code '
                  + inttostr(GetLastError)); // shut down the system and for all applications to close
     if not ExitWindowsEx(uFlags, 0) then
        Raise Exception.create('ExitWindowsEx failed with code '
                  + inttostr(GetLastError));
    end;调用过程:
    ExitWindowsNT(EWX_SHUTDOWN or EWX_FORCE)或
    ExitWindowsNT(EWX_REBOOT)即可。