You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:20:34