Reputation: 6843
I'm not stupid... really. How do you map a key SEQUENCE (ie: Ctrl + Q , F) in AutoHotKey.
I've got Ctrl + Q down:
^q::
I've even got F:
f::
The examples in the help files even show how to do two keystrokes in a row:
Numpad0 & Numpad1::
But it just will not work with:
^q & f ::
Or any of these either:
LCtrl & q & f::
^q & ^f::
^q^f::
^qf::
How do I accomplish a Key SEQUENCE triggering something, when one of those keys is the Ctrl key? I looked into using a HOTSTRING instead, but couldn't work out how to include the Ctrl character, in that context!
Upvotes: 35
Views: 17411
Reputation: 10543
AutoHotkey v1:
#Requires AutoHotkey v1.1.33
^q:: ctrl_q := true ; assign the Boolean value "true" or "1" to this variable
^q up:: ctrl_q := false
; The #If directive creates context-sensitive hotkeys:
#If (ctrl_q) ; If this variable has the value "true"
^a:: MsgBox, Ctrl + Q + A
^b:: MsgBox, Ctrl + Q + B
; ...
#If
AutoHotkey v2:
#Requires AutoHotkey v2.0
^q:: ctrl_q := true ; assign the Boolean value "true" or "1" to this variable
^q up:: ctrl_q := false
; The #HotIf directive creates context-sensitive hotkeys:
#HotIf (ctrl_q := true ) ; If this variable has the value "true"
^a:: MsgBox "Ctrl + Q + A"
^b:: MsgBox "Ctrl + Q + B"
; ...
#HotIf
Upvotes: 0
Reputation: 30273
In case someone's looking for a similar thing, but actually want CtrlQ + CtrlF and only if Ctrl is held throughout (so, to some, this might seem like CtrlQ + F), then here's how to do that:
$Ctrl::Send {Ctrl Down}
$Ctrl UP::
ChordIsBroken := True
Send {Ctrl Up}
Return
^q::
ChordIsBroken := False
Input, OutputVar, L1 M
If (!ChordIsBroken && Asc(OutputVar) = 6)
{
MsgBox "Hello, World!"
}
Else
{
SendInput %OutputVar%
}
Return
See https://superuser.com/a/725303/145431 for my explanation.
Upvotes: 5
Reputation: 16342
This catches CTRL+F. If Q is held down at that moment, your code fires.
^f::
If GetKeyState("q", "p") {
MsgBox test
} Else {
Send ^f
}
return
Upvotes: 1
Reputation: 5764
Or you can do it like this:
q & f::
if GetKeyState("Control") {
; Do something
return
}
return
I think this is a bit more readable than using Input Key, L1 as in above.
Upvotes: 2
Reputation: 6843
Alright; The answer seems to be:
^q::
Input Key, L1
if Key=f
...some code here...
return
Upvotes: 32