Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск процессов

16K
11 ноября 2006 года
stupid
13 / / 28.10.2006
Задача такая. Моя программа запускает процесс например xxx.exe и когда процесс xxx.exe будет закрыт, моя прога выполнит какието действия. Т.е. нужно следить за тем, чтобы процесс был загружен. Ну это легко сделать с помощью ф-ии findwindow. Проблема в том, что допустим процесс xxx.exe при своей работе запускает другие процессы например yyy.exe, и сам выгружается. Но программа эта работает.
(xxx.exe представляет сабой тест, запускается главная форма в которой пользователь выбирает нужный тест и программа запускает этот тест ввиде отдельного процесса, а сама выгружается т.е. получается что xxx.exe загрузился, пользователь выбрал допустим какойто тест соответствующий yyy.exe и в диспечере задач процесс xxx.exe стал yyy.exe, хотя сама программа продолжает работать.) Мне надо выкупать когда пользователь вообще выходит из программы. Вот никак ума не приложу как бы выкрутиться из этой ситуации. Может можно както перехватывать имя или дискриптор окна нового. хз
257
11 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
вот посмотри. прога запускает процесс и дожидается его завершения, правда на дельфи:
Код:
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;
//процесс завершился. выполняешь нужные действия.

может поможет.
22K
11 ноября 2006 года
Zyava
7 / / 10.11.2006
А не проще сделать так, чтобы процесс yyy.exe посылал главному приложению сообщение о завршении? Насколько я понимаю, узнавать о завершении процесса будет одно и тоже приложение.
2.9K
12 ноября 2006 года
Ation
96 / / 27.07.2004
[QUOTE=Zyava]А не проще сделать так, чтобы процесс yyy.exe посылал главному приложению сообщение о завршении? [/QUOTE]
Не проще, так как процесс может завершиться аварийно.
Оптимально просто использовать хэндл созданого процесса как объект синхрониции.
хендл возвращает CreateProcess, а потом просто
WaitForSingleObject(hProcess, INFINITE);
Только лучше это делать в отдельном потоке, чтоб основная прога не тормозила при обработке сообщений
10K
12 ноября 2006 года
АлРАД
58 / / 30.08.2006
FindProcess ?????
что, уже не в моде?
334
13 ноября 2006 года
HexEdit
809 / / 27.07.2006
[QUOTE=АлРАД]FindProcess ?????
что, уже не в моде?[/QUOTE]
Чета я не нашел такой в описании WinAPI.

В любом случае лучше использовать напрямую полученные хендлы или ID, так как существует возможность, что будет запущен другой процесс с тем же именем, тогда можем обработать завершение не того процесса.
16K
14 ноября 2006 года
stupid
13 / / 28.10.2006
Прикол весь в том, что мне нужно следить за программой которую сделал не я. ПРосто есть программа в которой работают некоторое число людей и я хотел к ней сделать типа программку статистику. Я не знаю какой процесс будет запущен xxx.exe дальше (yyy.exe, zzz.exe итд неизвесное кол-во штук, всё зависит от пользователя).
Я так понял что, хэндл загруженного допустим xxx.exe меняется на другой когда сам xxx.exe запускает другой процесс из себя. Просто первая форма которая всегда запускается первой это xxx.exe, а дальше неизвестно. Вот я и хотел отслеживать както посредством API хэндлы или имена других окон запущеных xxx.exe
334
14 ноября 2006 года
HexEdit
809 / / 27.07.2006
Ну тогда тока FindWindow, мож FindProcess, но я оччень сомневаюсь
Цитата:
Чета я не нашел такой в описании WinAPI.


Но тогда будет проблема:

Цитата:
существует возможность, что будет запущен другой процесс с тем же именем, тогда можем обработать завершение не того процесса.

292
15 ноября 2006 года
Matush
726 / / 14.01.2004
Если программа запускает заведомо известные процессы, то можно чтобы
каждый процесс создавал мьютекс.
Тогда другой программе достаточно будет ждать по всем мьютексам. Если все мьютексы свободны, значит можно действовать
16K
16 ноября 2006 года
stupid
13 / / 28.10.2006
Впринципе известно, только они могут быть дополнены и придётся постоянно дополнять программу. Хотел просто как то перехватывать новые процессы.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог