VarSetCapacity(电源状态, 1+1+1+1+4+4)
success :=DllCall("kernel32.dll\GetSystemPowerStatus","uint",&电源状态)
ToolTip,% 电源状态.BatteryFlag
交流电源状态:=ReadInteger(&电源状态,0,1,false)
电池充电状态:=ReadInteger(&电源状态,1,1,false)
剩余电量:=ReadInteger(&电源状态,2,1,false)
可用时间:=ReadInteger(&电源状态,4,4,false)
充满时间:=ReadInteger(&电源状态,8,4,false)
输出结果:="交流电源状态: " 交流电源状态 "`n电池充电状态: " 电池充电状态 "`n剩余电量(百分比): " 剩余电量 "`n电池剩余电量(剩余秒): " TimesFormat(可用时间//100000) "`n充满电需要时间(剩余秒): " TimesFormat(充满时间//100000)
MsgBox, %输出结果%
return
TimesFormat(Times) {
RegExMatch(Times,"^(\d+)(\.(\d+))*$",t)
Return Format("{:02}时{:02}分{:02}秒{:03}毫秒", t1//3600, Mod(t1,3600)//60, Mod(Mod(t1,3600),60), !t2 ? 000 : t3)
}
ReadInteger( 指针地址, 指针偏移, 字节长度, p_hex=true )
{
value = 0
old_FormatInteger := a_FormatInteger ;备份format格式
if ( p_hex )
SetFormat, integer, hex
else
SetFormat, integer, dec
loop, %字节长度%
value := value+( *( ( 指针地址+指针偏移 )+( a_Index-1 ) ) << ( 8* ( a_Index-1 ) ) )
SetFormat, integer, %old_FormatInteger% ;还原format格式
return, value
}
esc::ExitApp
/*
ACLineStatus 交流电源状态
Value Meaning
0 Offline
1 Online
255 Unknown status
BatteryFlag 电池充电状态。 可以包含一或多个以下值
Value Meaning
1 高,电量大于66%
2 低,小于33%
4 极低,小于5%
8 充电中
128 没有电池
255 未知,无法读取状态
BatteryLifePercent 电池还有百分之几能充满.0~100,若未知则为255
Reserved1 保留,必须为0
BatteryLifeTime 秒为单位的电池剩余电量, 若未知则为-1
BatteryFullLifeTime 秒为单位的电池充满电的电量,若未知则为-1
; 获取剩余电量
VarSetCapacity(SYSTEM_POWER_STATUS, 12, 0)
DllCall("GetSystemPowerStatus", "Ptr", &SYSTEM_POWER_STATUS)
BatteryLifePercent := NumGet(SYSTEM_POWER_STATUS, 2, "UChar") ; 0-100 剩余电量 255 状态未知
*/
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)