![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ловить запуск и завершение приложения? [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()