1
votes

I'm trying to get AHK to continue to press "2" until "2" is pressed a second time. If alt, ctrl, or shift is held it sends ^2, +2, !2 while held and then returns to spamming "2" once the modifier key is released.

This code works so far with modifiers I just need to figure out how to add the loop.

; Disable Alt+Tab
!Tab::Return

; Disable Windows Key + Tab
#Tab::Return

#ifWinActive World of Warcraft
{
$2::
$^2::
$+2::
$!2::
Loop
{
if not GetKeyState("2", "P")
break
if GetKeyState("LCtrl", "P")
Send ^2
else if GetKeyState("LShift", "P")
Send +2
else if GetKeyState("LAlt", "P")
Send !2
else
Send 2
sleep 135
}
return
}
1

1 Answers

1
votes

I would recommend using SetTimer for your loop and to be able to toggle it on and off. Please see if the following works for you:

$2::
$<^2::
$<+2::
$<!2::
SetTimer , label_TwoLoop , % ( bT := !bT ) ? "135" : "Off"
Return

label_TwoLoop:
If GetKeyState( "LCtrl" , "P" )
    Send , ^2
Else If GetKeyState( "LShift" , "P" )
    Send , +2
Else If GetKeyState( "LAlt" , "P" )
    Send , !2
Else
    Send , 2
Return

https://autohotkey.com/docs/commands/SetTimer.htm

Note that I added the < to the hotkey definitions since the loop-portion is only looking for the left modifier keys. I figured this is the intended behavior.