使用C#或.NET查找电池充电容量百分比
我有一个应用程序可以获取详细的系统信息,我已经能够获得剩余的电量百分比,但不能获得电池本身的百分比。
说明:随着时间的推移,电池变得越来越糟,一些应用程序,如笔记本电脑上的戴尔支持中心,显示电池的状态,而不是充电状态,曾经是100%,但现在是90 %。
如何在C#或.NET中获得此值?
没有笔记本电脑可以测试,但我猜你可以使用WMI类Win32_Battery 。
它有两个看起来很有趣的领域DesignCapacity
,它告诉你
电池的设计容量,以毫瓦时为单位。
和FullChargeCapacity
,它具有迷人的音符
电池的完全充电容量,以毫瓦时为单位。 将值与DesignCapacity属性进行比较可确定何时需要更换电池。
所以我的猜测是你可以使用WMI读取这两个值,然后计算FullChargeCapacity/DesignCapacity
来查找电池健康百分比数。
编辑
这是使用C#访问WMI信息的简短示例。 我首先添加了对System.Management
程序集的引用。 然后:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Management; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { System.Management.ObjectQuery query = new ObjectQuery("Select * FROM Win32_Battery"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); ManagementObjectCollection collection = searcher.Get(); foreach (ManagementObject mo in collection) { foreach (PropertyData property in mo.Properties) { Console.WriteLine("Property {0}: Value is {1}", property.Name, property.Value); } } } } }
另外,请注意您基本上是针对WMI运行类似SQL的查询,因此您可以根据需要改变它。 Windows Management Instrumentation Query Language
(或WQL
)是您要搜索的内容,以了解有关它的更多信息。
另外,看看ahawker的答案,如果WMI没有正确捕获电池数据,它可能会更有帮助,正如他所指出的那样。
您似乎正在寻找FullChargeCapacity
, DesignCapacity
和CurrentCapacity
的值。 作为以前解决过这个问题的人,请允许我发表一些意见。
通常采用的第一条路径是通过WMI查询( Win32_Battery
)。 然而,在测试笔记本电脑上我运行WMI查询( Win32_Battery
),其中包括多个制造商,我一直遇到FullChargeCapacity
总是返回零的问题。 由于这不起作用,我使用Win32 API重新编写了我的解决方案,并成功地以这种方式获得了准确的值。
希望WMI能为您服务。 但是,如果您遇到与我相同的问题,以下是Win32API所需步骤的摘要。
另请参阅MSDN上的Enumerating Battery Devicespost,因为我发现它非常有帮助。
我可以在必要时发布我的解决方案,但是使用所有本机struct
定义,它最终会产生大约500行代码。
示例源代码: https : //gist.github.com/ahawker/9715872
不需要不必要的复杂事情。 尝试以下方法:
using System.Management; String batterystatus; PowerStatus pwr = SystemInformation.PowerStatus; batterystatus = SystemInformation.PowerStatus.BatteryChargeStatus.ToString(); MessageBox.Show("battery charge status : " + batterystatus); String batterylife; batterylife = SystemInformation.PowerStatus.BatteryLifePercent.ToString(); MessageBox.Show(batterylife);
通过这种方式,您可以获得所有电池信息。
您可以使用System.Windows.Forms.PowerStatus类 – https://msdn.microsoft.com/en-us/library/system.windows.forms.powerstatus.aspx
PowerStatus p = SystemInformation.PowerStatus; int a = (int)(p.BatteryLifePercent * 100); MessageBox.Show(""+a);
WMI为我工作(在3个不同品牌的笔记本上测试过),但我不得不使用这样的东西:
new ManagementObjectSearcher(@"\localhostrootwmi", "Select FullChargedCapacity From BatteryFullChargedCapacity"); // use value of resultingInstance.Properties["FullChargedCapacity"] new ManagementObjectSearcher(@"\localhostrootwmi", "Select DesignedCapacity From BatteryStaticData"); //use value of resultingInstance2.Properties["DesignedCapacity"]
用C#获取电池电量的简单代码
protected void batteryLevel () { var filter = new IntentFilter(Intent.ActionBatteryChanged); var battery = RegisterReceiver(null, filter); int level = battery.GetIntExtra(BatteryManager.ExtraLevel, -1); int scale = battery.GetIntExtra(BatteryManager.ExtraScale, -1); double level_0_to_100 = Math.Floor (level * 100D / scale); }
BatteryChargeStatus.Text = SystemInformation.PowerStatus.BatteryChargeStatus.ToString(); BatteryFullLifetime.Text = SystemInformation.PowerStatus.BatteryFullLifetime.ToString(); BatteryLifePercent.Text = SystemInformation.PowerStatus.BatteryLifePercent.ToString(); BatteryLifeRemaining.Text = SystemInformation.PowerStatus.BatteryLifeRemaining.ToString(); PowerLineStatus.Text = SystemInformation.PowerStatus.PowerLineStatus.ToString();
如果要执行某些操作,只需将这些字符串值转换为整数。
上述就是C#学习教程:使用C#或.NET查找电池充电容量百分比分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006719.html