遨游WindowsAPI之电池电量获取

GetSystemPowerStatus函数

要获取电池电量,我们可以通过GetSystemPowerStatus函数完成,其中也包括是否正在为电池充电,当前状态等,如果函数成功,则返回值为非零值。

他的参数很简单,只有一个SYSTEM_POWER_STATUS结构体,返回的数据都包含在此结构体中。

BOOL GetSystemPowerStatus(
  LPSYSTEM_POWER_STATUS lpSystemPowerStatus
);

SYSTEM_POWER_STATUS如下。

typedef struct _SYSTEM_POWER_STATUS {
  BYTE  ACLineStatus;
  BYTE  BatteryFlag;
  BYTE  BatteryLifePercent;
  BYTE  SystemStatusFlag;
  DWORD BatteryLifeTime;
  DWORD BatteryFullLifeTime;
} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;

他的ACLineStatus值为1表示正在充电,0表示未在充电,BatteryLifePercent为剩余电量的百分比,该值可以在0到100的范围内,如果状态未知,则可以是255。

另外BatteryFlag 为电池充电状态。 可以包含一个或多个以下值。

含义
1 电量大于66%
2 低,小于33%
4 极低,小于5%
8 充电中
128 没有电池
255 未知,无法读取状态

上述中如果把电池禁用,BatteryFlag 的返回值就成了128,如果出现9的状态,则表示充电中+电量大于66%(8+1),如果不给电池充电并且电池电量介于高电量和低电量之间,则该值为零。
在这里插入图片描述
遨游WindowsAPI之电池电量获取_第1张图片

示例程序

Private Type SYSTEM_POWER_STATUS
    ACLineStatus As Byte
    BatteryFlag As Byte
    BatteryLifePercent As Byte
    Reserved1 As Byte
    BatteryLifeTime As Long
    BatteryFullLifeTime As Long
End Type
Private Declare Function GetSystemPowerStatus Lib "kernel32.dll" (ByRef lpSystemPowerStatus As SYSTEM_POWER_STATUS) As Long


Private Sub Form_Load()
Dim status As SYSTEM_POWER_STATUS, ret As Long
ret = GetSystemPowerStatus(status)

Dim info As String

info = info & IIf(status.ACLineStatus = 1, "正在充电", "未在充电")
info = info & vbCrLf & "当前电池电量为:" & status.BatteryLifePercent
info = info & vbCrLf & getStatus(status.BatteryFlag)

Label1.Caption = info
End Sub
Private Function getStatus(ByVal status As Byte) As String
Select Case status
    Case 1:
         getStatus = "电量大于66%"
    Case 2:
         getStatus = "低,小于33%"
    Case 8:
         getStatus = "充电中"
    Case 9:
         getStatus = "充电中+电量大于66%"
    Case 128:
         getStatus = "没有电池"
            
End Select

End Function


运行截图
遨游WindowsAPI之电池电量获取_第2张图片

你可能感兴趣的:(遨游WindowsAPI之电池电量获取)