Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
Виталион   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
15-1219816392
Vlad Oshin
2008-08-27 09:53
2008.10.19
Поделитесь красивыми/неожиданными решениями с виду сложных задач?


15-1219762713
ChaosAD
2008-08-26 18:58
2008.10.19
Что почитать по Хранимым Процедурам для MSSQL


1-1200888950
VladSel
2008-01-21 07:15
2008.10.19
Размер выделенной памяти для массива


1-1200679747
ilkz
2008-01-18 21:09
2008.10.19
Приложение и DLL


9-1173732968
Mr.Vlad
2007-03-12 23:56
2008.10.19
3ds max





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский