Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск приложения и ождание завершения, при этом форма активна [D7]


Страницы:   1 2

cruiser ©   (2008-10-22 22:46:00) 

Уважаемые Мастера! Столкнулся с проблемкой. Вот код от которого я отталкиваюсь:
function RunAny(CommandLine: string; Memo1: TMemo): 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);
  Memo1.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;
   if CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, nil, SI, PI) then
  begin
WaitForSingleObject(PI.hProcess, 100);
   CloseHandle(PI.hProcess);
end;
        end;
        if dwAvail>0 then begin
           SetLength(S, dwAvail);
           ReadFile(tRead, PChar(S)^, Length(S), dwRead, Nil);
           OemToChar(PChar(S), PChar(S));
           Memo1.Lines.Add(S);
           Application.ProcessMessages;
           Result:=True;

        end; // if dwAvail
     end;    // while Flag
  end;       // if CreateProcess

   CloseHandle(cWrite);
  CloseHandle(tRead);
end;


Мне не нужно считывание вывода приложения в консоль, а только нужно что бы запустив из моей программы некое приложение, дождаться его завершения и вывести мессагу что приложение завершило действие. При этом необходимо дальше работать с главной формой и с её элементами. Какой код можно на основе этого сделать без всего лишнего?


Правильный$Вася   (2008-10-22 23:08:00) [21]


>  При этом необходимо дальше работать с главной формой и
> с её элементами.

в запущенном или запускающем приложении?

> WaitForSingleObject(PI.hProcess, 100);

if( WaitForSingleObject( hProcInfo.hProcess, INFINITE ) = WAIT_FAILED ) then
?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо