События WMI могут предупредить вас, когда создается новый процесс. В зависимости от события вам может потребоваться опрос. Используя класс Win32_ProcessStartTrace, вам не нужно опрашивать. Новые события возникают как события в вашем коде. Ниже приведен пример (добавьте System.Management в качестве ссылки в ваш проект)
public System.Management.ManagementEventWatcher mgmtWtch;
private delegate void ListBoxItemAdd(string Item);
public Form1()
{
InitializeComponent();
mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32_ProcessStartTrace");
mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch_EventArrived);
mgmtWtch.Start();
}
void AddItem(string Item)
{
if (lwProcesses.InvokeRequired)
lwProcesses.Invoke(new ListBoxItemAdd(AddItem), Item);
else
lwProcesses.Items.Add(Item);
}
void mgmtWtch_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
{
//MessageBox.Show((string)e.NewEvent["ProcessName"]);
foreach (Process p in Process.GetProcesses("."))
{
string Title = p.MainWindowTitle;
if (Title.Length > 0) AddItem(Title);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mgmtWtch.Stop();
}