我目前正在编写一个Winforms应用程序,该应用程序对在后台运行的程序很敏感。目前,我有一个线程每秒检查一次我感兴趣的进程是否已经启动/仍在运行,但是我敢肯定,如果我可以使用一个事件告诉我用户何时打开,这将变得更加容易/关闭应用程序。请注意,我不是在程序中手动启动该过程。用户对此拥有完全控制权。查看过程文档,我什么都看不到。有什么办法可以吸引到这个吗?
最佳答案
您也可以使用WMI事件来跟踪此事件。
这是一个例子:
static void Main(string[] args)
{
var query = new EventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance isa \"Win32_Process\"");
using (var eventWatcher = new ManagementEventWatcher(query))
{
eventWatcher.EventArrived += eventWatcher_EventArrived;
eventWatcher.Start();
Console.WriteLine("Started");
Console.ReadLine();
eventWatcher.EventArrived -= eventWatcher_EventArrived;
eventWatcher.Stop();
}
}
static void eventWatcher_EventArrived(object sender, EventArrivedEventArgs e)
{
try
{
var instanceDescription = e.NewEvent.GetPropertyValue("TargetInstance") as ManagementBaseObject;
if(instanceDescription!=null)
{
var executablePath = instanceDescription.GetPropertyValue("ExecutablePath");
if(executablePath!=null)
{
Console.WriteLine("Application {0} started", executablePath.ToString());
}
}
}
catch (ManagementException) { }
}
有很多可以接收的过程属性。像优先级,描述,命令行参数等。您可以在instanceDescription.Properties中查找详细信息。