检查过程信息(使用轮询)
Process [] processes = Process.GetProcessesByName("notepad");
if(processes.Length > 0)
processes[0].StartTime;
使用本地Windows(WMI)的API注册一个事件:
using System;
using System.ComponentModel;
using System.Collections;
using System.Globalization;
using System.Management;
namespace WMI.Win32
{
public delegate void ProcessEventHandler(Win32_Process proc);
public class ProcessWatcher : ManagementEventWatcher
{
// Process Events
public event ProcessEventHandler ProcessCreated;
public event ProcessEventHandler ProcessDeleted;
public event ProcessEventHandler ProcessModified;
// WMI WQL process query strings
static readonly string WMI_OPER_EVENT_QUERY = @"SELECT * FROM
__InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'";
static readonly string WMI_OPER_EVENT_QUERY_WITH_PROC =
WMI_OPER_EVENT_QUERY + " and TargetInstance.Name = '{0}'";
public ProcessWatcher()
{
Init(string.Empty);
}
public ProcessWatcher(string processName)
{
Init(processName);
}
private void Init(string processName)
{
this.Query.QueryLanguage = "WQL";
if (string.IsNullOrEmpty(processName))
{
this.Query.QueryString = WMI_OPER_EVENT_QUERY;
}
else
{
this.Query.QueryString =
string.Format(WMI_OPER_EVENT_QUERY_WITH_PROC, processName);
}
this.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
}
private void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
string eventType = e.NewEvent.ClassPath.ClassName;
Win32_Process proc = new
Win32_Process(e.NewEvent["TargetInstance"] as ManagementBaseObject);
switch (eventType)
{
case "__InstanceCreationEvent":
if (ProcessCreated != null) ProcessCreated(proc); break;
case "__InstanceDeletionEvent":
if (ProcessDeleted != null) ProcessDeleted(proc); break;
case "__InstanceModificationEvent":
if (ProcessModified != null) ProcessModified(proc); break;
}
}
}
// Auto-Generated running: mgmtclassgen Win32_Process /n root\cimv2 /o WMI.Win32
// Renaming the class from Process to Win32_Process
public class Win32_Process { ... }
}
// Sample Usage
ProcessWatcher procWatcher = new ProcessWatcher("notepad.exe");
procWatcher.ProcessCreated += new ProcessEventHandler(procWatcher_ProcessCreated);
procWatcher.ProcessDeleted += new ProcessEventHandler(procWatcher_ProcessDeleted);
procWatcher.ProcessModified += new ProcessEventHandler(procWatcher_ProcessModified);
procWatcher.Start();
// Do Work
procWatcher.Stop();
链接只有答案没有做出很好的答案。将内容保留在此处是我们将其他网站作为参考的目标。 – ChrisF 2012-01-31 22:44:49
好吧,我刚刚给答案加了一些代码 – Salaros 2012-01-31 22:46:52
感谢您的回复。但是,我希望我的应用程序以Windows开始,并等待我想要的应用程序(例如记事本)启动。您建议通过定期检查正在运行的进程来进行轮询。或不? – 2012-01-31 22:55:12