Вниз
Скачать: 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.009 c
7-88644
samos
2002-02-27 11:22
2002.05.27
Реестр или rundll32


3-88322
Vladimir V.N
2002-04-30 08:52
2002.05.27
InterBase and Internet Explorer


3-88381
Martyn
2002-05-01 13:41
2002.05.27
Вопрос по InterBase - TIBQuery против BDE+TQuery


6-88589
medan
2002-03-15 11:33
2002.05.27
ПОДКЛЮЧИТЬ ЛОКАЛЬНЫЙ КОМП


3-88342
blankalex
2002-04-30 11:37
2002.05.27
Рекурсии в триггерах




   Наверх