2012-07-28 18 views
5

有一些事件通過WMI暴露,但我似乎無法找到訂閱和被警告這些事件的任何實例。特別是我想實施WmiMonitorBrightnessEvent將通知推送給Growl/Snarl。如何消耗在C#WMI活動

+0

你有什麼代碼到目前爲止的文件?你有沒有回顧過等待創建WMI實例的例子[這裏](http://msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.aspx)? – Richard 2012-07-28 16:30:30

+1

使用WMI Code Creator實用程序,單擊「接收事件」選項卡。它會自動爲您生成C#代碼。這個在我的機器上不起作用,並不罕見。 – 2012-07-28 17:39:31

+0

@HansPassant:謝謝,從來沒有聽說過WMI代碼創建器實用程序,將檢查出來。我沒有代碼,因爲我甚至不知道從哪裏開始。下面的RRUZ答案肯定能幫助我開始。 – esac 2012-07-28 20:17:44

回答

9

這是爲接收WmiMonitorBrightnessEvent WMI事件的樣本代碼。

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(); 
     } 
    } 
} 

如果你是新來的WMI嘗試使用像WMI Delphi Code Creator的工具和閱讀有關這個​​話題Receiving a WMI Event