Notebooks werden immer beliebter Folgende Daten können über die API-Funktion ermittelt werden:
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 |