2011-04-19 105 views
2

有没有某种方法可以在没有WMI的情况下获得电池的DesignCapacity和FullChargeCpacity? WMI不支持此值,所以我需要找到其他方式来获取它们。获取没有WMI的电池信息

或者,也许有人有更好(更容易)的想法,以获得C#电池的磨损水平?

BTW 我尝试使用这种方式只是返回null

ManagementObjectSearcher query = 
     new ManagementObjectSearcher("SELECT DesignCapacity FROM Win32_Battery"); 

foreach (ManagementObject queryObj in query.Get()) 
{ 
    string dc = Convert.ToString(queryObj.GetPropertyValue("DesignCapacity")); 
    label1.Text = dc + " mAh"; 
} 

感谢

+1

下载WMI Explorer中,让你知道的信息是可用来运行和测试WMI查询:http://www.ks-soft.net/hostmon.eng/wmi /index.htm – 2011-04-19 12:50:48

+0

WMI的重点在于您不必亲自与BIOS交谈。你做的事*不*想做。具有未实现的WMI属性和方法并不少见,您必须从机器制造商处获得更新的WMI提供程序。如果可用,通常不会。 – 2011-04-19 13:03:26

+0

那么没有其他方法可以获取这些数据?如果WMI不支持这些属性,并且机器制造商不提供任何WMI更新,那么以什么方式获取此类数据? – spychu 2011-04-19 14:16:27

回答

1

为了得到你需要做单独的查询针对不同类别,而不是win32_battery这些特定值。

DesignCapacity可以从BatteryStaticData

FullChargeCacity查询可以从BatteryFullChargedCapacity

查询

你需要在代码中使用不同的范围也为查询。这些类中的root/WMI代替root/cimv2

string scope = "root/WMI"; 
string query = "SELECT DesignedCapacity FROM BatteryStaticData"; 

ManagementObjectSearcher batteriesQuery = new ManagementObjectSearcher(scope, query); 

ManagementObjectCollection batteries = batteriesQuery.Get(); 

foreach (ManagementObject battery in batteries) 
{ 
    if (battery != null) 
    { 
     foreach (var property in battery.Properties) 
     { 
      Console.Log("Property name: " + property.Name + " Property value: " + property.Value); 
     } 
    } 
}