1

充電率を取得しようとしていますが、Windowsが表示しているのとまったく同じテキストです-充電さ​​れていません、完全に充電されています、充電しています

wmi-queryを使用しています。

毎回動作が異なるため、そのテキストをハードコーディングしたくありません。時々それは95パーセントを示しています-充電さ​​れていない、または充電されている可能性があります。

その結果テキストを取得する方法はありますか?

100%充電されているかどうかを確認するために、フル充電を表示するために私にできること。

しかし、96%の場合、動作が異なり、Windowsの表示が充電されている、または充電されていない場合があります

4

2 に答える 2

2

これは古い質問ですが、クエリを使用する代わりにバッテリーに関する情報を取得する別の方法は、ManagementClassを使用することです。バッテリーの状態(完全充電、放電など)を取得するためのコードと、バッテリー残量の推定値を取得するためのコードを次に示します。

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;
    }
于 2015-08-27T14:37:04.443 に答える
1

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;
}
于 2011-11-21T10:03:58.917 に答える