2012-07-28 12 views
5

Hay algunos eventos expuestos a través de WMI, pero parece que no puedo encontrar ningún ejemplo para suscribirse y ser alertado de esos eventos. Particularmente quiero implementar WmiMonitorBrightnessEvent para enviar una notificación a Growl/Snarl.Cómo consumir eventos WMI en C#

+0

¿Qué código tiene usted hasta ahora? ¿Ha revisado el ejemplo de esperar en una creación de instancia de WMI [aquí] (http://msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.aspx)? – Richard

+1

Use la utilidad WMI Code Creator, haga clic en la pestaña "Recibir un evento". Genera automáticamente el código C# por usted. Este no funciona en mi máquina, no es inusual. –

+0

@HansPassant: gracias, nunca he oído hablar de la utilidad de creación de código WMI, lo comprobaré. No tengo código porque ni siquiera sabía por dónde empezar. La respuesta de RRUZ a continuación definitivamente debería ayudarme a comenzar. – esac

Respuesta

9

Este es un código de ejemplo para recibir el evento WMI de 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(); 
     } 
    } 
} 

Si usted es nuevo en el WMI trate de usar una herramienta como el WMI Delphi Code Creator y la lectura de la documentación relacionada con este tema Receiving a WMI Event