Обнаружение запуска приложения - PullRequest
12 голосов
/ 16 марта 2009

Как определить с помощью C # в Windows момент, когда запускается внешнее приложение?

Я попробовал FilesystemWatcher, который не работает, потому что файл на самом деле не меняется. Кроме того, наличие таймера, постоянно проверяющего все открытые процессы, может быть слишком сложным. Есть ли другой способ сделать это? Если нет в C #, можно ли это сделать в C ++ (если да, приведите пример).

Причина, по которой я хочу это сделать, - для регистрации.

1 Ответ

21 голосов
/ 16 марта 2009

Вы можете использовать System.Management и WMI (инструментарий управления Windows)

class WMIEvent {
    public static void Main() {
        WMIEvent we = new WMIEvent();
        ManagementEventWatcher w= null;
        WqlEventQuery q;
        try {
            q = new WqlEventQuery();
            q.EventClassName = "Win32_ProcessStartTrace";
            w = new ManagementEventWatcher(q);
            w.EventArrived += new EventArrivedEventHandler(we.ProcessStartEventArrived);
            w.Start();
            Console.ReadLine(); // block main thread for test purposes
        }
        finally {
            w.Stop();
        }
 }

    public void ProcessStartEventArrived(object sender, EventArrivedEventArgs e) {    
        foreach(PropertyData pd in e.NewEvent.Properties) {
            Console.WriteLine("\n============================= =========");
            Console.WriteLine("{0},{1},{2}",pd.Name, pd.Type, pd.Value);
        }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...