Ci sono alcuni eventi espongono tramite WMI, ma io non riesco a trovare nessuna esempi per la sottoscrizione e di essere avvisati di quegli eventi. In particolare, desidero implementare WmiMonitorBrightnessEvent per inviare una notifica a Growl/Snarl.Come si consuma WMI Eventi a C#
5
A
risposta
9
Questo è un codice di esempio per ricevere l'evento WMI WmiMonitorBrightnessEvent
.
using System;
using System.Collections.Generic;
using System.Management;
using System.Text;
namespace GetWMI_Info
{
public class EventWatcherAsync
{
private void WmiEventHandler(object sender, EventArrivedEventArgs e)
{
Console.WriteLine("Active : " + e.NewEvent.Properties["Active"].Value.ToString());
Console.WriteLine("Brightness : " + e.NewEvent.Properties["Brightness"].Value.ToString());
Console.WriteLine("InstanceName : " + e.NewEvent.Properties["InstanceName"].Value.ToString());
}
public EventWatcherAsync()
{
try
{
string ComputerName = "localhost";
string WmiQuery;
ManagementEventWatcher Watcher;
ManagementScope Scope;
if (!ComputerName.Equals("localhost", StringComparison.OrdinalIgnoreCase))
{
ConnectionOptions Conn = new ConnectionOptions();
Conn.Username = "";
Conn.Password = "";
Conn.Authority = "ntlmdomain:DOMAIN";
Scope = new ManagementScope(String.Format("\\\\{0}\\root\\WMI", ComputerName), Conn);
}
else
Scope = new ManagementScope(String.Format("\\\\{0}\\root\\WMI", ComputerName), null);
Scope.Connect();
WmiQuery ="Select * From WmiMonitorBrightnessEvent";
Watcher = new ManagementEventWatcher(Scope, new EventQuery(WmiQuery));
Watcher.EventArrived += new EventArrivedEventHandler(this.WmiEventHandler);
Watcher.Start();
Console.Read();
Watcher.Stop();
}
catch (Exception e)
{
Console.WriteLine("Exception {0} Trace {1}", e.Message, e.StackTrace);
}
}
public static void Main(string[] args)
{
Console.WriteLine("Listening {0}", "WmiMonitorBrightnessEvent");
Console.WriteLine("Press Enter to exit");
EventWatcherAsync eventWatcher = new EventWatcherAsync();
Console.Read();
}
}
}
Se siete nuovi alla WMI provare a utilizzare uno strumento come il WMI Delphi Code Creator
e leggere la documentazione relativa a questo argomento Receiving a WMI Event
Quale codice hai fino ad ora? Hai esaminato l'esempio di attesa su una creazione di istanza WMI [qui] (http://msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.aspx)? – Richard
Utilizzare l'utilità WMI Code Creator, fare clic sulla scheda "Ricevi un evento". Genera automaticamente il codice C# per te. Questo non funziona sulla mia macchina, non inusuale. –
@HansPassant: grazie, mai sentito parlare del programma di utilità codice creatore WMI, sarà verificare che fuori. Non ho codice perché non sapevo nemmeno da dove cominciare. Risposta RRUZ qui sotto dovrebbe sicuramente aiutare a iniziare. – esac