DELPHI获取系统电源状态的信息

2019-07-13 21:54发布

//声明
GetSystemPowerStatus(
var lpSystemPowerStatus:TSystemPowerStatus {TSystemPowerStatus 结构}
): BOOL;

//TSystemPowerStatus 是 _SYSTEM_POWER_STATUS 结构的重定义:
_SYSTEM_POWER_STATUS = packed record
ACLineStatus : Byte;         {0:电源断电; 1:电源正常; 255:电源状态未知}
BatteryFlag : Byte;          {1:电量充足; 2:电量低; 4:电池基本耗尽;8:充电; 128:没有电池; 255:电池状态未知}
BatteryLifePercent : Byte;   {0..100:所剩电量百分数; 255:未知}
Reserved1 :Byte;            {保留, 须为 0}
BatteryLifeTime : DWORD;     {电池剩余能量; -1 表示未知}
BatteryFullLifeTime : DWORD; {电池总能量; -1 表示未知}
end;
//举例:
procedureTForm1.FormCreate(Sender: TObject);
var
Power: TSystemPowerStatus;
begin
GetSystemPowerStatus(Power);

Memo1.Clear;
with Memo1.Lines do
begin

    Add(Format('电源状态: %d',[Power.ACLineStatus]));
    Add(Format('电池状态: %d',[Power.BatteryFlag]));
    Add(Format('电量百分比: %d',[Power.BatteryLifePercent]));
    Add(Format('剩余能量: %d',[Power.BatteryLifeTime]));
    Add(Format('总能量: %d',[Power.BatteryFullLifeTime]));
end;
end;

引用单元:
Windows,   ActiveX,   Classes,   ShlObj;
________________________________________________________

function   GetAPMLineStatus:   TAPMLineStatus;
var
    SystemPowerstatus:   TSystemPowerStatus;
begin
    Result   :=   alsUnknown;
    if   not   GetSystemPowerStatus(SystemPowerStatus)  then
        RaiseLastWin32Error
    else
    begin
        case   SystemPowerStatus.ACLineStatus    of
            0:
                Result   :=  alsOffline;
            1:
                Result   :=  alsOnline;
            255:
                Result   :=  alsUnknown;
        end;
    end;
end;

//------------------------------------------------------------------------------
function   GetAPMBatteryFlag:   TAPMBatteryFlag;
var
    SystemPowerstatus:   TSystemPowerStatus;
begin
    Result   :=   abfUnknown;
    if   not   GetSystemPowerStatus(SystemPowerStatus)  then
        RaiseLastWin32Error
    else
    begin
        case   SystemPowerStatus.BatteryFlag   of
            1:
              Result   :=  abfHigh;
            2:
                Result   :=  abfLow;
            4:
                Result   :=  abfCritical;
            8:
                Result   :=  abfCharging;
            128:
                Result   :=  abfNoBattery;
            255:
                Result   :=  abfUnknown;
        end;
    end;
end;

//------------------------------------------------------------------------------

function   GetAPMBatteryLifePercent:   Integer;
var
    SystemPowerstatus:   TSystemPowerStatus;
begin
    Result   :=   0;
    if   not   GetSystemPowerStatus(SystemPowerStatus)  then
        RaiseLastWin32Error
    else
        Result   :=  SystemPowerStatus.BatteryLifePercent;
end;

//------------------------------------------------------------------------------

function   GetAPMBatteryLifeTime:   Integer;
var
    SystemPowerstatus:   TSystemPowerStatus;
begin
    Result   :=   0;
    if   not   GetSystemPowerStatus(SystemPowerStatus)  then
        RaiseLastWin32Error
    else
        Result   :=  SystemPowerStatus.BatteryLifeTime;
end;

//------------------------------------------------------------------------------

function   GetAPMBatteryFullLifeTime:   Integer;
var
    SystemPowerstatus:   TSystemPowerStatus;
begin
    Result   :=   0;
    if   not   GetSystemPowerStatus(SystemPowerStatus)  then
        RaiseLastWin32Error
    else
        Result   :=  SystemPowerStatus.BatteryFullLifeTime;
end;