Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Power-Status des Computers ermitteln? (https://www.delphipraxis.net/21563-power-status-des-computers-ermitteln.html)

joe666sa 4. Mai 2004 21:29


Power-Status des Computers ermitteln?
 
Hab diese Lösung zur realisierung gefunden.

Code:
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;
Nur beim Compeilieren des codes bekomme ich immer folgende fehlermeldungen.

[Error] Unit1.pas(34): Undeclared identifier: 'Label1'
[Error] Unit1.pas(35): Missing operator or semicolon
[Error] Unit1.pas(36): Missing operator or semicolon
[Error] Unit1.pas(41): Undeclared identifier: 'Label2'
[Error] Unit1.pas(42): Missing operator or semicolon
[Error] Unit1.pas(43): Missing operator or semicolon
[Error] Unit1.pas(44): Missing operator or semicolon
[Error] Unit1.pas(45): Missing operator or semicolon
[Error] Unit1.pas(46): Missing operator or semicolon
[Error] Unit1.pas(51): Undeclared identifier: 'Label3'
[Error] Unit1.pas(53): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'


Esetze ich die label mit showmessage dann gehts.

Und hat irgend wer noch mehr infos was ich da alles auslesen kann.

Mfg joe666sa

fkerber 4. Mai 2004 21:31

Re: Power-Status des Computers ermitteln?
 
Hi!

Hast du auch 3 Labels auf deine Form gezogen?


Ciao fkerber

Christian Seehase 4. Mai 2004 21:33

Re: Power-Status des Computers ermitteln?
 
Moin Joe,

schau Dir doch einfach im PSDK oder auf MSDN mal die Dokumentation zu MSDN-Library durchsuchenSYSTEM_POWER_STATUS an.

fkerber 4. Mai 2004 21:35

Re: Power-Status des Computers ermitteln?
 
Hi!

@Christian:
Die Funktion ist Ok, er muss nur 3 Labels aufs Form ziehen, dann geht es fehlerfrei.


Ciao fkerber

Matze 4. Mai 2004 21:35

Re: Power-Status des Computers ermitteln?
 
Binde diese procedur unter private ein, oder schreibe einfach immer

Delphi-Quellcode:
Form1.Label1.Caption := ...
Aber ich kann dir auch die komplette Unit zeigen, falls du das möchtest. ;)

Matze 4. Mai 2004 21:36

Re: Power-Status des Computers ermitteln?
 
Ach, hier haste es:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure GetStatus;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.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;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetStatus;
end;

Christian Seehase 4. Mai 2004 21:41

Re: Power-Status des Computers ermitteln?
 
Moin fkerber,

die von der Funktion genutzte Struktur hat aber noch mehr Felder, und die eigentliche Frage lautete ja

Zitat:

Zitat von joe666sa
Und hat irgend wer noch mehr infos was ich da alles auslesen kann.

;-)

fkerber 4. Mai 2004 21:43

Re: Power-Status des Computers ermitteln?
 
Hi!

Oh, sorry, muss ich überlesen haben :oops:

Hatte nur die Fehler im Auge.


Ciao fkerber

Matze 4. Mai 2004 21:44

Re: Power-Status des Computers ermitteln?
 
Ich auch :oops: Gute Nacht! :lol:

NicoDE 5. Mai 2004 01:46

Re: Power-Status des Computers ermitteln?
 
Zitat:

Zitat von joe666sa
Code:
    // 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;

Einige Flags können auch gleichzeitig vorkommen (zum Beipiel 'Ladezustand' und 'wird geladen')
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SystemPowerStatus: TSystemPowerStatus;
  Text: string;
begin
  if GetSystemPowerStatus(SystemPowerStatus) then
    with SystemPowerStatus do
    begin
      // Wird das System mit Wechselstrom oder Akku betrieben ?
      case ACLineStatus of
        0: Text := 'System wird mit Akku betrieben';
        1: Text := 'System wird mit Wechselstrom betrieben';
      else
        Text := 'Unbekannter Status';
      end;
      Label1.Caption := Text;

      // Ladezustand der Batterie
      if (BatteryFlag = 255) then
        Text := 'Unbekannter Status'
      else if (BatteryFlag and 128 = 128) then
        Text := 'Es existiert keine System-Batterie'
      else
      begin
        case (BatteryFlag and (1 or 2 or 4)) of
          1: Text := 'Hoher Ladezustand';
          2: Text := 'Niedriger Ladezustand';
          4: Text := 'Kritischer Ladezustand';
        else
          Text := 'Unbekannter Ladezustand';
        end;
        if (BatteryFlag and 8 = 8) then
          Text := Text + ' (Die Batterie wird geladen)';
      end;
      Label2.Caption := Text;

      // Ladezustand in Prozent
      if (BatteryLifePercent <> 255) then
        Text := IntToStr(BatteryLifePercent) + ' %'
      else
        Text := 'Unbekannter Status';
      Label3.Caption := Text;
  end;
end;

joe666sa 5. Mai 2004 04:45

Re: Power-Status des Computers ermitteln?
 
@NicoDE

Das fünktioniert aber hald aber leider muss ich die stellen Laberlx.caption := Text weglassen.

Aber die frage ist hald warum.

alcaeus 5. Mai 2004 04:48

Re: Power-Status des Computers ermitteln?
 
Ich weiß nicht, du könntest Variablenparameter vom Typ String verlangen und die Ergebnisse dort hineinschreiben, du könntest auch ein Form angeben lassen das Labels enthält, oder du machst es so wie Matze gesagt hat:
Zitat:

Zitat von Matze
Binde diese procedur unter private ein, oder schreibe einfach immer

Delphi-Quellcode:
Form1.Label1.Caption := ...
Aber ich kann dir auch die komplette Unit zeigen, falls du das möchtest. ;)

Delphi-Quellcode:
 private
    { Private-Deklarationen }
    procedure GetStatus;
  public
...
procedure TForm1.GetStatus;
var SystemPowerStatus: TSystemPowerStatus;
begin
...


NicoDE 5. Mai 2004 04:50

Re: Power-Status des Computers ermitteln?
 
Zitat:

Zitat von joe666sa
Aber die frage ist hald warum.

Weil Du keine Label auf Deiner Form gelegt hast, bzw. sie nicht Label1, Label2 und Label3 heißen.

Nicodius 5. Mai 2004 05:54

Re: Power-Status des Computers ermitteln?
 
lad dir dochmal auf der DELPHISOURCE SEITE die Sourcedatei runetr da stehen alle solche fragen drinnen

Luckie 8. Mai 2004 01:19

Re: Power-Status des Computers ermitteln?
 
So und hier das ganze aufbereitet für die Code-Lib:
Delphi-Quellcode:
function GetPowerStatus(var HasBattery: Boolean; var LoadStatusString: String;
  var LoadstatusPercent: Integer): DWORD;
var
  SystemPowerStatus: TSystemPowerStatus;
  Text: string;
resourcestring
  rsLoadStatusUnknown = 'Unbekannter Status';
  rsLoadStatusNoBattery = 'Es existiert keine Batterie';
  rsLoadStatusHigh = 'Hoher Ladezustand';
  rsLoadStatusLow = 'Niedriger Ladezustand';
  rsLoadStatusCritical = 'Kritischer Ladezustand';
  rsLoadStatusLoading = 'Batterie wird geladen';
  rsLoadSatusUnknownLoading = 'Unbekannter Ladezustand';
begin
  SetLastError(0);
  if GetSystemPowerStatus(SystemPowerStatus) then
    with SystemPowerStatus do
    begin
      HasBattery := ACLineStatus = 0;

      // Ladezustand der Batterie
      if (BatteryFlag = 255) then
        Text := rsLoadStatusUnknown
      else if (BatteryFlag and 128 = 128) then
        Text := rsLoadStatusNoBattery
      else
      begin
        case (BatteryFlag and (1 or 2 or 4)) of
          1: Text := rsLoadStatusHigh;
          2: Text := rsLoadStatusLow;
          4: Text := rsLoadStatusCritical;
        else
          Text := rsLoadSatusUnknownLoading
        end;
        if (BatteryFlag and 8 = 8) then
          LoadStatusString := Text + rsLoadStatusLoading;
      end;

      // Ladezustand in Prozent
      if (BatteryLifePercent <> 255) then
        LoadstatusPercent := BatteryLifePercent
      else
        LoadstatusPercent := -1;
  end;
  Result := GetLastError;
end;
Unabhängig von irgendwelchen Labels oder sonstigen Zeug, zu dem wird der Letzte Systemfehler zurückgegeben auf dem man testen kann, ob alles geklappt hat, bzw. wenn nicht kann man ihn anzeigen lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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