2013-07-15 2 views
1

Я пытаюсь поймать событие BatteryStatusChange в WMI. Когда я выполняю свою программу, я вообще не получаю никаких событий батареи, когда батарея начинает заряжаться или разряжается.

Это мой код, который я пытаюсь из:BatteryStatusChange Событие WMI не принимается

namespace BatteryStatusChange 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      WqlEventQuery query = new WqlEventQuery(
       "SELECT * FROM BatteryStatusChange"); 

      ManagementScope Scope = new ManagementScope(String.Format("\\\\{0}\\root\\WMI", "localhost"), null); 
      Scope.Connect(); 

      ManagementEventWatcher watcher = new ManagementEventWatcher(Scope, query); 
      Console.WriteLine("Waiting for an event..."); 

      ManagementBaseObject eventObj = watcher.WaitForNextEvent(); 

      Console.WriteLine("{0} event occurred.", eventObj["__CLASS"]); 

      // Cancel the event subscription 
      watcher.Stop(); 
      return; 
     } 
     catch (ManagementException err) 
     { 
      MessageBox.Show("An error occurred while trying to receive an event: " + err.Message); 
     } 
    } 
} 
} 

Когда я выполняю эту программу, я не получаю никаких событий батареи на всех либо когда батарея начнет заряжаться или разрядка.

Я также попытался немного разные строки запроса, как показано ниже, но безрезультатно:

SELECT * FROM BatteryStatusChange WHERE PowerOnline = TRUE 

Любая помощь будет принята с благодарностью.

ответ

1

Попробуйте использовать класс WMI BatteryStatus.

Попробуйте этот образец.

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("TargetInstance.Charging :    " + ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["Charging"]); 
      Console.WriteLine("TargetInstance.Description :   " + ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["Description"]); 
      Console.WriteLine("TargetInstance.Name :     " + ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["Name"]); 
      Console.WriteLine("TargetInstance.PowerOnline :   " + ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["PowerOnline"]); 
      Console.WriteLine("TargetInstance.RemainingCapacity : " + ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["RemainingCapacity"]); 
      Console.WriteLine("TargetInstance.Voltage :    " + ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["Voltage"]); 

     } 

     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 __InstanceModificationEvent Within 1 "+ 
       "Where TargetInstance ISA 'BatteryStatus' "; 

       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}", "__InstanceModificationEvent"); 
      Console.WriteLine("Press Enter to exit"); 
      EventWatcherAsync eventWatcher = new EventWatcherAsync(); 
      Console.Read(); 
     } 
    } 
} 
+0

Это замечательно. Цените свой ответ и извините за задержку в принятии этого ответа. – Sandman

+0

Нет проблем. рад помочь вам. – RRUZ

Смежные вопросы