C#スナッププロセスの開始イベントと終了イベント
C#キャプチャプロセスの開始と終了イベントによりnotepadを禁止する.exeが実行されます.これはフックを使うコードよりずっと少ないです.しかし、私がテストしたとき、たまにイベントが漏れていることがあります.要求があまり厳しくないところは、やはり使えます.
- using System;
- using System.Management;
-
- class Process
- {
- public static void Main()
- {
- ManagementEventWatcher startWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
- startWatch.EventArrived += new EventArrivedEventHandler(startWatch_EventArrived);
- startWatch.Start();
- ManagementEventWatcher stopWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
- stopWatch.EventArrived += new EventArrivedEventHandler(stopWatch_EventArrived);
- stopWatch.Start();
- Console.WriteLine("Press ENTER to exit");
- Console.ReadLine();
- startWatch.Stop();
- stopWatch.Stop();
- }
-
- static void stopWatch_EventArrived(object sender, EventArrivedEventArgs e)
- {
- Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value);
- }
-
- static void startWatch_EventArrived(object sender, EventArrivedEventArgs e)
- {
- string name = e.NewEvent.Properties["ProcessName"].Value.ToString();
- int id = Convert.ToInt32(e.NewEvent.Properties["ProcessId"].Value);
- Console.WriteLine("Process started: {0}", name);
- if (name == "notepad.exe")
- {
- System.Diagnostics.Process.GetProcessById(id).Kill();
- }
- }
- }