MFC 获取 WinCE 电量

分类:MFC 标签:MFC, IT, 编程, WinCE

引用头文件
#include <WinBase.h>
对于VS等工程, stdafx.h 中或许已经包含了该文件
PS. 定义的时候或许VS不能自动识别, 但用无妨.
PS. CE SDK要包含该头文件及相应的库


需要用到的函数及结构体
函数 : v()
原型 :
DWORD WINAPI GetSystemPowerStatusEx2(PSYSTEM_POWER_STATUS_EX2 pSystemPowerStatusEx2, DWORD dwLen, BOOL fUpdate);
函数带了三个参数:
pSystemPowerStatusEx2 : 一个指向SYSTEM_POWER_ STATUS_EX2结构的指针,
dwLen : 结构的长度,
fUpdate : 表示告诉操作系统是否应该查询电池驱动来得到最后的信息或者直接返回电池缓存中的信息.
系统大约每5秒查询一次电池状态,因此,如果第三个参数是FALSE,得到的数据不会太旧.

结构 : SYSTEM_POWER_STATUS_EX2
原型 :
typedef struct _SYSTEM_POWER_STATUS_EX2 {
    BYTE ACLineStatus;    
//是否AC电源
    BYTE  BatteryFlag;    
//电池状态
    BYTE  BatteryLifePercent;    
//电量百分比
    BYTE  Reserved1;    
//保留
    BYTE  BatteryLifeTime;    
//剩余电量使用时间
    BYTE  BatteryFullLifeTime;    
//充满所需时间
    BYTE  Reserved2;    
//保留
    BYTE  BackupBatteryFlag;    
//备用电池 电池状态
    BYTE  BackupBatteryLifePercent;    
//备用电池 电量百分比
    BYTE  Reserved3;    
//保留
    BYTE  BackupBatteryLifeTime;    
//备用电池 剩余电量使用时间
    BYTE  BackupBatteryFullLifeTime;    
//备用电池 充满所需时间
    // Above here is old struct, below are new fields
    BYTE  BatteryVoltage;                 
// 电压 Reports Reading of battery voltage in millivolts (0..65535 mV)
    BYTE  BatteryCurrent;                
// 电流 Reports Instantaneous current drain (mA). 0..32767 for charge, 0 to -32768 for discharge
    BYTE  BatteryAverageCurrent;         
// 平均电流 Reports short term average of device current drain (mA). 0..32767 for charge, 0 to -32768 for discharge
    BYTE  BatteryAverageInterval;        
// 平均间隔 Reports time constant (mS) of integration used in reporting BatteryAverageCurrent
    BYTE  BatterymAHourConsumed;         
// 长期累积平均放电(毫安时) Reports long-term cumulative average DISCHARGE (mAH). Reset by charging or changing the batteries. 0 to 32767 mAH
    BYTE  BatteryTemperature;            
// 温度 Reports Battery temp in 0.1 degree C (-3276.8 to 3276.7 degrees C)
    BYTE  BackupBatteryVoltage;            
// 备用电池电压 Reports Reading of backup battery voltage
    BYTE   BatteryChemistry;             
// See Chemistry defines above

    // New fields can be added below, but don't change any existing ones
}   SYSTEM_POWER_STATUS_EX2, *PSYSTEM_POWER_STATUS_EX2, *LPSYSTEM_POWER_STATUS_EX2;


在我描述的这个巨大的结构之前,我必须告诫你,这个结构返回的数据精确程度和电池驱动一样.同样的结构被传给电池驱动来查询它的状态.Windows CE不验证电池驱动返回的数据.这个函数返回来的数据依赖于电池驱动,因此不同的系统有不同的变化.举个例子,许多系统在使用AC电源时不报告精确的电源级数;另一些系统则相反.应用程序使用GetSystemPowerStatusEx2来自动预防和检测系统是否可能运行应用程序.

1.ACLineStatus 包含一个标志,表示系统是否连接到AC 电源.
取值:
AC_LINE_OFFLINE    表示系统没有使用AC 电源;
AC_LINE_ONLINE    表示系统使用了AC 电源;
AC_LINE_BACKUP_POWER 备用电源
AC_LINE_UNKNOWN    未知电源.

2.BatteryFlag 提供了一个总的标识,表示当前系统的电池状态,
取值:
BATTERY_FLAG_HIGH    电池被充满或接近充满.
BATTERY_FLAG_LOW    电池还有一点剩余.
BATTERY_FLAG_CRITICAL    电池电量处在一个临界状态.
BATTERY_FLAG_CHARGING    电池当前正在充电.
BATTERY_FLAG_NO_BATTERY    系统无电池
BATTERY_FLAG_UNKNOWN    电池状态未知

3.BatteryLifePercent 区域包含估计的电池电量能够维持的百分比.数值可能是0~100,若百分比未知,则值为255BATTERY_PERCENTAGE_UNKNOWN.

4.BatteryLifeTime 区域表示电池耗尽之前可以维持的秒数.如果该值不能估计,区域填入BATTERY_LIFE_UNKNOWN.
5.BatteryFullLifeTime 区域包含完全充满电池需要的时间.如果该值不能估计,填入BATTERY_LIFE_UNKNOWN.
注意,在许多系统中,这些值可能难以测量.大多数OEM 厂商简单地在每个区域内填入BATTERY_LIFE_UNKNOWN.

接下来的第四个区域(不计算保留区域)重复了前面的表述,只不过是对系统备份电池来说.因为这些值大多数难以测量,许多系统简单地返回“unknown”给这些区域.
剩下的区域描述了电池和备用电池的电力状态,因为许多系统缺少测量这些值的能力,这些区域也被简单地默认为“unknown”.

6.BatteryChemistry 包含一个标志,表示系统中电池的类型.
取值:
BATTERY_CHEMISTRY_ALKALINE
BATTERY_CHEMISTRY_NICD
BATTERY_CHEMISTRY_NIMH
BATTERY_CHEMISTRY_LION
BATTERY_CHEMISTRY_LIPOLY
BATTERY_CHEMISTRY_UNKNOWN


实例:
SYSTEM_POWER_STATUS_EX2 sps;
DWORD dwLen = GetSystemPowerStatusEx2(&sps, sizeof(sps), TRUE);  

CString csFullLifeTime;
CString csAclinestatus;
CString csBatteryflag;
CString csLiftPresent;
CString csVoltage;
CString csCurrent;
CString csTemperature;
CString csChemistry;  
csAclinestatus.Format(_T("是否AC电源: %d"), sps.ACLineStatus);      
csLiftPresent.Format(_T("电量: %d"), sps.BatteryLifePercent);    
csBatteryflag.Format(_T("电池状态: %d"), sps.BatteryFlag);    
csFullLifeTime.Format(_T("充满所需时间: %d"), sps.BatteryFullLifeTime);  
csVoltage.Format(_T("电池电压: %d"), sps.BatteryVoltage);    
csCurrent.Format(_T("电池电流: %d"), sps.BatteryCurrent);    
csTemperature.Format(_T("电池温度: %d"), sps.BatteryTemperature);    
csChemistry.Format(_T("电池类型: %d"), sps.BatteryChemistry);    

CString csTmp;
csTmp = csFullLifeTime + _T("\r\n") + csAclinestatus + _T("\r\n") + 
	csBatteryflag + _T("\r\n") + csLiftPresent + _T("\r\n") + csVoltage + _T("\r\n") +
	csCurrent + _T("\r\n") + csTemperature + _T("\r\n") + csChemistry;
MessageBox(csTmp);
你可能还会对下列文章感兴趣:

0条评论 你不想来一发么↓

    想说点什么呢?

    您需要登录您的Google账号才能进行评论。