Function ShutDownWindows(Flags: Byte) : Boolean;
begin
     Result := ExitWindowsEx(Flage, 0)
     // 如果成功返回 True.
end;

解决方案 »

  1.   

    Flage:
    EWX_FORCE=4; //关闭所有程序并以其他用户身份登录
    EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
    EWX_REBOOT=2; //重新启动计算机
    EWX_SHUTDOWN=1;//关闭计算机
      

  2.   

    // 以下代码用于windowsNT/2000procedure TraceError; // 报告错误消息
    var lpMsgBuf: PChar;
    var ErrorID: DWORD;
    begin
      ErrorID := GetLastError;
      FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS,
        nil,
        ErrorID,
        0, // Default language
        @lpMsgBuf,
        0,
        nil
      );
      ShowMessage(IntToStr(ErrorID) + ':' + String(lpMsgBuf));
      LocalFree(Cardinal(lpMsgBuf));
    end;function Prepare(MachineName: PChar): Boolean; // 调整权限
    var
      App: THANDLE;
      Num: DWORD;
      Tok: TOKEN_PRIVILEGES;
    begin
      Result := False;
      //ShowMessage('OpenProcessToken...');
      if not OpenProcessToken(
        GetCurrentProcess,
        TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
        App
      ) then
        TraceError
      else
      begin
        Tok.PrivilegeCount := 1;
        //ShowMessage('LookupPrivilegeValue...');
        if LookupPrivilegeValue(MachineName, 'SeShutdownPrivilege', Tok.Privileges[0].Luid) then
        begin
          Tok.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
          //ShowMessage('AdjustTokenPrivileges...');
          if not AdjustTokenPrivileges(App, False, Tok, SizeOf(Tok), Tok, Num) then
            TraceError
          else
            Result := True;
        end
        else
          TraceError;
      end;
      CloseHandle(App);
    end;function ShutdownWindows: Boolean;     // 关机
    begin
      Result := Prepare(nil) and ExitWindowsEx(EWX_SHUTDOWN, 0);
    end;
      

  3.   

    ExitWindowsEx(EWX_LOGOFF,0) //以其他用户身份登录 
    ExitWindowsEx(EWX_SHUTDOWN,1) //安全关机 
    ExitWindowsEx(EWX_REBOOT,2) //重新启动计算机 
    ExitWindowsEx(EWX_FORCE,4) //强行关机 
    ExitWindowsEx(EWX_POWEROFF,8); //关闭系统并关闭电源 
      

  4.   

    控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等,ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数。首先定义常数constEWX_FORCE=4;//关闭所有程序并以其他用户身份登录EWX_LOGOFF=0;//重新启动计算机并切换到MS-DOS方式EWX_REBOOT=2;//重新启动计算机EWX_SHUTDOWN=1;//关闭计算机运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句:ExitWindowsEx(How,0);就可以达到目的。