我想在我创建得控制台程序中执行Dos命令,请问如何实现?dos命令得运行结果要在我当前得控制台中输出,不是另打开一个dos窗口?

解决方案 »

  1.   

    用delphi可能有些难办,还得去找老的pascal
      

  2.   

    function ConRunDosCmd(const Cmd: string;
      const InterCmd: Boolean = False;
      const WorkDir: string = '';
      const Input: THandle = 0;
      const Output: THandle = 0;
      const TimeOut: DWORD = INFINITE): Integer;
    { 在控制台本身中运行DOS命令,输入输出在控制台本身中 }
    { returns -1 if the Exec failed, otherwise returns the process' }
    { exit code when the process terminates.                        }
    var
      pWorkDir: array[0..MAX_PATH] of Char;
      pCmdLine: array[0..1024] of Char;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      FillChar(StartupInfo, Sizeof(StartupInfo), 0);
      if InterCmd then
        StrPCopy(pCmdLine, 'cmd /c ' + Cmd)
      else
        StrPCopy(pCmdLine, Cmd);
      if DirectoryExists(WorkDir) then
        StrPCopy(pWorkDir, WorkDir)
      else
        StrPCopy(pWorkDir, GetCurrentDir);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.hStdInput := IfThen(Input = 0, GetStdHandle(STD_INPUT_HANDLE), Input);
      StartupInfo.hStdOutput := IfThen(Output = 0, GetStdHandle(STD_OUTPUT_HANDLE), Output);
      StartupInfo.wShowWindow := SW_SHOWNORMAL;
      if not CreateProcess(nil,
                           pCmdLine, nil, nil, False, NORMAL_PRIORITY_CLASS, nil,
                           pWorkDir, StartupInfo, { pointer to STARTUPINFO }
                           ProcessInfo
                          ) then { pointer to PROCESS_INF }
        Result := -1
      else
      begin
        case WaitforSingleObject(ProcessInfo.hProcess, TimeOut) of
          WAIT_TIMEOUT: TerminateProcess(ProcessInfo.hProcess, Cardinal(Result));
        else
          GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
        end;
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
      end;
    end;