Windows电源管理
+ -

GetSystemPowerStatus获取交流还是电池供电及电池状态信息

2023-07-31 86 1
Windows电源管理相关编程

GetSystemPowerStatus 函数返回系统电源的一个电量状态,这个状态显示系统是否运行在AC(交流电)或者DC(直流电)电流下。电池当前是否在充电或者电量的剩余使用时间。

BOOL GetSystemPowerStatus( 
  LPSYSTEM_POWER_STATUS lpSystemPowerSatus // [out] Pointer to a SYSTEM_POWER_STATUS structure that receives status information. 
);

返回一个SYSTEM_POWER_STATUS的结构体。

  • ACLineStatus 交流电源状态:
    • 0:未接入交流电
    • 1:交电流接入
    • 255:未知
  • BatteryFlag 电池充电状态
    • 1:高,电量大于66%
    • 2:低,小于33%
    • 4:极低,小于5%
    • 8:充电中
    • 128:没有电池
    • 255:未知,无法读取状态
  • BatteryLifePercent 电池还有百分之几能充满.0~100,若未知则为255
  • Reserved1 保留,必须为0
  • BatteryLifeTime 秒为单位的电池剩余电量, 若未知则为-1
  • BatteryFullLifeTime 秒为单位的电池充满电的电量,若未知则为-1
#include <Windows.h>
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    SYSTEM_POWER_STATUS sysPowerStatus;
    GetSystemPowerStatus(&sysPowerStatus);

    cout << "电源状态(ACLineStatus): " << (int)sysPowerStatus.ACLineStatus << endl;
    cout << "电池状态(BatteryFlag): " << (int)sysPowerStatus.BatteryFlag << endl;
    cout << "电量百分比(BatteryLifePercent): " << (int)sysPowerStatus.BatteryLifePercent << " %" << endl;
    cout << "剩余能量(BatteryLifeTime): " << sysPowerStatus.BatteryLifeTime << " 秒" << endl;
    cout << "总能量(BatteryFullLifeTime): " << sysPowerStatus.BatteryFullLifeTime << " 秒" << endl;
    return 0;
}

执行完成后返回:

 电源状态(ACLineStatus): 1
电池状态(BatteryFlag): 1
电量百分比(BatteryLifePercent): 100 %
剩余能量(BatteryLifeTime): 4294967295 秒
总能量(BatteryFullLifeTime): 4294967295 秒

PS:
在某些情况下,需要有关每个电池的详细信息。 为此,每个电池设备都会公开一个 IOCTL 接口。 以下 IOCTL 操作是使用 DeviceIoControl 函数执行的:

DEFINE_GUID(GUID_DEVCLASS_BATTERY, 0x72631e54L, 0x78a4, 0x11d0, 0xbc, 0xf7, 0x00, 0xaa, 0x00, 0xb7, 0xb3, 0x2a);

IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION

参考:https://learn.microsoft.com/zh-cn/windows/win32/power/battery-information
https://learn.microsoft.com/zh-cn/windows/win32/power/enumerating-battery-devices

0 篇笔记 写笔记

GetSystemPowerStatus获取交流还是电池供电及电池状态信息
GetSystemPowerStatus 函数返回系统电源的一个电量状态,这个状态显示系统是否运行在AC(交流电)或者DC(直流电)电流下。电池当前是否在充电或者电量的剩余使用时间。BOOL GetSystemPowerStatus( LPSYSTEM_POWER_STATUS lpSyst......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!