Как получить статус зарядки аккумулятора из приложения WPF с помощью WMI? - PullRequest
1 голос
/ 21 ноября 2011

Я пытаюсь получить процент заряда и точно такой же текст, который показывает Windows - Не заряжается, полная зарядка, зарядка

Я использую wmi-запрос.

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

Есть ли какой-нибудь способ получить этот текст результата?

Что я могу сделать, просто проверить, заряжен ли он на 100 процентов, чтобы отобразить полный заряд.

Но для 96 процентов он работает по-другому, иногда дисплей Windows заряжается или не заряжается

Ответы [ 2 ]

2 голосов
/ 27 августа 2015

Я знаю, что это старый вопрос, но другой способ получить информацию о батарее вместо использования запроса - использовать ManagementClass.Вот некоторый код для получения статуса батареи (FullyCharged, Discharging и т.д. ...) и некоторый код для получения приблизительного процента оставшегося заряда батареи.

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;
    }
2 голосов
/ 21 ноября 2011

Используйте класс 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;
}
...