一個找了很久的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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章