vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: System/Windows · Sonstiges   |   VB-Versionen: VB4, VB5, VB630.03.05
Batteriestatus abfragen

Dieser Tipp zeigt, wie sich der Batteriestatus eines Notebooks abfragen lässt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  20.970 
www.tools4vb.deSystem:  Win9x, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Notebooks werden immer beliebter
Heute möchten wir Ihnen zeigen, wie sich der aktuelle Batteriestatus des Notebooks via VB und Einsatz der GetSystemPowerStatus API-Funktion abfragen lässt.

Folgende Daten können über die API-Funktion ermittelt werden:

  • Ladezustand des Akkus
  • ungefähre Restlaufzeit des Akkus
  • Prüfen, ob externes Netzteil angeschlossen

Erstellen Sie ein neues Projekt und fügen nachfolgende Deklarationen in den Allgemein-Teil der Form ein:

Option Explicit
 
' Benötigte API-Deklarationen
Private Declare Function GetSystemPowerStatus Lib "kernel32" _
  Alias "GetSystemPowerStatus" ( _
  lpSystemPowerStatus As SYSTEM_POWER_STATUS) As Long
 
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 Enum PowerStatus
  ACPower = 0         ' externes Netzteil vorhanden?
  BatteryFlag = 1     ' Batteriezustand
  BatteryPercent = 2  ' Restlaufzeit in Prozent
  BatteryTime = 3     ' Restlaufzeit in Sekunden
  BatteryFullTime = 4 ' Akku-Gesamtlaufzeit
End Enum
' Akku-Status abfragen
Private Function GetPowerState(eState As PowerStatus) As String
  Dim oState As SYSTEM_POWER_STATUS
 
  If GetSystemPowerStatus(oState) <> 0 Then
    With oState
      Select Case eState
        Case ACPower
          ' ext. Netzteil vorhanden?
          If .ACLineStatus = 0 Then
            GetPowerState = "kein Netzteil"
          ElseIf .ACLineStatus = 1 Then
            GetPowerState = "Netzteil vorhanden"
          Else
            GetPowerState = "unbekannt"
          End If
 
        Case BatteryFlag
          ' Batteriezustand
          Select Case .BatteryFlag
            Case 1
              GetPowerState = "Voll"
            Case 2
              GetPowerState = "Niedrig"
            Case 4
              GetPowerState = "Kritisch"
            Case 8
              GetPowerState = "Lädt"
            Case 128
              GetPowerState = "Keine Batterien"
            Case Else
              GetPowerState = "unbekannt"
          End Select
 
        Case BatteryPercent
          ' Restlaufzeit in Prozent
          If .BatteryLifePercent = 255 Then
            GetPowerState = "unbekannt"
          Else
            GetPowerState = CStr(.BatteryLifePercent) & " %"
          End If
 
        Case BatteryTime
          ' Restlaufzeit in Stunden
          If .BatteryLifeTime = -1 Then
            GetPowerState = "unbekannt"
          Else
            GetPowerState = FormatTime(.BatteryLifeTime) & " Std."
          End If
 
        Case BatteryFullTime
          ' Akku-Gesamtlaufzeit
          If .BatteryFullLifeTime = -1 Then
            If .BatteryLifePercent > 0 And .BatteryLifeTime > 0 Then
              GetPowerState = FormatTime(.BatteryLifeTime / .BatteryLifePercent * 100) & " Std."
            Else
              GetPowerState = "unbekannt"
            End If
          Else
            GetPowerState = FormatTime(.BatteryFullLifeTime) & " Std."
          End If
 
      End Select
    End With
  End If
End Function
' Zeit formatieren
Private Function FormatTime(ByVal nSek As Long) As String
  Dim nStd As Long
  Dim nMin As Long
 
  nStd = Int(nSek / 3600)
  nSek = nSek - (nStd * 3600)
  nMin = Int(nSek / 60)
 
  FormatTime = CStr(nStd) & ":" & Format$(nMin, "00")
End Function

Platzieren Sie jetzt auf die Form 5 Label-Controls (Label1 bis Label5), sowie einen CommandButton (Command1). Beim Klick auf den CommandButton soll der aktuelle Batterie-Status in den jeweiligen Label-Controls angezeigt werden.

Private Sub Command1_Click()
  Label1.Caption = "Netzteil: " & GetPowerState(ACPower)
  Label2.Caption = "Batteriezustand: " & GetPowerState(BatteryFlag)
  Label3.Caption = "Restzeit in Prozent: " & GetPowerState(BatteryPercent)
  Label4.Caption = "Restzeit in Std: " & GetPowerState(BatteryTime)
  Label5.Caption = "Akkut-Gesamtlaufzeit: " & GetPowerState(BatteryFullTime)
End Sub