Вниз
Скачать: CL | DM;

WinExec   Найти похожие ветки 

 
Andrew K.S.   (2002-03-26 12:34) [0]

Я используу субж для вызова утилитки а та в свою очередь вызывает
еще одну прогу с графической оболочкой как мне отследить когда она заканчивает работу??? Так как первая прога передает ей в качестве парамеров массив файлов и она делает это в цикле что приводить к седанию всей памяти.


 
Севостьянов Игорь ©   (2002-03-26 13:05) [1]

Тебе надо будет искать для второй проги handle to process (hProcess)+ thread identifier (dwThreadId)

Процедура нахождения окна по Handle процесса

function EnumThreadWndProc(Handle: THandle; lParam: Longint): Boolean; stdcall;
begin
hWindow := Handle;
Result := False;
end;


----------
{ Ожидаем завершения приложения }
begin
hWindow := 0; // сюда будем заносить handle окна второй проги
WaitForInputIdle(hProcess, INFINITE); // ожидаем запуска ее, чтобы не пропустить мимо ушей
EnumThreadWindows(dwThreadId, @EnumThreadWndProc, 0);
repeat
R := WaitForSingleObject(hProcess, 100); // ожидаем 100 миллисекунд
if R = WAIT_TIMEOUT then
begin
Repaint; // Перерисовываем твою форму
end;
until (R = WAIT_OBJECT_0) or (R = WAIT_ABANDONED) or (R = WAIT_FAILED);

Result := (R = WAIT_OBJECT_0); // Результат выполнения ОК ?
end;
----------

Но можно обойтись и двумя:
WaitForInputIdle(hProcess, INFINITE);
WaitForSingleObject(hProcess, INFINITE);


Все вопросы по мылу...


 
Севостьянов Игорь ©   (2002-03-26 13:16) [2]

Да совсем заморочился можно же и по другому зная Handle окна (как найти уже не раз писали)

DWORD GetWindowThreadProcessId(
HWND hWnd, // handle to window
LPDWORD lpdwProcessId // process identifier
);

----------
{ Ожидаем завершения приложения }
begin
if GetWindowThreadProcessId(hWindow, hProcess) <> 0 then
repeat
if hProcess = 0 then
begin
R := WAIT_FAILED;
Break;
end;
R := WaitForSingleObject(hProcess, 100); // ожидаем 100 миллисекунд
if R = WAIT_TIMEOUT then
begin
Repaint; // Перерисовываем твою форму
end;
until (R = WAIT_OBJECT_0) or (R = WAIT_ABANDONED) or (R = WAIT_FAILED);

Result := (R = WAIT_OBJECT_0); // Результат выполнения ОК ?
end;
----------





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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.027 c
1-88543
maxim2
2002-05-16 13:15
2002.05.27
Как в Edit сделать маску ввода?


3-88360
agrig
2002-04-28 11:11
2002.05.27
Неправильное обновление поля типа N в парадоксе


3-88340
rex
2002-04-30 12:41
2002.05.27
Хочу сделать дистрибутив проги с FireBird


14-88615
Val
2002-04-12 10:51
2002.05.27
---|Ветка была без названия|---


4-88673
SPeller
2002-03-27 06:49
2002.05.27
Разрешение




   Наверх