Bluetooth-Kopfhörer-Batterie-Ladestand in Prozent anzeigen (Win11)



  • Hallo,

    im Internet hab ich das folgende PowerShell-Script gefunden und leicht angepasst, um das Batterie-Level von meinen Kopfhörern in einem kleinen Fenster anzuzeigen:

    function global:BtBattery() {
        $StartTime = Get-Date
        $BTDeviceFriendlyName = "WH204A Hands-Free AG"
        $Shell = New-Object -ComObject "WScript.Shell"
        #$BTHDevices = Get-PnpDevice -FriendlyName "*$($BTDeviceFriendlyName)*"
        $BTHDevices = Get-PnpDevice -FriendlyName "*$($BTDeviceFriendlyName)*" -Class "System" -Status OK
    
        if ($BTHDevices) {
            $BatteryLevels = foreach ($Device in $BTHDevices) {
                $BatteryProperty = Get-PnpDeviceProperty -InstanceId $Device.InstanceId -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2' |
                    Where-Object { $_.Type -ne 'Empty' } |
                    Select-Object -ExpandProperty Data
    
                if ($BatteryProperty) {
                    $BatteryProperty
                    Write-Host $Device
                }
            }
    
            if ($BatteryLevels) {
    		    $ElapsedTime = (Get-Date) - $StartTime
                $ElapsedTimeMilliseconds = [math]::Round($ElapsedTime.TotalMilliseconds, 0)
                $ElapsedTimeStr = "$($ElapsedTimeMilliseconds) ms"
                if ($ElapsedTimeMilliseconds -gt 1000) {
                    $ElapsedTimeSeconds = $ElapsedTime.TotalSeconds
                    $ElapsedTimeStr = "$($ElapsedTimeSeconds) sec"
                }
                $Message = "Battery Level of $($BTDeviceFriendlyName): $($BatteryLevels) %`n`nElapsed Time: $($ElapsedTimeStr)"
                $Button = $Shell.Popup($Message, 0, "Battery Level", 0)
            }
            else {
                Write-Host "No battery level information found for $($BTDeviceFriendlyName) devices."
            }
        }
        else {
            Write-Host "Bluetooth device found."
        }
    }
    
    Export-ModuleMember -function BtBattery
    

    In der Variable $BatteryLevels steht das Level in Prozent (das wird in Zeile 12 zugewiesen, glaube ich).

    Ich will diesen Wert aber nun in einer anderen Anwendung verwenden, um einen Fortschrittsbalken anzuzeigen, der sich jede 15 Minuten aktualisieren soll.

    Wie komme ich an diese Information und welche Programmiersprache soll ich für den Fortschrittsbalken verwenden?

    Ideal wäre ein Batterie-Tray-Icon, welches sich selbstständig aktualisiert.

    Meine Idee wäre, einen Hintergrunddienst zu schreiben, der diesen Wert immer in eine Textdatei schreibt. Wäre das sinnvoll?



  • @NoIDE Guck mal hier: https://learn.microsoft.com/en-us/windows/win32/shell/notification-area

    Nutze die Programmiersprache mit der du am besten zurecht kommst und mit der Windows API interagieren kannst.
    Aus dem Bauch heraus könnte ich mir vorstellen, dass C# dafür gut geeignet sein könnte, ich persönlich würde C++ nehmen, weil ich da einfach fitter bin.



  • Das ist des Pudels Kern, Schlangenmensch! Ich hab noch nie etwas mit c# gemacht. 🙈

    Whrs. wäre das für einen geübten c#-Programmierer eine 5-Minuten-Sache... aber für mich net.



  • @NoIDE dann nehm halt c++. Oder C. Ich glaube, es gibt sogar Java Libraries um mit der winapi kommunizieren zu können. Recherchieren, probieren und bei konkreten Problemen mit deiner Lösung wieder hier melden 😉


Anmelden zum Antworten