Форум: "WinAPI";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c