WMI fornisce un modo per tenere traccia dei processi che iniziano e terminano con le classi Win32_ProcessTrace. Meglio mostrato con un esempio. Avviare una nuova applicazione Console, Progetto + Aggiungi riferimento, selezionare System.Management. Incolla questo codice:
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 any key to exit");
while (!Console.KeyAvailable) System.Threading.Thread.Sleep(50);
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) {
Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value);
}
}
Edit the manifest quindi questo programma viene eseguito elevata. Quindi avvia semplicemente alcuni programmi per vederlo al lavoro. Fai attenzione che non è particolarmente veloce.
fonte
2009-12-31 19:44:22
Grazie. Ho appena provato e funziona perfettamente. –
Funziona perfettamente, ma il ritardo è fastidioso, c'è comunque lo scopo di farlo più velocemente? –
L'ho appena provato e ho un ritardo di meno di 1 secondo. Penso che questo sia ok. – webber2k6