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

Вниз

Поток консольного приложения   Найти похожие ветки 

 
Hyboid   (2004-07-31 20:24) [0]

Необходимо запустить консольное приложение и перехватить его выходной поток, т.е. чтобы результаты не выводились на экран, а передавались родительской программе. Т.е. примерно как веб-сервер: запускает программу, ждет завершения работы, обрабатывает результаты и т.д.


 
Evgeny V ©   (2004-08-02 07:36) [1]

Смотри в  SDK CreateProcess и CreatePipe и соответственно ReadFile и WriteFile (если надо и писать в консоль), для ожидания завершения задачи WaiForSingleObject, в котором объектом ожидания (сигнализации)  будет хэндл созданного процесса


 
Ajax ©   (2004-08-02 08:02) [2]

Код взят с Королевства:

function RunAny(CommandLine: string; Str: TStrings): boolean;
var
  I: byte;
  S: string;
  Flag: boolean;
  tRead, cWrite, dwRead, dwAvail: cardinal;
  SA: TSecurityAttributes;
  PI: TProcessInformation;
  SI: TStartupInfo;
begin
  Result:=False;
  SA.nLength:=SizeOf(SECURITY_ATTRIBUTES);
  SA.bInheritHandle:=True;
  SA.lpSecurityDescriptor:=nil;
  if not CreatePipe(tRead, cWrite, @SA, 0) then Exit;
  ZeroMemory(@SI, SizeOf(TStartupInfo));
  SI.cb:=SizeOf(TStartupInfo);
  SI.dwFlags:=STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  SI.wShowWindow:=SW_HIDE;
  SI.hStdOutput:=cWrite;
  if CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, nil, SI, PI) then begin
     CloseHandle(PI.hProcess);
     CloseHandle(PI.hThread);
     Str.Clear();
     Flag:=True;
     while Flag do begin
        for I:=0 to 9 do begin
           PeekNamedPipe(tRead, nil, 0, nil, @dwAvail, nil);
           if (dwAvail>0) then begin
              Flag:=True;
              Break;
           end
           else Flag:=False;
           Sleep(100);
        end; //for I:=
        if dwAvail>0 then begin
           SetLength(S, dwAvail);
           ReadFile(tRead, PChar(S)^, Length(S), dwRead, Nil);
           OemToChar(PChar(S), PChar(S));
           Str.Add(S);
           Application.ProcessMessages;
           Result:=True;
        end; // if dwAvail
     end;    // while Flag
  end;       // if CreateProcess
end;

Сам не тестил.



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

Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.047 c
14-1093361502
Лена
2004-08-24 19:31
2004.09.12
Вирусы


1-1093722417
Сергей.
2004-08-28 23:46
2004.09.12
Узнать имя активного компонента


3-1092899727
Uran
2004-08-19 11:15
2004.09.12
Проблеммы с кодировкой


14-1093074378
ArMellon
2004-08-21 11:46
2004.09.12
Запарился...,почему вопит "dd"-определение отсутствует?


9-1084843213
Armagedon
2004-05-18 05:20
2004.09.12
помогите скочать DirectSound





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский