var si: Tstartupinfo;
p: Tprocessinformation;
...
with si do
begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
Createprocess(nil, pchar('xxx.exe'), nil, nil, false, create_default_error_mode, nil, nil, si, p);
while WaitforSingleObject(p.hProcess, 100) =
WAIT_TIMEOUT do
begin
...
//процесс еще работает, здесь лучше что-нибудь сделать чтобы прога не зависла, в дельфи например application.processmessages.
...
end;
//процесс завершился. выполняешь нужные действия.
Поиск процессов
(xxx.exe представляет сабой тест, запускается главная форма в которой пользователь выбирает нужный тест и программа запускает этот тест ввиде отдельного процесса, а сама выгружается т.е. получается что xxx.exe загрузился, пользователь выбрал допустим какойто тест соответствующий yyy.exe и в диспечере задач процесс xxx.exe стал yyy.exe, хотя сама программа продолжает работать.) Мне надо выкупать когда пользователь вообще выходит из программы. Вот никак ума не приложу как бы выкрутиться из этой ситуации. Может можно както перехватывать имя или дискриптор окна нового. хз
вот посмотри. прога запускает процесс и дожидается его завершения, правда на дельфи:
А не проще сделать так, чтобы процесс yyy.exe посылал главному приложению сообщение о завршении? Насколько я понимаю, узнавать о завершении процесса будет одно и тоже приложение.
Не проще, так как процесс может завершиться аварийно.
Оптимально просто использовать хэндл созданого процесса как объект синхрониции.
хендл возвращает CreateProcess, а потом просто
WaitForSingleObject(hProcess, INFINITE);
Только лучше это делать в отдельном потоке, чтоб основная прога не тормозила при обработке сообщений
что, уже не в моде?
что, уже не в моде?[/QUOTE]
Чета я не нашел такой в описании WinAPI.
В любом случае лучше использовать напрямую полученные хендлы или ID, так как существует возможность, что будет запущен другой процесс с тем же именем, тогда можем обработать завершение не того процесса.
Я так понял что, хэндл загруженного допустим xxx.exe меняется на другой когда сам xxx.exe запускает другой процесс из себя. Просто первая форма которая всегда запускается первой это xxx.exe, а дальше неизвестно. Вот я и хотел отслеживать както посредством API хэндлы или имена других окон запущеных xxx.exe
Цитата:
Чета я не нашел такой в описании WinAPI.
Но тогда будет проблема:
Цитата:
существует возможность, что будет запущен другой процесс с тем же именем, тогда можем обработать завершение не того процесса.
каждый процесс создавал мьютекс.
Тогда другой программе достаточно будет ждать по всем мьютексам. Если все мьютексы свободны, значит можно действовать
Впринципе известно, только они могут быть дополнены и придётся постоянно дополнять программу. Хотел просто как то перехватывать новые процессы.