DECLARE INTEGER GetSystemPowerStatus IN kernel32;
STRING @lpSystemPowerStatus
*|typedef struct _SYSTEM_POWER_STATUS {
*| BYTE ACLineStatus; 0:1
*| BYTE BatteryFlag; 1:1
*| BYTE BatteryLifePercent; 2:1
*| BYTE Reserved1; 3:1
*| DWORD BatteryLifeTime; 4:4
*| DWORD BatteryFullLifeTime; 8:4
*|} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS; total 12 bytes
LOCAL cBuffer
cBuffer = Repli(Chr(0), 12)
IF GetSystemPowerStatus(@cBuffer) = 0
RETURN
ENDIF
LOCAL nStatus, nBattery
nStatus = Asc(SUBSTR(cBuffer,1,1))
nBattery = Asc(SUBSTR(cBuffer,2,1))
? "AC power status: "
DO CASE
CASE nStatus = 0
?? "offline"
CASE nStatus = 1
?? "online"
OTHER
?? "unknown"
ENDCASE
? "Battery flag: "
DO CASE
CASE nBattery = 1
?? "high"
CASE nBattery = 2
?? "low"
CASE nBattery = 4
?? "critical"
CASE nBattery = 8
?? "charging"
CASE nBattery = 128
?? "no system battery"
OTHER
?? "unknown"
ENDCASE
IF nBattery <= 8
? "Battery remaining, %:", Asc(SUBSTR(cBuffer,3,1))
? "Battery remaining, sec:", buf2dword(SUBSTR(cBuffer,5,4))
? "Battery full time, sec:", buf2dword(SUBSTR(cBuffer,9,4))
ENDIF
* end of main
FUNCTION buf2dword(lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
BitLShift(Asc(SUBSTR(lcBuffer, 2,1)), 8) +;
BitLShift(Asc(SUBSTR(lcBuffer, 3,1)), 16) +;
BitLShift(Asc(SUBSTR(lcBuffer, 4,1)), 24)
|