Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2012, 16:49   #1
mixaleon
 
Регистрация: 30.04.2011
Сообщений: 4
Восклицание Как программно отследить момент запуска другого приложения win7?

Собственно хочу написать приложение которое будет запущено с правами администратора, и постоянно висеть в системе. По ходу работы оно будет отслеживать момент запуска пользователем приложения и сохранять данные о нем в лог. Как реализовать именно реакцию моей программы на запуск нового приложения?
Как пример: пользователь запустил оперу, мое приложение добавило в лог информацию что в "HH.MM.SS" запущено опера.ехе и т.п.
mixaleon вне форума Ответить с цитированием
Старый 02.08.2012, 17:33   #2
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

думаю в таймере проверять все процессы так можно узнать добавился ли какой то процесс, потом по его имени отследить его местоположение exe'шника и время запуска. далее запись в лог.
wm_leviathan вне форума Ответить с цитированием
Старый 02.08.2012, 17:54   #3
mixaleon
 
Регистрация: 30.04.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от wm_leviathan Посмотреть сообщение
думаю в таймере проверять все процессы так можно узнать добавился ли какой то процесс, потом по его имени отследить его местоположение exe'шника и время запуска. далее запись в лог.
это будет либо сильно нагружать систему(если интервал маленьким сделать) либо давать не совсем точное время при записи в лог... и все равно ресурсов будет кушать больше нежели если просто отловить лишь событие запуска приложения в момент запуска..
mixaleon вне форума Ответить с цитированием
Старый 02.08.2012, 18:35   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

http://www.pinvoke.net/default.aspx/...twindowshookex думаю можно поиграться с этой функцией setwindowshookex только hooktype.WH_SHELL = 10
Цитата:
Приложение может использовать WH_SHELL хук, чтобы получать важные уведомления. Система вызывает процедуру WH_SHELL хук, когда приложение собирается быть активирована и когда окна верхнего уровня создано или уничтожено.
или еще прочитал http://msdn.microsoft.com/ru-ru/library/a329t4ed.aspx
вы можете подключиться как деббагер к котнкретному приложению, система будет запускать ваше приложение и как параметр передавать другое
Reskov вне форума Ответить с цитированием
Старый 02.08.2012, 20:18   #5
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
это будет либо сильно нагружать систему(если интервал маленьким сделать) либо давать не совсем точное время при записи в лог... и все равно ресурсов будет кушать больше нежели если просто отловить лишь событие запуска приложения в момент запуска..
Без таймера всё равно не обойтись. Придется всё равно как-то следить за приложениями. Даже если тупо следить за самим исполняемым файлом. Я думаю, если поставить таймер 1 секунду, например, и приоритет в диспетчере у вашей программы "ниже среднего", то нагрузка на систему будет минимальна. Выдергивать из диспетчера задачи и сверять с прошлым списком. Если задач не 1000, а 35-40, то не думаю, что ужс будет.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 02.08.2012, 20:25   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Цитата:
думаю в таймере проверять все процессы так можно узнать добавился ли какой то процесс, потом по его имени отследить его местоположение exe'шника и время запуска
это будет либо сильно нагружать систему(если интервал маленьким сделать) либо давать не совсем точное время при записи в лог
кто вам такое сказал, что будет сильно нагружать? А насчет точного времени это как, с миллисекундами?

p.s.: а вообще, ReadDirectoryChangesW() для отслеживания проишествий в нужном каталоге.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.08.2012, 09:04   #7
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

таймер вообще то не нагружает систему. сам писал прогу которая должна выполнять копирование архивов в заданное пользователем время, так вот там 2 таймера. ресурсы проца вообще не ест. и кстати таймер работает в отдельном потоке. ReadDirectoryChangesW() думаю да можно было бы, но я так понял что запуститься может любая программа в любом месте и эту любую надо записать в лог. попробуйте опрашивать с некоторой периодичностью процессы System.Diagnostics.Process.GetProce sses(). и сравнивать их с текущим списком. процессорное время не будет есть, иначе пробуйте работать с хуками.

Последний раз редактировалось wm_leviathan; 03.08.2012 в 09:39.
wm_leviathan вне форума Ответить с цитированием
Старый 03.08.2012, 14:54   #8
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Интересно, а может система сама ведет какой-нибудь лог?) Получить бы к нему доступ)
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 03.08.2012, 17:12   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вы будете отслеживать только exe? Если нет, то никак.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 03.08.2012, 17:53   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
ReadDirectoryChangesW() думаю да можно было бы, но я так понял что запуститься может любая программа в любом месте и эту любую надо записать в лог
назначить все диски и будет отслеживать все что есть.

Цитата:
Интересно, а может система сама ведет какой-нибудь лог?
журнал событий ведет, однако его и активировать нужно ...для своих приложений RegisterEventSource().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить параметры запуска приложения? Oskaria Помощь студентам 2 23.09.2010 07:56
Как нажать кнопку другого приложения? TwiX Общие вопросы Delphi 2 29.07.2009 19:08
Как работать с меню другого приложения ? Stimer Win Api 1 17.12.2008 16:30
Как определить момент запуска сторонней программы? NioTo Win Api 2 17.12.2007 16:40