Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.27;
Скачать: 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 вся ветка

Текущий архив: 2002.05.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
3-88346
nikulin
2002-04-30 15:51
2002.05.27
КАК?????


1-88408
Stexen
2002-05-16 23:45
2002.05.27
ZLIB ZLIB ZLIB ZLIB


1-88557
Сатир
2002-05-16 15:12
2002.05.27
Определение битмапы для нового компонента


4-88672
Bboy
2002-03-26 09:05
2002.05.27
Убить или не убить приложение???


3-88386
Makss
2002-05-04 10:10
2002.05.27
ICQ!!