Code: Select all
LibFunc>kernel32,GetSystemPowerStatus,Test,powerStatus
BTW, this only return the array "TEST_1=powerStatus":
Code: Select all
LibFuncW>kernel32,GetSystemPowerStatus,Test,powerStatus
Moderators: JRL, Dorian (MJT support)
Code: Select all
LibFunc>kernel32,GetSystemPowerStatus,Test,powerStatus
Code: Select all
LibFuncW>kernel32,GetSystemPowerStatus,Test,powerStatus
Code: Select all
LibFunc>kernel32,GetSystemPowerStatus,DecimalOfBinary,REF:0
Code: Select all
LibFunc>kernel32,GetSystemPowerStatus,DECIMAL_VALUE,REF:0
//Format> command doesn't have a base conversion for binary...
//https://stackoverflow.com/questions/32416311/base-conversion-function-in-vbscript
VBSTART
Function ToBase(ByVal n, b)
' Handle everything from binary to base 36...
If b < 2 Or b > 36 Then Exit Function
Const SYMBOLS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Do
ToBase = Mid(SYMBOLS, n Mod b + 1, 1) & ToBase
n = Int(n / b)
Loop While n > 0
End Function
VBEND
VBEval>ToBase(%DECIMAL_VALUE_1%,2),BINARY_VALUE
//This didn't work to pad the binary into a signed binary...
//Format>%.32d,BINARY_VALUE,SIGNED_BINARY_VALUE
Length>BINARY_VALUE,BINARY_VALUE_length
If>BINARY_VALUE_length<32
Let>DIFFERENCE=32-BINARY_VALUE_length
Let>PAD_ZEROS=
Let>pad=0
Repeat>pad
ConCat>PAD_ZEROS,0
Let>pad=pad+1
Until>pad=DIFFERENCE
Let>SIGNED_BINARY_VALUE=%PAD_ZEROS%%BINARY_VALUE%
Else>
Let>SIGNED_BINARY_VALUE=BINARY_VALUE
Endif>
Let>BATTERY_INFO_BYTES=ACLineStatus|BatteryFlag|BatteryLifePercent|SystemStatusFlag
Let>BATTERY_INFO_ACLINESTATUS=0,Offline|1,Online|255,Unknown
Let>BATTERY_INFO_BATTERYFLAG=1,High|2,Low|4,Critical|8,Charging|128,No battery|255,Unknown
Let>BATTERY_INFO_BATTERYLIFEPERCENT=255,Unknown
Let>BATTERY_INFO_SYSTEMSTATUSFLAG=0,Battery saver off|1,Battery saver on
Let>BYTE_LENGTH=8
Separate>BATTERY_INFO_BYTES,|,BYTE
Let>k=0
Repeat>k
Let>BYTE_START_POSITION={%k%*%BYTE_LENGTH%+1}
Let>k=k+1
MidStr>SIGNED_BINARY_VALUE,BYTE_START_POSITION,BYTE_LENGTH,TEMP_BYTE_VALUE
Let>TEMP_BYTE=BYTE_%k%
UpperCase>TEMP_BYTE,TEMP_BYTE
Let>TEMP_BYTE_STRING=BATTERY_INFO_%TEMP_BYTE%
Separate>%TEMP_BYTE_STRING%,|,TEMP_REPLACE
Let>p=0
Repeat>p
Let>p=p+1
Let>TEMP_REPLACE_STRING=TEMP_REPLACE_%p%
Separate>TEMP_REPLACE_STRING,%COMMA%,TEMP_N
Let>BATTERY_INFO_%TEMP_BYTE%_DECIMAL_VALUE_%TEMP_N_1%=%TEMP_N_2%
Until>p=TEMP_REPLACE_count
GoSub>BINARY_TO_DECIMAL,TEMP_BYTE_VALUE
Until>k=BYTE_count
SRT>BINARY_TO_DECIMAL
Let>TEMP_DECIMAL_VALUE=0
Let>n=BYTE_LENGTH
Let>power=0
Repeat>n
MidStr>BINARY_TO_DECIMAL_Var_1,n,1,BIT
If>power=0
If>BIT=1
Let>TO_ADD=1
Else>
Let>TO_ADD=0
Endif>
Else>
If>BIT=1
Let>TO_ADD={Power(2,%power%)}
Else>
Let>TO_ADD=0
Endif>
Endif>
Add>TEMP_DECIMAL_VALUE,TO_ADD
Let>power=power+1
Let>n=n-1
Until>n=0
Let>TEMP_STRING=BATTERY_INFO_%TEMP_BYTE%_DECIMAL_VALUE_%TEMP_DECIMAL_VALUE%
Position>_DECIMAL_VALUE_,TEMP_STRING,1,TEMP_STRING_TEST,FALSE
If>TEMP_STRING_TEST=0
//
Let>BATTERY_INFO_%TEMP_BYTE%_INFO=TEMP_STRING
Else>
Let>BATTERY_INFO_%TEMP_BYTE%_INFO=TEMP_DECIMAL_VALUE
Endif>
END>BINARY_TO_DECIMAL
Code: Select all
VBSTART
Function BatteryInfo()
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from CIM_Battery")
For Each objItem in colItems
BatteryInfo = BatteryInfo & _
"BatteryStatus=" & objItem.BatteryStatus & "|" & _
"Description=" & objItem.Description & "|" & _
"Voltage=" & objItem.DesignVoltage & "|" & _
"DeviceID=" & objItem.DeviceID & "|" & _
"Percentage=" & objItem.EstimatedChargeRemaining & "|" & _
"MinutesLeft=" & objItem.EstimatedRunTime & "|" & _
"Status=" & objItem.Status & "||"
Next
End Function
VBEND
VBEval>BatteryInfo(),TEMP
Separate>TEMP,||,TEMP_BATTERY
Let>b=1
Repeat>b
Let>TEMP_BAT=TEMP_BATTERY_%b%
Separate>TEMP_BAT,|,TEMP_INFO
Let>i=0
Repeat>i
Let>i=i+1
Let>TEMP_VAR=TEMP_INFO_%i%
Separate>TEMP_VAR,=,TEMP_VALUE
UpperCase>TEMP_VALUE_1,TEMP_VALUE_1
Let>BATTERY_%b%_%TEMP_VALUE_1%=TEMP_VALUE_2
Until>i=TEMP_INFO_count
Let>b=b+1
Until>b=TEMP_BATTERY_count