我希望我的控制台应用程序启动另一个控制台应用程序,显示该另一个应用程序想要显示的所有内容,然后在另一个应用程序完成并退出后执行一些操作。 基本上:
Writeln('Started');
ShellExecute(0, 'open', 'another.exe', nil, nil, SW_SHOWNORMAL);
Writeln('Finished');
那么如何在我的控制台应用程序中显示另一个控制台应用程序的所有输出? 我不想捕获另一个应用程序的输出。我只希望另一个应用程序在同一命令行窗口中执行。
答案 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.