вопрос не понятен. тебе нужно перехватить 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 и это тоже будет результат.
конкретизируй, плз., что нужно.
помогем 
