Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用WMI从WPF应用程序获取电池充电状态?_C#_.net_Wpf_Wmi Query - Fatal编程技术网

C# 如何使用WMI从WPF应用程序获取电池充电状态?

C# 如何使用WMI从WPF应用程序获取电池充电状态?,c#,.net,wpf,wmi-query,C#,.net,Wpf,Wmi Query,我正在尝试获取充电百分比,与Windows显示的文本完全相同-不充电、完全充电、充电 我正在使用wmi查询 我不想硬编码那些文本,因为它每次的工作方式都不一样。 有时它显示95%——不充电,或者可以充电 有没有办法得到结果文本 我能做的,只是检查它是否100%充电,显示完全充电 但对于96%的用户来说,它的工作方式不同,有时Windows显示屏收费,有时不收费使用该类: 我知道这是一个老问题,但是获取电池信息而不是使用查询的另一种方法是使用ManagementClass。这里有一些代码可以获取电

我正在尝试获取充电百分比,与Windows显示的文本完全相同-不充电、完全充电、充电

我正在使用wmi查询

我不想硬编码那些文本,因为它每次的工作方式都不一样。 有时它显示95%——不充电,或者可以充电

有没有办法得到结果文本

我能做的,只是检查它是否100%充电,显示完全充电

但对于96%的用户来说,它的工作方式不同,有时Windows显示屏收费,有时不收费使用该类:


我知道这是一个老问题,但是获取电池信息而不是使用查询的另一种方法是使用ManagementClass。这里有一些代码可以获取电池状态(完全充电、放电等),还有一些代码可以获取估计的剩余电池百分比

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

//
///获取电池状态。
/// 
/// 
公共静态BatteryStatus GetBatteryStatus()
{
ManagementClass wmi=新的ManagementClass(“Win32_电池”);
ManagementObjectCollection AllBatters=wmi.GetInstances();
电池状态=电池状态未定义;
foreach(所有电池中的var电池)
{
PropertyData pData=电池。属性[“电池状态”];
if(pData!=null&&pData.Value!=null&&Enum.IsDefined(typeof(BatteryStatus),pData.Value))
{
状态=(电池状态)pData.Value;
}
}
返回状态;
}
您可以使用以下方法获取剩余百分比

    /// <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;
    }
//
///获取电池剩余电量的百分比。
/// 
/// 
公共静态双GetBatteryPercent()
{
ManagementClass wmi=新的ManagementClass(“Win32_电池”);
ManagementObjectCollection AllBatters=wmi.GetInstances();
双电池电平=0;
foreach(所有电池中的var电池)
{
batteryLevel=Convert.ToDouble(电池[“估计充电维护]);
}
返回电池级;
}
    /// <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;
    }