四联光电智能照明论坛

标题: 一个找了很久的API函数---GetSystemPowerStatus [打印本页]

作者: admin    时间: 2017-1-25 14:44
标题: 一个找了很久的API函数---GetSystemPowerStatus
     昨天一不小心就发现了这个找了很久的一个API函数。过去一直想写一个判断笔记本是直流通电还是电池通电来写一个小程序,硬是没找到这个而终止了想法,今天发现了原来WindowsAPI还有这么好一个函数:GetSystemPowerStatus。
一、简介
GetSystemPowerStatus 函数返回系统电源的一个电量状态,这个状态显示系统是否运行在AC(交流电)或者DC(直流电)电流下。电池当前是否在充电或者电量的剩余使用时间。

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

SYSTEM_POWER_STATUS的定义:
typedef struct _SYSTEM_POWER_STATUS {  
    BYTE ACLineStatus;            
    BYTE  BatteryFlag;            
    BYTE  BatteryLifePercent;      
    BYTE  Reserved1;               
    DWORD  BatteryLifeTime;        
    DWORD  BatteryFullLifeTime;   
} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;  

三、参数说明
ACLineStatus  交流电源状态
Value    Meaning
0       Offline
1       Online
255     Unknown status

BatteryFlag  电池充电状态。 可以包含一或多个以下值
Value    Meaning
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 _tmain(int argc, _TCHAR* argv[])  
{  
    SYSTEM_POWER_STATUS sysPowerStatus;  
    GetSystemPowerStatus(&sysPowerStatus);  
  
    cout<<"电源状态: "<<(int)sysPowerStatus.ACLineStatus<<endl;  
    cout<<"电池状态: "<<(int)sysPowerStatus.BatteryFlag<<endl;  
    cout<<"电量百分比: "<<(int)sysPowerStatus.BatteryLifePercent<<" %"<<endl;  
    cout<<"剩余能量: "<<sysPowerStatus.BatteryLifeTime<<" 秒"<<endl;  
    cout<<"总能量: "<<sysPowerStatus.BatteryFullLifeTime<<" 秒"<<endl;  
    return 0;  
}  




欢迎光临 四联光电智能照明论坛 (http://5xhome.com/) Powered by Discuz! X3.2