C# 获取笔记本电池信息

获取电池信息需要调用Win32 Api

相关函数为 GetSystemPowerStatus

函数结构:

BOOL GetSystemPowerStatus(LPSYSTEM_POWER_STATUS lpSystemPowerStatus
);

参数:

lpSystemPowerStatus:指向接收状态信息的 SYSTEM_POWER_STATUS 结构的指针 。

返回值:

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。

SYSTEM_POWER_STATUS 结构体 的定义:

typedef struct _SYSTEM_POWER_STATUS {BYTE  ACLineStatus;  // 交流电源状态。BYTE  BatteryFlag;  // 电池充电状态BYTE  BatteryLifePercent;  // 剩余电量的百分比BYTE  SystemStatusFlag;  // 省电模式DWORD BatteryLifeTime;  // 剩余电池寿命的秒数DWORD BatteryFullLifeTime;  // 充满电时的电池寿命秒数
} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;

成员:

ACLineStatus

交流电源状态。该成员可以是以下值之一

含义
0 离线
1 线上
255 未知状态

BatteryFlag

电池充电状态。该成员可以包含一个或多个以下标志

含义
1 高-电池电量超过66%
2 低-电池电量不足33%
4 严重—电池电量不足百分之五
8 充电中
128 无系统电池
255 未知状态-无法读取电池标志信息

如果不给电池充电并且电池容量介于高电量和低电量之间,则该值为零。

BatteryLifePercent

剩余电量的百分比。该成员的值可以在0到100的范围内,如果状态未知,则可以是255。

SystemStatusFlag

省电模式。

含义
0 节电模式已关闭
1 节电模式已开启

BatteryLifeTime

剩余电池寿命的秒数;如果未知剩余秒数或设备连接到交流电源,则为–1。

BatteryFullLifeTime

充满电时的电池寿命秒数;如果未知电池的完整寿命或设备连接到交流电源,则为–1。

现在将 SYSTEM_POWER_STATUS 结构体 修改为对应的C#结构体类型:

public enum ACLineStatus_ : byte {Offline = 0,Online = 1,  // UnknowStatus = 255  // 未知
}public enum BatteryFlag_ : byte {  // 虽然是枚举,但可以有多个值Middle = 0,  // 电池未充电并且电池容量介于高电量和低电量之间High = 1,  // 电池电量超过66%Low = 2,  // 电池电量不足33%Critical = 4,  // 电池电量不足百分之五Charging = 8,  //  充电中NoSystemBattery = 128,  // 无系统电池UnknowStatus = 255  // 无法读取电池标志信息
}public enum SystemStatusFlag_ : byte {Off = 0,  //  节电功能已关闭On = 1  //  节电功能已打开,节省电池。尽可能节约能源
}public struct SystemPowerStatus {  // 顺序不可更改public ACLineStatus_ ACLineStatus;  // 交流电源状态public BatteryFlag_ BatteryFlag;  // 电池充电状态public byte BatteryLifePercent;  // 剩余电量的百分比。该成员的值可以在0到100的范围内,如果状态未知,则可以是255public SystemStatusFlag_ SystemStatusFlag;  //  省电模式public int BatteryLifeTime;  //  剩余电池寿命的秒数。如果未知剩余秒数或设备连接到交流电源,则为–1public int BatteryFullLifeTime;  // 充满电时的电池寿命秒数。如果未知电池的完整寿命或设备连接到交流电源,则为–1。
}

示例代码:

using System;
using System.Linq;
using System.Net;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Diagnostics;namespace ConsoleApp1 {public enum ACLineStatus_ : byte {Offline = 0,Online = 1,  // UnknowStatus = 255  // 未知}public enum BatteryFlag_ : byte {  // 虽然是枚举,但可以有多个值Middle = 0,  // 电池未充电并且电池容量介于高电量和低电量之间High = 1,  // 电池电量超过66%Low = 2,  // 电池电量不足33%Critical = 4,  // 电池电量不足百分之五Charging = 8,  //    充电中NoSystemBattery = 128,  // 无系统电池UnknowStatus = 255  // 无法读取电池标志信息}public enum SystemStatusFlag_ : byte {Off = 0,  //  节电功能已关闭On = 1  //  节电功能已打开,节省电池。尽可能节约能源}public struct SystemPowerStatus {  // 顺序不可更改public ACLineStatus_ ACLineStatus;  // 交流电源状态public BatteryFlag_ BatteryFlag;  // 电池充电状态public byte BatteryLifePercent;  // 剩余电量的百分比。该成员的值可以在0到100的范围内,如果状态未知,则可以是255public SystemStatusFlag_ SystemStatusFlag;  //  省电模式public int BatteryLifeTime;  //  剩余电池寿命的秒数。如果未知剩余秒数或设备连接到交流电源,则为–1public int BatteryFullLifeTime;  // 充满电时的电池寿命秒数。如果未知电池的完整寿命或设备连接到交流电源,则为–1。}public class Demo {[DllImport("Kernel32.dll")]public static extern bool GetSystemPowerStatus(ref SystemPowerStatus systemPowerStatus);public static void Main(string[] args) {SystemPowerStatus status = new SystemPowerStatus();if (GetSystemPowerStatus(ref status)) {  // 如果成功调用Console.WriteLine("当前电量:" + status.BatteryLifePercent + "%");}}}
}

相关链接:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getsystempowerstatus


欢迎转载!如转载请附上本文地址

若您在上文发现了错误,请在评论区处反馈,谢谢!

C# 获取笔记本电池信息 调用 Win32 Api相关推荐

  1. php调用win32 api,C#_c#使用win32api实现获取光标位置,方法一:需要调用win32api,winfo - phpStudy...

    c#使用win32api实现获取光标位置 方法一:需要调用win32api,winform.wpf通用 [DllImport("user32.dll")] public stati ...

  2. java 调用win32 api 学习总结

    java使用JInvoke调用windows API 使用jinvoke调用windowsAPI.jna使用比较麻烦,需要写c代码和参数转换,jinvoke的使用就像jdk中的包一样. 官网使用参考: ...

  3. C#调用Win32 api学习总结

    转载:https://blog.csdn.net/bcbobo21cn/article/details/50930221 从.NET平台调用Win32 API Win32 API可以直接控制Micro ...

  4. 控制台调用win32 API 示例二则

    一 控制台显示消息框 #include <stdio.h> #include <windows.h>int main(int argc, char* argv[]) {int ...

  5. C++调用win32 API操作打印机实现驱动打印

    方法说明: 1.s2w(string &content, int length):将string类型的变量转换为wchar_t*类型,用于调用TextOut()方法时传参,其中length为需 ...

  6. c#调用win32 API函数修改系统时间

    一般来说,系统时间的修改可以通过win32 API函数库中的SetLocalTime函数进行设置.对于C#语言来说,虽然win32 API大部分函数都已经封装在了.NET Framework类库中,但 ...

  7. MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)...

    转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...

  8. 微信开放平台获取用户信息接口 https://api.weixin.qq.com/sns/userinfo,中文乱码问题python版

    由于微信从这个接口过来的返回值是 ISO-8859-1 编码的,所以只需要把返回的值进行encode就行了 # 获取用户信息 server1 = "https://api.weixin.qq ...

  9. 图解C# 调用Win32 API 示例程序

    一 弹出消息框和发声 先上代码:相关函数不解释:网上比较容易查到: using System; using System.Collections.Generic; using System.Compo ...

最新文章

  1. logback节点配置详解
  2. Linux下源码安装软件
  3. 树莓派光照传感器java_树莓派上使用光照强度检测(BH1750)传感器
  4. 微信小程序---转发分享功能
  5. python之Map函数 reduce 函数
  6. ae多线程渲染工具:BG Renderer MAX for Mac(AE插件)
  7. #20165323 Java实验四 Android程序设计
  8. UVA 254 Towers of Hanoi
  9. 一张图超过了屏幕大小 如何自动将多出部分隐藏 只显示中间部分
  10. 浅析scipy.signal.find_peaks()
  11. T100服务端接口开发步骤
  12. 公司财务记账软件免费版下载地址
  13. ajax die,check_ajax_referer()
  14. ## KEIL 5在MDK注册过程中LIC无法添加的问题解决:
  15. linux下shell脚本启动其他可执行程序
  16. 简单高效记账本的具体操作方法
  17. 腾讯云从业者题库整理
  18. 亲爱的老狼-清除浮动float的5种方法
  19. 烤仔星选·币圈非著名正指 | DeFi安全篇:合约留后门,无脑授权有风险
  20. 简单的进制转换器(基于数据结构)

热门文章

  1. (附源码)spring boot跨境电商系统 毕业设计 211003
  2. RIPS-0.55 对securing fuction的检查方法
  3. 【经验分享】突然我的SM.MS的图床没法访问了(内附解决方法)
  4. 深度学习( Deep Learning )软件资源列表
  5. BIGEMAP离线数据包网盘下载密码:1111
  6. 柿饼UI在ART-Pi上的移植
  7. 【漫画科普】什么是PAM4
  8. Python数据可视化之随机点图
  9. python开发部署时新增数据库中表的方法
  10. Debezium的基本使用(以MySQL为例)