excel - 检索计算机的充电状态和当前电池电量
问题描述
我需要一个VBA程序来检索系统当前的电池充电水平和充电状态。
我很惊讶在 Stack Overflow 上没有找到任何东西,我最终想通了,所以我将在这里分享代码作为 Q+A。
解决方案
Private Declare PtrSafe Function GetSystemPowerStatus Lib "kernel32" (lpSystemPowerStatus As SYSTEM_POWER_STATUS) As LongPtr
Private Type SYSTEM_POWER_STATUS
ACLineStatus As Byte
BatteryFlag As Byte
BatteryLifePercent As Byte
SystemStatusFlag As Byte
BatteryLifeTime As Long
BatteryFullLifeTime As Long
End Type
Public Sub getBatteryStatus() 'batt info to immediate window
Dim SPS As SYSTEM_POWER_STATUS
GetSystemPowerStatus SPS 'get system batt power status
With SPS
Debug.Print "Battery Life: ", ;
Select Case .BatteryLifePercent
Case 255: Debug.Print "Unknown"
Case Else: Debug.Print .BatteryLifePercent & "%"
End Select
Debug.Print "Battery Life Time: ", ;
Select Case .BatteryLifeTime
Case -1: Debug.Print "Charging"
Case Else
Debug.Print Int(.BatteryLifeTime / 60) & "min / ";
Select Case .BatteryFullLifeTime
Case -1
If .BatteryLifePercent = 0 Then
Debug.Print "Unknown"
Else 'estimate FullLifeTime:
Debug.Print "~" & Int(.BatteryLifeTime / .BatteryLifePercent * 5 / 3) & "min"
End If
Case Else
Debug.Print .BatteryFullLifeTime & "sec"
End Select
End Select
Debug.Print "AC power status: ", ;
Select Case .ACLineStatus 'show some information
Case 0: Debug.Print "Offline"
Case 1: Debug.Print "OnLine"
Case Else: Debug.Print "Unknown"
End Select
Debug.Print "Battery charge status: ", ;
Select Case .BatteryFlag
Case 0: Debug.Print "Not Charging (33-66%)"
Case 1: Debug.Print "High (>66%)"
Case 2: Debug.Print "Low (<33%)"
Case 4: Debug.Print "Critical (<5%)"
Case 8: Debug.Print "Charging"
Case 1 + 8: Debug.Print "High (>66%)- Charging"
Case 2 + 8: Debug.Print "Low (<33%) - Charging"
Case 4 + 8: Debug.Print "Critical (<5%) - Charging"
Case 128: Debug.Print "No System Battery"
Case 255: Debug.Print "Unknown Status"
End Select
Debug.Print "Battery saver: ", ;
Select Case .SystemStatusFlag
Case 0: Debug.Print "Off"
Case 1: Debug.Print "On (Save energy where possible)" 'Windows 10 only
End Select
End With
End Sub
更多信息:
- MSDN : GetSystemPowerStatus 函数(Windows)
- MSDN:SYSTEM_POWER_STATUS 结构
- MSDN :电池节电器
推荐阅读
- python - 来自包含空字符的字节数组的 PyByteArray_AsString 的解决方法
- python - 为什么我的 taylor 系列在函数中添加了 x?
- css - 更改活动/单击的背景颜色 react-bootstrap 按钮
- android - 尝试使用外国 RGB 显示器进行编程时从哪里开始?
- visual-studio - VS2019 显示更新通知,但 VSIX 扩展安装程序显示已安装更新
- jquery - 如何使用 AJAX 将 JSON 发送到 Django URL?
- vue.js - 无法让 twitter Oauth 身份验证与 nuxt-auth 一起使用
- javascript - 如何使用 Python Selenium 通过 aria-label 查找并单击 JavaScript 按钮?
- spring-boot - 如何将 RefreshScope 与启用的引导程序一起使用
- javascript - 在 React 中使用 [...Array(stateValue)] 时遇到问题。不确定这是否是正确的方法