![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск приложения и ождание завершения, при этом форма активна [D7]
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
?