AutoHotKey key SEQUENCE, not just single-key hotkey
-
21-09-2019 - |
Question
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!
Solution
Alright; The answer seems to be:
^q::
Input Key, L1
if Key=f
...some code here...
return
OTHER TIPS
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.
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.
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