在 winbase.h中有这个函数,具体乱七八糟的,反证 BatteryLifePercent 这个变量的值是当前电量的百分比。
typedef struct _SYSTEM_POWER_STATUS_EX2 {
BYTE ACLineStatus;
BYTE BatteryFlag;
BYTE BatteryLifePercent;
BYTE Reserved1;
DWORD BatteryLifeTime;
DWORD BatteryFullLifeTime;
BYTE Reserved2;
BYTE BackupBatteryFlag;
BYTE BackupBatteryLifePercent;
BYTE Reserved3;
DWORD BackupBatteryLifeTime;
DWORD BackupBatteryFullLifeTime;
// Above here is old struct, below are new fields
DWORD BatteryVoltage; // Reports Reading of battery voltage in millivolts (0..65535 mV)
DWORD BatteryCurrent; // Reports Instantaneous current drain (mA). 0..32767 for charge, 0 to -32768 for discharge
DWORD BatteryAverageCurrent; // Reports short term average of device current drain (mA). 0..32767 for charge, 0 to -32768 for discharge
DWORD BatteryAverageInterval; // Reports time constant (mS) of integration used in reporting BatteryAverageCurrent
DWORD BatterymAHourConsumed; // Reports long-term cumulative average DISCHARGE (mAH). Reset by charging or changing the batteries. 0 to 32767 mAH
DWORD BatteryTemperature; // Reports Battery temp in 0.1 degree C (-3276.8 to 3276.7 degrees C)
DWORD 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;
// @CESYSGEN IF COREDLL_BATTERY
BOOL
WINAPI
GetSystemPowerStatusEx(
PSYSTEM_POWER_STATUS_EX pSystemPowerStatusEx,
BOOL fUpdate
);