如何在.NET 7控制台应用程序中检查笔记本电脑电池状态?
在.NET 7控制台应用中优雅检查Windows电池状态
推荐方案:P/Invoke调用Windows原生API
直接调用Windows系统的GetSystemPowerStatus函数是最简洁可靠的方式,无需额外依赖,且不受.NET 7控制台应用的SDK限制。
完整实现代码
using System; using System.Runtime.InteropServices; class BatteryStatusChecker { [StructLayout(LayoutKind.Sequential)] private struct SYSTEM_POWER_STATUS { public byte ACLineStatus; public byte BatteryFlag; public byte BatteryLifePercent; public byte Reserved1; public int BatteryLifeTime; public int BatteryFullLifeTime; } [DllImport("kernel32.dll")] private static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS lpSystemPowerStatus); public static void RetrieveBatteryStatus() { if (GetSystemPowerStatus(out var powerStatus)) { Console.WriteLine("=== 电池状态信息 ==="); Console.WriteLine($"AC电源连接状态:{(powerStatus.ACLineStatus == 1 ? "已接通" : "未接通")}"); Console.WriteLine($"电池剩余电量:{powerStatus.BatteryLifePercent}%"); var remainingTime = powerStatus.BatteryLifeTime == -1 ? "无法获取" : TimeSpan.FromSeconds(powerStatus.BatteryLifeTime).ToString(@"hh\:mm\:ss"); Console.WriteLine($"电池剩余使用时间:{remainingTime}"); } else { Console.WriteLine("获取电池状态失败,请检查系统权限或硬件支持"); } } static void Main() { RetrieveBatteryStatus(); Console.ReadKey(); } }
代码说明
SYSTEM_POWER_STATUS结构体:映射Windows系统原生的电源状态数据结构,包含AC电源状态、电池电量、剩余时间等核心字段GetSystemPowerStatus:从kernel32.dll导入的系统函数,直接读取系统电源状态,性能可靠- 异常处理:针对无法获取剩余时间的情况(返回值为-1)做了友好提示
对比其他方案的优势
- 替代WinForms的
PowerStatus:.NET 7控制台应用属于通用SDK,无法引用Windows Desktop组件,P/Invoke方法不受此限制 - 优于系统信息提取:原生API比解析WMI查询、命令行输出等方式更高效,且无需处理格式解析的额外逻辑
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

