windows关于电源的API函数—GetSystemPowerStatus

  • 2017-01-08
  • 607
  • 0
  • 0

[-]

  1. 一简介
  2. 二原型
  3. 三参数说明

昨天一不小心就发现了这个找了很久的一个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;
}

  1. 2018:  Sleepless-病栋:504号房(0)
  2. 2018:  Nosleep-如果你找到一本书叫"拉利帕利的故事",千万别打开!(0)
  3. 2018:  邪恶的原料/第四章:猎物与猎人在跳舞(0)
  4. 2018:  恐怖经验:消失的少女(3)
  5. 2018:  恐怖故事:禁止进入(0)

评论

偷偷告诉你,这还毛都没有 T T

发表评论