2011-04-19 135 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); 
     } 
    } 
}