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)