; 电池通知 ; 当电池充电时,会发出通知 ; 会出现提示用户卸下充电器 ; 当电池电量低于30%时,会发出通知 ; 会出现提示用户插入充电器 ; AHK脚本以管理员权限自启 if !A_IsAdmin && !RegExMatch(_:=DllCall("GetCommandLine", "Str"), " /restart(?!\S)") RunWait % "*RunAs " RegExReplace(_, "^\"".*?\""\K|^\S*\K", " /restart") #NoEnv #SingleInstance Force SetTitleMatchMode 2 ; 设置所需的低电池百分比以获得警报 lowBatteryPercentage := 90 sleepTime := 60 chargedPercentage := 99 percentage := "%" Loop { ;Loop forever ;Grab the current data. VarSetCapacity(powerstatus, 1+1+1+1+4+4) success := DllCall("kernel32.dll\GetSystemPowerStatus", "uint", &powerstatus) acLineStatus:=ReadInteger(&powerstatus,0) batteryLifePercent:=ReadInteger(&powerstatus,2) ;Is the battery charged higher than 99% if (batteryLifePercent > chargedPercentage){ ;Yes. if (acLineStatus == 1){ ;Only notify me once if (batteryLifePercent == 255){ sleepTime := 60 } else{ title= Battery: %batteryLifePercent%`% popupmfk(title,"Remove Charger", , , 1) ;Format the message box SoundBeep, 1500, 200 ; MsgBox, %output% ;Notify me. sleepTime := 600 } } else{ sleepTime := 60 } } if (batteryLifePercent < lowBatteryPercentage){ ;Yes. if (acLineStatus == 0){ ;Only notify me once ;Format the message box ; output=PLUG IN THE CHARGING CABLE.`nBattery Life: %batteryLifePercent%%percentage% title= Battery: %batteryLifePercent%`% SoundBeep, 1500, 200 ; MsgBox, %output% ;Notify me. popupmfk(title,"Plug-in Charger", 7000, , 1) sleepTime := 300 } else{ sleepTime := 60 } } sleep, sleepTime*1000 ;sleep for 5 seconds } ;Format the data ReadInteger( p_address, p_offset) { loop, 1 value := 0+( *( ( p_address+p_offset )+( a_Index-1 ) ) << ( 8* ( a_Index-1 ) ) ) return, value } popupmfk(popTitle=0, popMsg=0, popTime=5000, icoPath=0, hasGoAway=0) ; Displays a popup with popTitle and popMsg for popTime msec. ; If popTitle is missing, then only popMsg will appear. ; If you call popupmfk with no popMsg (or no parameters at all), it will kill the topmost popup. ; (In theory, you should only be showing one popup at a time anyway.) ; icoPath specifies the (optional) icon you want to show on the left-top of the popup ; Setting hasGoAway will make the popup have a (kludgey) go-away box. In either case, ; clicking on the popup's icon or any of the text will dismiss the popup. ; If a popup created by this function (even from outside this script) is already displayed, it will be ; killed and a new one will be shown. ; ; This function creates/uses the global kInstanceGuiFcnPopupmfk, ; you can use this global to test for popup windows outside this function. ; This function creates the following label: lbl_fcn_popupmfk_DONE ; { ; constants kInstanceGuiFcnPopupmfk = instance_gui_fcn_popupmfk_1 ; used to identify windows launched by this funciton kTitleTypeFace = Tahoma ; typeface of titles kTitleStyle = s8 w700 c000000 ; style for titles kMessageTypeFace = Tahoma ; typeface of message kMessageStyle = s8 w400 c000000 ; style for messages ; let's get to work DetectHiddenText, On ; we will need to make sure that we can detect hidden text ; I should store the state that DetectHiddenText is in before changing it so it can be reset later, ; sadly I am not aware of any reasonable way of querying the state of DetectHiddenText :-( IfWinExist, ahk_class AutoHotkeyGUI, %kInstanceGuiFcnPopupmfk% ; if a popup is already being displayed { gosub lbl_fcn_popupmfk_DONE ; kill popups and timer from this App WinKill, ahk_class AutoHotkeyGUI, %kInstanceGuiFcnPopupmfk% ; kill popups from other Apps ;WinWaitClose, ahk_class AutoHotkeyGUI, %kInstanceGuiFcnPopupmfk% ; make sure the previous popup is dead } if popMsg ; if a message is specified, pop up a new window { Gui, +AlwaysOnTop +toolwindow -resize -caption +border ;;DWD moved to here. Doc says, "For performance reasons, it is better to set all options in a single line, and to do so before creating the window (that is, before any use of other sub-commands such as Gui Add)." ;WinWaitClose, ahk_class AutoHotkeyGUI, %kInstanceGuiFcnPopupmfk% ; make sure the previous popup is dead Gui, Add, Text, hidden, %kInstanceGuiFcnPopupmfk% ; add the ID text as hidden if popTitle ; if we have a title { if icoPath ; if we have an icon { Gui, Add, Picture, xm ym section glbl_fcn_popupmfk_DONE ,%icoPath% ; add the icon Gui, font, %kTitleStyle%, %kTitleTypeFace% ; add first the title (popTitle) Gui, Add, Text, ys glbl_fcn_popupmfk_DONE , %popTitle% } else ; otherwise { Gui, font, %kTitleStyle%, %kTitleTypeFace% ; add first the title (popTitle) Gui, Add, Text, xm ym section glbl_fcn_popupmfk_DONE , %popTitle% } Gui, font, s8 %kMessageStyle%, %kMessageTypeFace% ; now add the message (popMsg) Gui, Add, Text, xm glbl_fcn_popupmfk_DONE , %popMsg% } else ; otherwise { Gui, font, %kMessageStyle%, %kMessageTypeFace% if icoPath ; if we have an icon { Gui, Add, Picture, xm ym section glbl_fcn_popupmfk_DONE ,%icoPath% ; add the icon Gui, Add, Text, ys glbl_fcn_popupmfk_DONE, %popMsg% ; and the message } else ; add the only the message (popMsg) Gui, Add, Text, xm ym glbl_fcn_popupmfk_DONE, %popMsg% } if hasGoAway ; if you want a go-away box... { ;Gui, font, s8 w700 c990000, Tahoma ; kludge go-away box by making a red [X] ;Gui, Add, Text, ys glbl_fcn_popupmfk_DONE , [X] Gui, font, s6 w400 ; kludge go-away box by making a button with a little x in it Gui, Add, Button, ym glbl_fcn_popupmfk_DONE , x } Gui, font ;Gui, +AlwaysOnTop +toolwindow -resize -caption +border [DWD moved up] Gui, Color, ffffdd ; position the thing at (monWorkAreaRight-GuiWidth, monWorkAreaBottom-GuiHeight SysGet, popup_monWorkArea, MonitorWorkArea ; get the primary monitor's client area Gui, Show, x%popup_monWorkAreaRight% y%popup_monWorkAreaBottom% NoActivate ; first show a "hidden" window (offscreen) WinWait , ahk_class AutoHotkeyGUI, %kInstanceGuiFcnPopupmfk% WinGetPos ,,, GuiWidth, GuiHeight, ahk_class AutoHotkeyGUI, %kInstanceGuiFcnPopupmfk% ; and get its dimensions popup_x := popup_monWorkAreaRight-GuiWidth popup_y := popup_monWorkAreaBottom-GuiHeight Gui, Show, x%popup_x% y%popup_y% NoActivate ; now show the window for real WinWait , ahk_class AutoHotkeyGUI, %kInstanceGuiFcnPopupmfk% SetTimer, lbl_fcn_popupmfk_DONE, %popTime% } return lbl_fcn_popupmfk_DONE: SetTimer, lbl_fcn_popupmfk_DONE, Off Gui, Destroy return }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)