如何获取Windows显示的电池充满剩余时间?含代码及PowerShell方案
获取Windows电池剩余时间(放电/充满)
.NET 代码实现(以C#为例)
放电剩余时间
你可以直接使用System.Windows.Forms.PowerStatus类的BatteryLifeRemaining属性,返回值为秒数,若返回-1表示系统无法估计剩余时间:
using System.Windows.Forms; var powerStatus = SystemInformation.PowerStatus; int dischargeRemainingSeconds = powerStatus.BatteryLifeRemaining; // 转换为分钟 int dischargeRemainingMinutes = dischargeRemainingSeconds / 60;
充满剩余时间(与Windows显示一致)
PowerStatus类没有直接提供该属性,需通过WMI的Win32_Battery类获取ChargingTime属性,该值为分钟数,仅当电池处于充电状态时有效;若返回0xFFFFFFFF(即uint.MaxValue),表示系统无法估计充满剩余时间:
using System.Management; uint chargingRemainingMinutes = 0; using (var searcher = new ManagementObjectSearcher("SELECT ChargingTime FROM Win32_Battery")) { foreach (var battery in searcher.Get()) { chargingRemainingMinutes = (uint)battery["ChargingTime"]; break; // 取第一个电池设备 } } // 处理无法估计的情况 if (chargingRemainingMinutes == uint.MaxValue) { Console.WriteLine("无法估计充满剩余时间"); } else { Console.WriteLine($"充满剩余时间:{chargingRemainingMinutes} 分钟"); }
注意:使用WMI需要引用System.Management程序集,且需确保程序有足够权限读取硬件信息。
PowerShell 实现
放电剩余时间
通过Get-CimInstance获取Win32_Battery的EstimatedRunTime属性,返回值为分钟数,0表示无法估计:
$battery = Get-CimInstance Win32_Battery $dischargeRemainingMinutes = $battery.EstimatedRunTime if ($dischargeRemainingMinutes -eq 0) { Write-Host "无法估计放电剩余时间" } else { Write-Host "放电剩余时间:$dischargeRemainingMinutes 分钟" }
充满剩余时间
同样使用Win32_Battery的ChargingTime属性,返回分钟数,4294967295(即uint.MaxValue)表示无法估计:
$battery = Get-CimInstance Win32_Battery $chargingRemainingMinutes = $battery.ChargingTime if ($chargingRemainingMinutes -eq 4294967295) { Write-Host "无法估计充满剩余时间" } else { Write-Host "充满剩余时间:$chargingRemainingMinutes 分钟" }
补充说明:部分笔记本可能存在多个电池设备,若需遍历所有电池,可去掉代码中的break或循环处理$battery集合。
内容的提问来源于stack exchange,提问作者Boris Tashev
相关产品推荐
相关产品推荐

