Genügt nicht einfach das Prüfen auf einen Akku? Wäre für mich das Naheliegenste, oder? Jetzt weiß ich nur nicht, inwieweit eine USV als Akku erkannt wird *g*
Da:
Delphi-Quellcode:
function GetPowerStatus(var HasBattery: Boolean; var LoadStatusString: String;
var LoadstatusPercent: Integer): DWORD;
function TForm1.GetPowerStatus(var HasBattery: Boolean; var LoadStatusString: String;
var LoadstatusPercent: Integer): DWORD;
var
SystemPowerStatus: TSystemPowerStatus;
Text:string;
resourcestring
rsLoadStatusUnknown = 'Unbekannter Status';
rsLoadStatusNoBattery = 'Es existiert kein Akku';
rsLoadStatusHigh = 'Hoher Ladezustand';
rsLoadStatusLow = 'Niedriger Ladezustand';
rsLoadStatusCritical = 'Kritischer Ladezustand';
rsLoadStatusLoading = ' Akku 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
LoadStatusString := rsLoadStatusUnknown
else if (BatteryFlag and 128 = 128) then
LoadStatusString := rsLoadStatusNoBattery
else
begin
case (BatteryFlag and (1 or 2 or 4)) of
1: Text := rsLoadStatusHigh;
2: Text := rsLoadStatusLow;
4: Text := rsLoadStatusCritical;
else
LoadStatusString := rsLoadSatusUnknownLoading
end;
if (BatteryFlag and 8 = 8) then
LoadStatusString := Text + rsLoadStatusLoading
else
LoadStatusString:=text+' '+inttostr(LoadstatusPercent)+'% verbleibend';
end;
// Ladezustand in Prozent
if (BatteryLifePercent <> 255) then
LoadstatusPercent := BatteryLifePercent
else
LoadstatusPercent := -1;
end;
Result := GetLastError;
end;