2010-01-19 5 views
29

Je ne suis pas stupide ... vraiment. Comment mapper une clé SEQUENCE (par exemple: Ctrl + Q, F) dans AutoHotKey.Touche AutoHotKey SÉQUENCE, pas seulement une touche de raccourci unique

J'ai Ctrl +Q vers le bas:

^q:: 

J'ai même F:

f:: 

Les exemples dans les fichiers d'aide montrent même comment faire deux frappes d'affilée:

Numpad0 & Numpad1:: 

Mais juste ne fonctionnera pas avec:

^q & f :: 

Ou l'un de ces deux:

LCtrl & q & f:: 
^q & ^f:: 
^q^f:: 
^qf:: 

Comment puis-je accomplir une séquence de touches de déclenchement quelque chose, quand l'une de ces clés est le Ctrl clé? J'ai cherché à utiliser un HOTSTRING à la place, mais je n'ai pas compris comment inclure le caractère Ctrl, dans ce contexte!

Répondre

25

D'accord; La réponse semble être:

^q:: 
Input Key, L1 
if Key=f 
...some code here... 
return 
+1

J'ai géré ceci d'une manière efficace mais laide dans le passé. J'aime mieux votre approche, et l'ai combinée avec la commande Progress pour faire de beaux menus de séquences de touches, comme celui que j'utilise pour lancer les navigateurs ** [ici] (https: //gist.github.com/ajkerrigan/a0e54dbdd5fb3dea5113) **. Merci pour une meilleure façon! – ajk

+1

Cela a gâché ma clé ctrl après quelques essais, donc par exemple je ne pouvais plus appuyer sur ctrl-shift-escape – BornToCode

3

Ou vous pouvez le faire comme ceci:

q & f:: 
    if GetKeyState("Control") { 
     ; Do something 
     return 
    } 
    return 

Je pense que cela est un peu plus lisible que l'utilisation de la clé d'entrée, L1 comme ci-dessus.

+5

La notation de l'esperluette nécessite que les deux touches soient maintenues enfoncées à la même heure. En majuscules, l'OP spécifie "sequence" donc cette réponse ne fonctionnera pas. – horta

1

Ceci intercepte CTRL + F. Si Q est maintenu à ce moment, votre code se déclenche.

^f:: 
    If GetKeyState("q", "p") { 
     MsgBox test 
    } Else { 
     Send ^f 
    } 
return 
+2

OP requis une séquence de clés. Cette réponse nécessite des frappes de touches simultanées. – horta

5

Dans le cas où quelqu'un cherche quelque chose de semblable, mais en fait vouloir CtrlQ + CtrlF et uniquement si Ctrl est maintenue tout au long (donc, à certains, cela peut sembler CtrlQ + F), alors voici comment faire:

$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 

Voir https://superuser.com/a/725303/145431 pour mon explication.