我试图让充电%,而正是那就是视窗显示相同的文本 - 不充电,充满电,充电如何使用WMI从WPF应用程序获取电池充电状态?
我使用WMI查询。
我不想对文本进行硬编码,因为它每次工作都不一样。有时显示95% - 不收费,或可以收费。
有什么方法可以得到结果文本吗?
我可以做什么,只是为了检查它是否是100%的收费,显示全部收费。
但对于96%,它的工作方式不同,有时Windows显示充电,或不在充电
我试图让充电%,而正是那就是视窗显示相同的文本 - 不充电,充满电,充电如何使用WMI从WPF应用程序获取电池充电状态?
我使用WMI查询。
我不想对文本进行硬编码,因为它每次工作都不一样。有时显示95% - 不收费,或可以收费。
有什么方法可以得到结果文本吗?
我可以做什么,只是为了检查它是否是100%的收费,显示全部收费。
但对于96%,它的工作方式不同,有时Windows显示充电,或不在充电
使用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;
}
我知道这是一个老问题,但另一种方式来获取有关电池的信息而不是使用查询是使用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;
}