AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hat's einen Akku?

Ein Thema von Mattze · begonnen am 8. Sep 2018 · letzter Beitrag vom 13. Sep 2018
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Hat's einen Akku?

  Alt 8. Sep 2018, 18:35
Hallo,

wahrscheinlich habe ich es ja nur übersehen, aber ich finde es einfach nicht!

Wie kann man möglichst einfach und kurz (!!!) per Delphi 7 rauskriegen, ob das Gerät vor einem einen Akku hat oder nicht?
Ich meine das ganz allgemein!!!
Bsp.:
1.Wenn der Notebook-Akku draussen ist und das Gerät per Wechselstrom arbeitet, soll auch angezeigt werden, dass kein Akku da ist.
2. Hängt der Laptop am der Strom und ist ein Akku drin, soll auch angezeigt werden, dass der einen Akku hat.
Usw.

(Man kann die Anzahl der vorhandenen Batterien testen - PSP_DEVICE_INTERFACE_DETAIL_DATA. Das ist aber ein ziemlicher Aufwand. Geht das nicht auch kürzer?)

Gruß
Mattze
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#2

AW: Hat's einen Akku?

  Alt 8. Sep 2018, 18:42
Hallo,

Habe kurz gegoogelt, vielleicht hilft das da:

https://stackoverflow.com/questions/...g-on-batteries
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#3

AW: Hat's einen Akku?

  Alt 8. Sep 2018, 19:27
Hi!

Schau Dir mal tJvComputerInfoEx aus den Jedis an.
Diese hat unter APM diverse Batterie-Eigenschaften, neben Infos zum Ladestatus auch "BatteryFlag"
Vielleicht kannst Du damit etwas anfangen.

Gruß
Guido R.

Geändert von Guido R. ( 8. Sep 2018 um 19:30 Uhr)
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
126 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hat's einen Akku?

  Alt 8. Sep 2018, 21:23
Ich würde es mit SMBios probieren konkret mit folgendem Beispiel:

https://github.com/RRUZ/tsmbios/tree...%20Information

Viel Erfolg
Björn Reimer
  Mit Zitat antworten Zitat
OLDIE1950

Registriert seit: 2. Jan 2018
22 Beiträge
 
#5

AW: Hat's einen Akku?

  Alt 10. Sep 2018, 23:38
Code:
// WinApi command to get the status of the battery.
  if GetSystemPowerStatus(pSysPowerStatus) then
  begin
    // get the line status
    case pSysPowerStatus.ACLineStatus of
      0   : s:='Offline';
      1   : s:='Online';
      255 : s:='Unknown status.';
    end;
    label1.caption:='AC power status: '+s;
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#6

AW: Hat's einen Akku?

  Alt 13. Sep 2018, 08:05
Hallo,

vielen Dank Euch allen.
Das BatteryFlag gibt es tatsächlich her. Ich hatte das nur übersehen!
Das kann nämlich noch einen Wert annehmen, den man aber nur selten sieht. Meistens nimmt man nur 1, 2, 4, 8 und 255. Es gibt aber noch 128 und mit diesem Wert wird genau das getan, was ich wollte. Wenn das so gesetzt ist, gibt es keine Batterie. Übrigens: Man denkt es, aber "SysPowerStatus.ACLineStatus" macht es offenbar nicht (bei Win10 jedenfalls).

Gruß
Mattze

Geändert von Mattze (13. Sep 2018 um 08:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Hat's einen Akku?

  Alt 13. Sep 2018, 14:52
Man denkt es, aber "SysPowerStatus.ACLineStatus" macht es offenbar nicht (bei Win10 jedenfalls).
Das ist ja auch der falsche für deinen Zweck. ACLineStatus gibt an, ob es grad am Netzteil hängt, was AUCH der Fall sein kann wenn es einen Akku hat und IMMER der Fall ist, wenn es keinen hat. Richtig wäre SysPowerStatus.BatteryFlag. Guckst du hier.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#8

AW: Hat's einen Akku?

  Alt 13. Sep 2018, 15:08
Hallo,

habe ich doch geschrieben!
Trotzdem danke!

Gruß
Mattze
  Mit Zitat antworten Zitat
OLDIE1950

Registriert seit: 2. Jan 2018
22 Beiträge
 
#9

AW: Hat's einen Akku?

  Alt 13. Sep 2018, 17:26
Das folgende Progrämmchen zeigt den Status in der Titelzeile an:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

const
 GUID_ACDC_POWER_SOURCE: TGUID =
 '{5D3E9A59-E9D5-4B00-A6BD-FF34FF516548}';
 PBT_POWERSETTINGCHANGE = 32787;

type
  PPowerbroadcastSetting = ^TPowerbroadcastSetting;
  POWERBROADCAST_SETTING = packed record
    PowerSetting: TGUID;
    DataLength: DWord;
    Data: array[0..0] of Char;
  end;
  {$EXTERNALSYM POWERBROADCAST_SETTING}
  TPowerbroadcastSetting = POWERBROADCAST_SETTING;

type
  TForm1 = class(TForm)
    procedure PowerMessage(var msg: TMessage); message
    WM_POWERBROADCAST;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

function RegisterPowerSettingNotification(hRecipient: THandle;
         PowerSettingGuid: PGUID; Flags: DWORD): THandle; stdcall;
external 'user32.dll';
function UnregisterPowerSettingNotification(Handle: THandle): BOOL; stdcall;
external 'user32.dll';

var
  Form1: TForm1;
  psn: THandle;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  psn := RegisterPowerSettingNotification(Form1.Handle,
  @GUID_ACDC_POWER_SOURCE , 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   UnregisterPowerSettingNotification(psn);
end;

procedure TForm1.PowerMessage(var msg: TMessage);
var pb_setting: TPowerbroadcastSetting;
    buf: DWord;
begin
  if msg.WParam = PBT_POWERSETTINGCHANGE then
  begin
    pb_setting := PPowerbroadcastSetting(msg.LParam)^;
    if GUIDToString(pb_setting.PowerSetting) = GUIDToString(GUID_ACDC_POWER_SOURCE) then
    begin
      buf := 0;
      move(pb_setting.Data, buf, SizeOf(DWord));
      case buf of
        0: Caption:= 'Netzbetrieb';
        1: Caption:= 'Akkubetrieb';
        2: Caption:= 'USV-Betrieb';
      end;
    end;

  end;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.051 Beiträge
 
Delphi 12 Athens
 
#10

AW: Hat's einen Akku?

  Alt 13. Sep 2018, 19:31
Weil jemand das mit den "Werten" falsch versteht?

Es sind keine Werte, sondern Bits und Bit-Masken.

Bit 7 = keine Batterie
außer bei Bits 0-7 alle gesetzt = ungekannt

Bits 3 und 4 (also Wert 12) = Critical + Charging
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Sep 2018 um 19:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz