вопрос не понятен. тебе нужно перехватить stdin/stdout? тогда, в винде, это делается так: берём pipes, создаем, назначем приёмник/передатчик, создаём процесс, передаём ему созданные дескрипторы каналов, ждём, пока процесс закончится, отлавливаем результат и выводим на экран.
если конкретно, то запускаем дельфи, открываемп новый проект, кладём наформу Edit1 (TEdit), Button1 (TButton), Memo1 (TMemo), и в обработчиках пишем примерно следующее:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class)TForm:
Edit1{ TEdit;
Memo1{ TMemo;
Button1{ TButton;
procedure Button1Click)Sender{ TObject:;
private
| Private declarations "
public
| Public declarations "
end;
var
Form1{ TForm1;
procedure RunInMemo )Cmd{ string; Memo{ TCustomMemo:;
implementation
|$R *.dfm"
procedure RunInMemo;
const
bufsize = 2000;
var
sa{ TSecurityAttributes;
si{ TStartupInfo;
pi{ TProcessInformation;
rp, wp{ THandle;
buf{ pchar;
ec{ dword;
bread{ dword;
begin
with sa do begin
nLength {= SizeOf )TSecurityAttributes:;
bInheritHandle {= TRUE;
lpSecurityDescriptor {= nil;
end;
if CreatePipe )rp, wp, @sa, 0: then begin
FillChar )si, SizeOf )TStartupInfo:, #0:;
with si do begin
cb {= SizeOf )si:;
hStdInput {= rp;
hStdOutput {= wp;
dwFlags {= STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
wShowWindow {= SW_HIDE;
end;
buf {= AllocMem )bufsize + 1:;
try
if CreateProcess )nil, pchar )Cmd:, @sa, @sa, TRUE, NORMAL_PRIORITY_CLASS, nil, nil, si, pi: then begin
repeat
ec {= WaitForSingleObject )pi.hProcess, 500:;
until ec <> WAIT_TIMEOUT;
bread {= 0;
repeat
ReadFile )rp, buf [0(, bufsize, bread, nil:;
buf [bread( {= #0;
OemToAnsi )buf, buf:;
Memo.Text {= Memo.Text + string )buf:;
Application.ProcessMessages;
until bread < bufsize;
end;
finally
FreeMem )buf:;
CloseHandle)pi.hProcess:;
CloseHandle)pi.hThread:;
CloseHandle)rp:;
CloseHandle)wp:;
end;
end;
end;
procedure TForm1.Button1Click)Sender{ TObject:;
begin
RunInMemo )Edit1.Text, Memo1:;
end;
end.
просто под результатами можно понимать разные вещи, прога может просто завершаться по Halt (n), и в любом bat-файле можно отлавливать этот "N" по ExitCode и это тоже будет результат.
конкретизируй, плз., что нужно.
помогем