Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.19;
Скачать: CL | DM;

Вниз

Запустить приложение и считать информацию   Найти похожие ветки 

 
Виталион   (2008-09-14 18:15) [0]

Мне нужно запустить из своей программы консольное приложение с определенными ключами и после запуска считать "лог приложения" (при запуске приложения из cmd в итоге в консоль выводиться информация).

Как этот ответ прочитать?


 
Palladin ©   (2008-09-14 18:19) [1]

procedure RunDosInMemo(DosApp:String;AMemo:TMemo);
const
   ReadBuffer = 2400;
var
 Security            : TSecurityAttributes;
 ReadPipe,WritePipe  : THandle;
 start               : TStartUpInfo;
 ProcessInfo         : TProcessInformation;
 Buffer              : Pchar;
 BytesRead           : DWord;
 Apprunning          : DWord;
begin
 With Security do begin
  nlength              := SizeOf(TSecurityAttributes);
  binherithandle       := true;
  lpsecuritydescriptor := nil;
 end;
 if Createpipe (ReadPipe, WritePipe,
                @Security, 0) then begin
  Buffer  := AllocMem(ReadBuffer + 1);
  FillChar(Start,Sizeof(Start),#0);
  start.cb          := SizeOf(start);
  start.hStdOutput  := WritePipe;
  start.hStdInput   := ReadPipe;
  start.dwFlags     := STARTF_USESTDHANDLES +
                       STARTF_USESHOWWINDOW;
  start.wShowWindow := SW_HIDE;

  if CreateProcess(nil,
         PChar(DosApp),
         @Security,
         @Security,
         true,
         NORMAL_PRIORITY_CLASS,
         nil,
         nil,
         start,
         ProcessInfo)
  then
  begin
   repeat
    Apprunning := WaitForSingleObject
                 (ProcessInfo.hProcess,100);
    Application.ProcessMessages;
   until (Apprunning <> WAIT_TIMEOUT);
    Repeat
      BytesRead := 0;
      ReadFile(ReadPipe,Buffer[0],
              ReadBuffer,BytesRead,nil);
      Buffer[BytesRead]:= #0;
      OemToAnsi(Buffer,Buffer);
      AMemo.Text := AMemo.text + String(Buffer);
    until (BytesRead < ReadBuffer);
 end;
 FreeMem(Buffer);
 CloseHandle(ProcessInfo.hProcess);
 CloseHandle(ProcessInfo.hThread);
 CloseHandle(ReadPipe);
 CloseHandle(WritePipe);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Clear;
 RunDosInMemo("route print",Memo1);
end;



Страницы: 1 вся ветка

Текущий архив: 2008.10.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
2-1220780338
Point
2008-09-07 13:38
2008.10.19
Как научиться составлять sql запросы.


2-1221219767
bmw
2008-09-12 15:42
2008.10.19
Определитть последнюю запись.


2-1221559854
Outland
2008-09-16 14:10
2008.10.19
BitBtn1 и Glyph


2-1221132574
DMX
2008-09-11 15:29
2008.10.19
Уникальная строка


2-1221417830
Johnnnn
2008-09-14 22:43
2008.10.19
Как присвоить свою процедуру к TInternetExplorer.OnDocumentComple