Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.477 Beiträge
 
Delphi 7 Professional
 
#8

AW: Akkumanagement (Notifications)

  Alt 6. Feb 2024, 15:46
Mal wieder mein "Lieblingchatbot"
Zitat von Frage:
Gibt es unter Windows eine Message oder einen Broadcast, der meldet, wenn sich der Ladezustand des Akkus verändert?
Zitat von Antwort:
Ja, Windows kann Änderungen des Akkuzustands erkennen und darauf reagieren. Die spezifischen Mechanismen hängen von der Hardwaretopologie des Systems ab¹.

In Systemen, die einen eingebetteten Controller verwenden, führt Windows Abfragen durch und wird über die eingebettete ACPI-Controllerschnittstelle über das Energiesubsystem informiert¹. In Systemen, die einen Akkuladecontroller und eine Ladestandkomponente verwenden, die über einen einfachen Peripheriebus wie I²C direkt mit dem Kernprozessor der Plattform verbunden sind, führt Windows über den I²C-Bus Abfragen durch und wird darüber über Änderungen des Energiesubsystems informiert¹.

Darüber hinaus zeigt Windows 10 eine Benachrichtigung an, wenn der Akkustand niedrig oder kritisch ist². Diese Benachrichtigungen können in den Energieoptionen angepasst werden².

Bitte beachten Sie, dass die genauen Mechanismen und APIs, die verwendet werden, um auf Änderungen des Akkuzustands zu reagieren, von der spezifischen Windows-Version und der Hardwarekonfiguration abhängen können. Für detailliertere Informationen empfehle ich, die offizielle Dokumentation von Microsoft zu konsultieren¹.

Quelle: Unterhaltung mit Bing, 5.2.2024
(1) Hardwaredesign für Akku- und Energiesubsystem | Microsoft Learn. https://learn.microsoft.com/de-de/wi...ardware-design.
(2) Windows 10 Benachrichtigungen über schwachen Akkustand ändern - Gelöst. https://www.spickipedia.com/index.ph...n-geloest.html.
(3) Pflege des Akkus in Windows - Microsoft-Support. https://support.microsoft.com/de-de/...6-ed15320519e4.
Zitat von Frage:
Wie kann ich unter Delphi darauf reagieren, mir z. B. den aktuellen Akkuzustand anzeigen lassen?
Zitat von Antwort:
Ja, Sie können den aktuellen Akkuzustand in Delphi anzeigen lassen. Sie können die Windows-API-Funktion 'GetSystemPowerStatus' verwenden, um Informationen über den aktuellen Power-Status des Systems zu erhalten¹. Hier ist ein Beispiel, wie Sie es tun können:
Delphi-Quellcode:
procedure GetStatus;
var
  SystemPowerStatus: TSystemPowerStatus;
begin
  GetSystemPowerStatus(SystemPowerStatus);
  with SystemPowerStatus do begin
    // Wird das System mit Wechselstrom oder Akku betrieben ?
    case ACLineStatus of
      0: Label1.Caption := 'System wird mit Akku betrieben';
      1: Label1.Caption := 'System wird mit Wechselstrom betrieben';
      else Label1.Caption := 'Unbekannter Status';
    end;

    // Ladezustand der Batterie
    case BatteryFlag of
      1 : Label2.Caption := 'Hoher Ladezustand';
      2 : Label2.Caption := 'Niedriger Ladezustand';
      4 : Label2.Caption := 'Kritischer Ladezustand';
      8 : Label2.Caption := 'Die Batterie wird geladen';
      128: Label2.Caption := 'Es existiert keine System-Batterie';
      255: Label2.Caption := 'Unbekannter Status';
    end;

    // Ladezustand in Prozent
    if BatteryLifePercent <> 255 then
      Label3.Caption := IntToStr(BatteryLifePercent) + ' %'
    else
      Label3.Caption := 'Unbekannter Status';
  end;
end;
Zitat von Antwort (Fortsetzung):
In diesem Code wird der 'GetSystemPowerStatus'-Funktion ein 'TSystemPowerStatus'-Strukturparameter übergeben. Die Funktion füllt diese Struktur mit Informationen über den AC-Leitungszustand, den Batteriezustand und den Batterielebensprozentsatz¹. Bitte beachten Sie, dass Sie die 'Label1', 'Label2' und 'Label3' durch Ihre eigenen Label-Komponenten ersetzen müssen¹.

Quelle: Unterhaltung mit Bing, 5.2.2024
(1) Power-Status des Computers ermitteln - Delphi-Treff. https://www.delphi-treff.de/tipps-tr...ers-ermitteln/.
(2) Delphi-PRAXiS - Suche Unterstützung für Akku Status Anzeige. https://www.delphipraxis.net/printthread.php?t=214506.
(3) Suche Unterstützung für Akku Status Anzeige - Delphi-PRAXiS. https://www.delphipraxis.net/214506-...s-anzeige.html.
Zitat von Frage:
Für die einzelnen Windowsmessages sind in der API Konstanten deklariert. Gewöhnlich sind es nummerische Werte, für die es Konstanten gibt, deren Namen meist mit "WM_" beginnen. Gibt es etwas ähnliches auch für die Message, mit der über den Ladezustand informiert wird? Wie heißt diese Konstante oder wie ist ihr nummerischer Wert?
Zitat von Antwort:
Ja, es gibt eine Windows-Message, die über Änderungen im System-Stromstatus informiert. Sie heißt 'WM_POWERBROADCAST'. Diese Message wird an eine Anwendung gesendet, wenn sich der Stromzustand des Systems ändert, z. B. wenn sich der Akkuzustand ändert¹.

Die 'WM_POWERBROADCAST'-Message hat mehrere Parameter, die verschiedene Arten von Stromereignissen darstellen. Insbesondere repräsentiert der 'PBT_APMPOWERSTATUSCHANGE'-Parameter eine Änderung im Akkustatus¹.

Hier ist ein Beispiel, wie Sie auf diese Message in Delphi reagieren können:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    procedure WMPowerBroadcast(var Msg: TMessage); message WM_POWERBROADCAST;
  end;

...

procedure TForm1.WMPowerBroadcast(var Msg: TMessage);
begin
  if Msg.WParam = PBT_APMPOWERSTATUSCHANGE then
  begin
    // Der Akkustatus hat sich geändert
    // Führen Sie hier den Code aus, der auf diese Änderung reagieren soll
  end;
end;
Zitat von Antwort (Fortsetzung):
In diesem Code wird die 'WMPowerBroadcast'-Methode aufgerufen.

Quelle: Unterhaltung mit Bing, 5.2.2024
(1) Firmware-Implementierung für das ACPI-Akku- und Energiesubsystems. https://learn.microsoft.com/de-de/wi...implementation.
Kannste damit was anfangen?
  Mit Zitat antworten Zitat