Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ловить запуск и завершение приложения? [Win95/98, WinME]


ghost_by ©   (2002-04-25 13:34:00) 

Как ловить запуск любой программы и ее завершение? Задача состоит в том, чтобы вести что-то вроде лога запускаемых приложений и время работы этих приложений, но как это сделать - не знаю.
Или хотя бы подскажите в каком направлении копать.


ghost_by   (2002-04-28 01:25:00) [1]

Спасибо.


paul_shmakov   (2002-04-27 19:23:00) [2]

2 ghost_by:

> Almaz © (26.04.02 23:47)
> Запуски всех программ можно отловить только написать драйвер.
>

А по подробнее можно? Очень нужно.


если нет проблем с написанием драйверов, то можно.

и для семейства win9x/me, и для nt/2k/xp есть возможность в драйвере получать уведомления о создании процессов.
под win9x виртуальный драйвер устройства может обрабатывать сообщения CREATE_PROCESS от VWIN32. в nt/2k можно зарегистрировать свою callback-функцию обработчик с помощью PsSetCreateProcessNotifyRoutine.

более подробно для win9x:
http://www.internals.com/utilities/win95/procspy32/ProcSpy32.zip
а для nt:
http://www.microsoft.com/msj/defaulttop.asp?page=/msj/0199/nerd/nerd0199top.htm


ghost_by   (2002-04-27 18:08:00) [3]


> Almaz © (26.04.02 23:47)
> Запуски всех программ можно отловить только написать драйвер.
>

А по подробнее можно? Очень нужно.


Almaz   (2002-04-27 00:16:00) [4]


> Vovchik ©

Совершенно верно. Но зато отловит ShellExecute и WinExec. А так как explorer и почти все файл-менеджеры используют именно ShellExecute, то большая часть , но как я уже сказал не все, запусков будет отловлено.
Кстати, перехвачены будут также всезапуски программ из под доса.

Удачи


Vovchik   (2002-04-27 00:02:00) [5]

> Almaz
Но точно не отловит запуск с помощью CreateProcess.


Almaz   (2002-04-26 23:47:00) [6]


> ghost_by ©

Запуски всех программ можно отловить только написать драйвер. Но большую часть запусков можно отловить следующим образом: в реестре в ключе HKEY_CLASSES_ROOT\exefile\shell\open\command значение по умолчанию установите в виде "C:\MYPROG.EXE %1 %*". Тепрь при попытке запуска почти любого EXE-файла будет каждый раз запускаться программа C:\MYPROG.EXE а в качестве командной строки ей будет передано имя запускаемого файла (с путем) и командная строка этого EXE. Теперь ваша программа должна самазапустить предложенную программу. Если этого не сделать - в Windows будет весьма проблематично запустить какую-либо программу :)

p.s. Этот метод сработает не на все запуски, но запуски программ из Explorer"a, Главного меню, WinCommander"a, Far"a ловит 100%.

Удачи.


Vovchik   (2002-04-26 16:00:00) [7]

С помощью хуков, по моему, можно отлавливать создание окон, но не запуск процессов. А CreateToolhelp32Snapshot - можно процессы ловить, только тормозить будет.


Ally   (2002-04-26 09:32:00) [8]

> Song

В добавлении к сказанному: помимо FindWindow() и EnumWindows() можно использовать ф-цию CreateToolhelp32Snapshot(), которая "takes a snapshot of the processes and the heaps, modules, and threads used by the processes".


Song   (2002-04-26 08:19:00) [9]

Именно так.
А Вы знаете сообщение какое возникает при старте любой программы? Нет? Значит про хук забудьте.


ghost_by   (2002-04-26 07:27:00) [10]

В направлении FindWindow(), EnumWindows()- это как? По таймеру, через определенный интервал EnumWindows() и смотреть не изменилось ли что?
А через hook никак нельзя.


Song   (2002-04-25 13:40:00) [11]

В направлении FindWindow(), EnumWindows()


Наверх

Титульная страница Поиск, карта сайта Написать письмо