2012-07-28 3 views
5

WMI経由で公開されるイベントがいくつかありますが、購読したり、これらのイベントを警告する例はありません。特に私はWmiMonitorBrightnessEventを実装して、Growl/Snarlに通知を送りたいと思っています。C#でWMIイベントを消費する方法

+0

あなたがこれまでどのようなコードを持っていないこのトピックに関連するドキュメントを読んで? WMIインスタンスの作成[ここ](http://msdn.microsoft.com/en-us/library/system.management.managementeventwatcher.aspx)で待機する例を見直しましたか? – Richard

+1

WMIコード作成ユーティリティを使用して、[イベントの受信]タブをクリックします。自動的にC#コードが自動的に生成されます。このマシンは私のマシンでは動作しません。異常ではありません。 –

+0

@ HansPassant:ありがとう、WMIコード作成ユーティリティについて聞いたことがない人は、それをチェックします。私はコードを持っていません。どこから始めるべきか分からないからです。以下のRRUZの回答は間違いなく私を始めてくれるはずです。 – esac

答えて

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

関連する問題