GetSystemPowerStatus获取交流还是电池供电及电池状态信息
2023-07-31
104
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