我正试着获得充电百分比,和Windows显示的完全相同的文本--不充电,完全充电,充电
我在使用wmi查询。
我不想硬编码那些短信,因为每次都会有不同的效果。有时它显示95 %-没有充电,或可以充电。
有什么方法可以得到结果短信吗?
我能做的,只是检查它是否100 %充电,显示完全充电。
但是对于96 %的用户来说,它的工作方式是不同的,有时是Windows显示器充电,有时是不充电
发布于 2011-11-21 10:03:58
使用电池类:
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;
}发布于 2015-08-27 14:37:04
我知道这是一个老问题,但另一种获取电池信息而不是使用查询的方法是使用ManagementClass。这是一些获得电池状态的代码(FullyCharged,放电等)和一些代码,以得到估计的剩余电池百分比。
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;
}https://stackoverflow.com/questions/8209522
复制相似问题