Posted by: Dakusan
« on: December 01, 2015, 09:29:01 pm »Original post for AutoHotKey Scripts can be found at https://www.castledragmire.com/Posts/AutoHotKey_Scripts.
Originally posted on: 12/01/15
Originally posted on: 12/01/15
In lieu of using my own custom C++ background services to take care of hot key tasks in Windows, I started using AutoHotKey a while back. While it’s not perfect, and it is missing a lot of Win32 API functionality, I am still able to mostly accomplish what I want in it. I was thinking I should add some of the simple scripts I use here.
- PadText = ~*
- Length = 43
- Text = Example Text
- Result = ~*~*~*~*~*~*~*~*Example Text~*~*~*~*~*~*~*~
;Get the last values
IniPath=%A_ScriptDir%\AutoHotKey.ini
IniRead,PadText,%IniPath%,CenterString,PadText,-
IniRead,NewLength,%IniPath%,CenterString,NewLength,10
IniRead,TheString,%IniPath%,CenterString,TheString,The String
;Get the input
InputBox,PadText,Center String,Pad Character,,,,,,,,%PadText%
InputBox,NewLength,Center String,New Length,,,,,,,,%NewLength%
InputBox,TheString,Center String,String To Center,,,,,,,,%TheString%
;Cancel on blank pad or invalid number
if StrLen(PadText)==0
{
MsgBox,Pad text cannot be blank
return
}
if NewLength is not integer
{
MsgBox,New length must be an integer
return
}
;Save the last values
IniWrite,%PadText%,%IniPath%,CenterString,PadText
IniWrite,%NewLength%,%IniPath%,CenterString,NewLength
IniWrite,%TheString%,%IniPath%,CenterString,TheString
;Initial padding
PadStrLen:=StrLen(PadText)
PadLen:=NewLength-StrLen(TheString)
NewString:=""
Loop
{
if StrLen(NewString)>=Ceil(PadLen/2)
break
NewString.=PadText
}
;Truncate initial padding to at least half
NewString:=Substr(NewString, 1, Ceil(PadLen/2))
;Add the string
NewString.=TheString
;Final padding
Loop
{
if StrLen(NewString)>=NewLength
break
NewString.=PadText
}
;Truncate to proper length
NewString:=Substr(NewString, 1, NewLength)
;Output to console
Sleep,100
Send %NewString%
return
clipboard = %clipboard%
return
WinGetActiveTitle, WinTitle
WinSet, Style, -0xC40000, %WinTitle%
WinMove, %WinTitle%, , 0, 0, 1920, 1080
return
Note: I had created this to help me get through the LISA intro multiple times.
;Get the current window and control
WinGetActiveTitle, TheTitle
ControlGetFocus FocusedControl, %TheTitle%
if(ErrorLevel)
FocusedControl=ahk_parent
;Get the pause interval
InputBox,IntervalTime,Starting script with window '%TheTitle%',Enter pause interval in milliseconds. After submitted`, hold down the key to repeat,,,,,,,,200
if(ErrorLevel || IntervalTime=="") ;Cancel action if blank or cancelled
return
IntervalTime := IntervalTime+0
;Get the key to keep pressing - Unfortunately, there is no other way I can find to get the currently pressed keycode besides polling all 255 of them
Sleep 500 ;Barrier to make sure one of the initialization keys is not grabbed
Loop {
TestKey := 0
Loop {
SetFormat, INTEGER, H
HexTextKey := TestKey
SetFormat, INTEGER, D
VirtKey = % "vk" . SubStr(HexTextKey, 3)
if(GetKeyState(VirtKey)=1 || TestKey>255)
break
TestKey:=TestKey+1
}
if(TestKey<=255)
break
Sleep 500
}
VirtKey := GetKeyName(VirtKey)
;If a direction key, remap to the actual key
if(TestKey>=0x25 && TestKey<=0x28)
VirtKey := SubStr(VirtKey, 7)
;Let the user know their key
MsgBox Received key: '%VirtKey%'. You may now let go of the key. Hold F11 to stop the script.
;Continually send the key at the requested interval
KeyDelay:=10
SetKeyDelay %KeyDelay% #Interval between up/down keys
IntervalTime-=%KeyDelay%
Loop {
;Press the key
ControlSend, %FocusedControl%, {%VirtKey% Up}{%VirtKey% Down}, %TheTitle%
;Check for the cancel key
if(GetKeyState("F11"))
break
;Wait the requested interval to press the key again
Sleep, %IntervalTime%
}
;Let the user know the script has ended
MsgBox Ending script with window '%TheTitle%'
return