2011-11-21 164 views
1

我试图让充电%,而正是那就是视窗显示相同的文本 - 不充电,充满电,充电如何使用WMI从WPF应用程序获取电池充电状态?

我使用WMI查询。

我不想对文本进行硬编码,因为它每次工作都不一样。有时显示95% - 不收费,或可以收费。

有什么方法可以得到结果文本吗?

我可以做什么,只是为了检查它是否是100%的收费,显示全部收费。

但对于96%,它的工作方式不同,有时Windows显示充电,或不在充电

回答

2

使用Win32_Battery类:

static string GetBatteryStatus() { 
    ManagementScope scope = new ManagementScope("//./root/cimv2"); 
    SelectQuery query = new SelectQuery("Select BatteryStatus From Win32_Battery"); 
    using(ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) { 
     using(ManagementObjectCollection objectCollection = searcher.Get()) { 
      foreach(ManagementObject mObj in objectCollection) { 
       PropertyData pData = mObj.Properties["BatteryStatus"]; 
       switch((Int16)pData.Value) { 
        //... 
        case 2:return "Not Charging"; 
        case 3:return "Fully Charged"; 
        case 4:return "Low"; 
        case 5: return "Critical"; 
        //... 
       } 
      } 
     } 
    } 
    return string.Empty; 
} 
1

我知道这是一个老问题,但另一种方式来获取有关电池的信息而不是使用查询是使用ManagementClass。这里有一些代码来获得电池状态(FullyCharged,Discharge等等)和一些代码来获得估计的剩余电池百分比。

public enum BatteryStatus : ushort 
{ 
    Discharging = 1, 
    AcConnected, 
    FullyCharged, 
    Low, 
    Critical, 
    Charging, 
    ChargingAndHigh, 
    ChargingAndLow, 
    ChargingAndCritical, 
    Undefined, 
    PartiallyCharged 
} 

...

/// <summary> 
    /// Gets the battery status. 
    /// </summary> 
    /// <returns></returns> 
    public static BatteryStatus GetBatteryStatus() 
    { 
     ManagementClass wmi = new ManagementClass("Win32_Battery"); 
     ManagementObjectCollection allBatteries = wmi.GetInstances(); 
     BatteryStatus status = BatteryStatus.Undefined; 

     foreach (var battery in allBatteries) 
     { 
      PropertyData pData = battery.Properties["BatteryStatus"]; 

      if (pData != null && pData.Value != null && Enum.IsDefined(typeof(BatteryStatus), pData.Value)) 
      { 
       status = (BatteryStatus)pData.Value; 
      } 
     } 

     return status; 
    } 

您可以使用以下方法来获得剩余的百分比。

/// <summary> 
    /// Gets the percent of power remaining in the battery. 
    /// </summary> 
    /// <returns></returns> 
    public static double GetBatteryPercent() 
    { 
     ManagementClass wmi = new ManagementClass("Win32_Battery"); 
     ManagementObjectCollection allBatteries = wmi.GetInstances(); 

     double batteryLevel = 0; 

     foreach (var battery in allBatteries) 
     { 
      batteryLevel = Convert.ToDouble(battery["EstimatedChargeRemaining"]); 
     } 

     return batteryLevel; 
    } 
相关问题