C# 获取笔记本电池信息 调用 Win32 Api
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相关推荐
- php调用win32 api,C#_c#使用win32api实现获取光标位置,方法一:需要调用win32api,winfo - phpStudy...
c#使用win32api实现获取光标位置 方法一:需要调用win32api,winform.wpf通用 [DllImport("user32.dll")] public stati ...
- java 调用win32 api 学习总结
java使用JInvoke调用windows API 使用jinvoke调用windowsAPI.jna使用比较麻烦,需要写c代码和参数转换,jinvoke的使用就像jdk中的包一样. 官网使用参考: ...
- C#调用Win32 api学习总结
转载:https://blog.csdn.net/bcbobo21cn/article/details/50930221 从.NET平台调用Win32 API Win32 API可以直接控制Micro ...
- 控制台调用win32 API 示例二则
一 控制台显示消息框 #include <stdio.h> #include <windows.h>int main(int argc, char* argv[]) {int ...
- C++调用win32 API操作打印机实现驱动打印
方法说明: 1.s2w(string &content, int length):将string类型的变量转换为wchar_t*类型,用于调用TextOut()方法时传参,其中length为需 ...
- c#调用win32 API函数修改系统时间
一般来说,系统时间的修改可以通过win32 API函数库中的SetLocalTime函数进行设置.对于C#语言来说,虽然win32 API大部分函数都已经封装在了.NET Framework类库中,但 ...
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)...
转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...
- 微信开放平台获取用户信息接口 https://api.weixin.qq.com/sns/userinfo,中文乱码问题python版
由于微信从这个接口过来的返回值是 ISO-8859-1 编码的,所以只需要把返回的值进行encode就行了 # 获取用户信息 server1 = "https://api.weixin.qq ...
- 图解C# 调用Win32 API 示例程序
一 弹出消息框和发声 先上代码:相关函数不解释:网上比较容易查到: using System; using System.Collections.Generic; using System.Compo ...
最新文章
- logback节点配置详解
- Linux下源码安装软件
- 树莓派光照传感器java_树莓派上使用光照强度检测(BH1750)传感器
- 微信小程序---转发分享功能
- python之Map函数 reduce 函数
- ae多线程渲染工具:BG Renderer MAX for Mac(AE插件)
- #20165323 Java实验四 Android程序设计
- UVA 254 Towers of Hanoi
- 一张图超过了屏幕大小 如何自动将多出部分隐藏 只显示中间部分
- 浅析scipy.signal.find_peaks()
- T100服务端接口开发步骤
- 公司财务记账软件免费版下载地址
- ajax die,check_ajax_referer()
- ## KEIL 5在MDK注册过程中LIC无法添加的问题解决:
- linux下shell脚本启动其他可执行程序
- 简单高效记账本的具体操作方法
- 腾讯云从业者题库整理
- 亲爱的老狼-清除浮动float的5种方法
- 烤仔星选·币圈非著名正指 | DeFi安全篇:合约留后门,无脑授权有风险
- 简单的进制转换器(基于数据结构)