2012-07-28 15 views
5

Istnieje kilka zdarzeń ujawnianych za pośrednictwem usługi WMI, ale nie mogę znaleźć przykładów subskrybowania i powiadamiania o tych zdarzeniach. W szczególności chcę wprowadzić WmiMonitorBrightnessEvent, aby wysłać powiadomienie do Growl/Snarl.Jak konsumować zdarzenia WMI w języku C#

+0

Jaki kod masz tak daleko? Czy przejrzałeś przykład oczekiwania na tworzenie instancji WMI [tutaj] (http://msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.aspx)? – Richard

+1

Użyj narzędzia WMI Code Creator, kliknij kartę "Odbierz wydarzenie". Automatycznie generuje kod C# dla ciebie. Ten nie działa na moim komputerze, nie jest niczym niezwykłym. –

+0

@HansPassant: dziękuję, nigdy nie słyszałem o narzędziu do tworzenia kodu WMI, sprawdzi to. Nie mam kodu, ponieważ nie wiedziałem nawet, od czego zacząć. Odpowiedź RRUZ poniżej zdecydowanie powinna pomóc mi zacząć. – esac

Odpowiedz

9

To jest przykładowy kod do odbioru zdarzenia 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(); 
     } 
    } 
} 

Jeśli jesteś nowy w WMI spróbować użyć narzędzia takie jak na WMI Delphi Code Creator i czytanie dokumentacji związanej z tym tematem Receiving a WMI Event

Powiązane problemy