我目前正在编写一个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中查找详细信息。

09-10 01:21
查看更多