昨天一不小心就發現了這個找了很久的一個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;
三、參數說明
Value | Meaning |
---|---|
|
Offline |
|
Online |
|
Unknown status |
BatteryFlag 電池充電狀態。 可以包含一或多個以下值
Value | Meaning |
---|---|
|
高,電量大於66% |
|
低,小於33% |
|
極低,小於5% |
|
充電中 |
|
沒有電池 |
|
未知,無法讀取狀態 |
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;
}