如何检查系统上是否存在电池,然后在 C# 中为我的 WPF 应用程序获取电池百分比
How do I check if a battery exists on the system and then get the battery percentage in C# for my WPF application
我想检查系统是否有电池,然后获取电池剩余百分比。我不确定如何检查电池是否存在,但这是我试图获取电池剩余百分比的代码 这不起作用,因为代码仅 returns 0:
public 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;
}
此外,我在 windows 7 上使用 visual studio 2015 是否可能是导致此问题的潜在问题?
我希望您在确实有电池的系统上测试您的代码。在 运行 执行此代码后,我看到我的系统有 1 个电池并且 batteryLevel
变量设置为 Windows 报告的百分比。
根据您的描述,在阅读您的代码后,我假设您有 0 块电池或多块电池,并且 allBatteries
集合中的最后一块电池的电量为 0%,因此return 值。仔细查看您的代码 - 您遍历了 allBatteries
中的所有对象,但只将最后一个对象作为 return 值。
你能做的是
- 将初始
batteryLevel
设置为 -1,以便您知道 allBatteries
上的循环是否为 运行(即 allBatteries
有任何项目)
- return 一个可以为空的电池电量数组 - 如果为空则表示没有安装电池,否则您可以计算平均值以获得实际电池电量
- 更好 - return 电池电量和电池容量的可为 null 的字典,因此稍后您可以计算所有电池电量的加权平均值(对于与上述相同的指示为 null)
我想检查系统是否有电池,然后获取电池剩余百分比。我不确定如何检查电池是否存在,但这是我试图获取电池剩余百分比的代码 这不起作用,因为代码仅 returns 0:
public 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;
}
此外,我在 windows 7 上使用 visual studio 2015 是否可能是导致此问题的潜在问题?
我希望您在确实有电池的系统上测试您的代码。在 运行 执行此代码后,我看到我的系统有 1 个电池并且 batteryLevel
变量设置为 Windows 报告的百分比。
根据您的描述,在阅读您的代码后,我假设您有 0 块电池或多块电池,并且 allBatteries
集合中的最后一块电池的电量为 0%,因此return 值。仔细查看您的代码 - 您遍历了 allBatteries
中的所有对象,但只将最后一个对象作为 return 值。
你能做的是
- 将初始
batteryLevel
设置为 -1,以便您知道allBatteries
上的循环是否为 运行(即allBatteries
有任何项目) - return 一个可以为空的电池电量数组 - 如果为空则表示没有安装电池,否则您可以计算平均值以获得实际电池电量
- 更好 - return 电池电量和电池容量的可为 null 的字典,因此稍后您可以计算所有电池电量的加权平均值(对于与上述相同的指示为 null)