Получить состояние зарядки компьютера и текущий уровень заряда батареи - PullRequest
0 голосов
/ 12 июня 2018

Мне потребовалась процедура VBA , чтобы получить текущий уровень заряда батареи и состояние зарядки системы .

Я был удивлен, что ничего не нашел в переполнении стека, иВ конце концов я понял это, поэтому я поделюсь кодом здесь как Q + A.

1 Ответ

0 голосов
/ 12 июня 2018
Option Explicit

Private Declare Function GetSystemPowerStatus Lib "kernel32" (lpSystemPowerStatus As SYSTEM_POWER_STATUS) As Long

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()
'prints current battery status to immediate window

    Dim SPS As SYSTEM_POWER_STATUS
    GetSystemPowerStatus SPS 'get system battery 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

Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...