如何在Delphi控制台应用程序中运行控制台应用程序?

时间:2018-08-23 20:03:29

标签: delphi

我希望我的控制台应用程序启动另一个控制台应用程序,显示该另一个应用程序想要显示的所有内容,然后在另一个应用程序完成并退出后执行一些操作。 基本上:

Writeln('Started');
ShellExecute(0, 'open', 'another.exe', nil, nil, SW_SHOWNORMAL);
Writeln('Finished');

那么如何在我的控制台应用程序中显示另一个控制台应用程序的所有输出? 我不想捕获另一个应用程序的输出。我只希望另一个应用程序在同一命令行窗口中执行。

1 个答案:

答案 0 :(得分:5)

您可能想尝试这样的事情:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Windows, SysUtils;

var
  cl: string;
  SI: TStartupInfo;
  PI: TProcessInformation;

begin

  cl := 'C:\WINDOWS\System32\ping.exe 127.0.0.1';
  UniqueString(cl);

  try
    try
      writeln('begin');
      FillChar(SI, sizeof(SI), 0);
      FillChar(PI, sizeof(PI), 0);
      SI.cb := sizeof(SI);

      if not CreateProcess(nil, PChar(cl), nil, nil, true, 0, nil, nil, SI, PI) then
        RaiseLastOSError;

      WaitForSingleObject(PI.hProcess, INFINITE);

      CloseHandle(PI.hProcess);
      CloseHandle(PI.hThread);

      writeln('end');
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    Writeln('Complete');
    Readln;
  end;


end.