Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.
Здравствуйте, pus, Вы писали:
pus>Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.
Следить за процессами можно только на низком уровне. Это тебе скорее нужно идти в форума по ВинАПИ...
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Регистрация запуска новых процессов
От:
Аноним
Дата:
21.03.04 17:49
Оценка:
Здравствуйте, pus, Вы писали:
pus>Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.
За линк спасибо. Буду разбираться. Но вот что непонятно: ведь есть в System.Diagnistics простые средства, чтобы запустить или остановить процесс. Неужели нет дотнетовских средств, чтобы реагировать на изменения в списке запущенных процессов? Задачка то достаточно простая. Неужели не обойтись без WinAPI?
Здравствуйте, pus, Вы писали:
pus>Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.
Смотреть нужно на WMI классы. в частности Win32_Process — достаточно просто следить за созданием новых экземпляров.
Например, как это делается на VBS.
Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"Set EventSource = GetObject("winmgmts:\\.\root\cimv2").ExecNotificationQuery (Query)
While true
Set NTEvent = EventSource.NextEvent
WScript.Echo NTEvent.TargetInstance.Name
Wend
PS
Так-же может пригодится утилита MgmtClassGen.exe из Framework SDK
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Благодарю, получилось! Но только для регистрации запуска Notepad. Но вот не пойму, как регистрировать остановку процессов Notepad. Следить за идентификаторами процессов мне не нужно — достаточно отреагировать на событие, когда последний из работающих ноутпадов закрывается. Надо, как я понимаю, всего лишь изменить в Вашем линке строку запроса:
string QUERY_WATCHER = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'";
Но не знаю как. Подскажите, что нужно поставить вместо __InstanceCreationEvent? И, вообще, где почитать про составление таких запросов? В MSDN порылся — не нашел.
pus>string QUERY_WATCHER = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'";
pus>
pus>Но не знаю как. Подскажите, что нужно поставить вместо __InstanceCreationEvent? И, вообще, где почитать про составление таких запросов? В MSDN порылся — не нашел.
__InstanceDeletionEvent (в MSDN все это есть)
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Смотреть нужно на WMI классы. в частности Win32_Process — достаточно просто следить за созданием новых экземпляров.
TK>Например, как это делается на VBS. TK>
TK>Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"
TK>Set EventSource = GetObject("winmgmts:\\.\root\cimv2").ExecNotificationQuery (Query)
TK>While true
TK> Set NTEvent = EventSource.NextEvent
TK> WScript.Echo NTEvent.TargetInstance.Name
TK>Wend
TK>
Благодарю, c регистрацией запуска новых процессов я разобрался. Но вот не пойму, как регистрировать остановку запущенных. Проблема в составлении запроса, аналогичного Вашему:
Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"
Как его изменить? Что нужно поставить вместо __InstanceCreationEvent?
Здравствуйте, pus
pus>Благодарю, c регистрацией запуска новых процессов я разобрался. Но вот не пойму, как регистрировать остановку запущенных. Проблема в составлении запроса, аналогичного Вашему:
pus>
pus>Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"
pus>
pus>Как его изменить? Что нужно поставить вместо __InstanceCreationEvent?