J'ai un script qui contient trois variantes comme celles-ci pour plus de 50 clés. Je me demande, comment pourrais-je le réduire?
; Press "a" = Option 1 (with 500 ms sleep)
; Press "Ctrl + a" = Option 2 (with 500 ms sleep)
; Press "Ctrl + Alt + a" = Option 1 (with 1000 ms sleep)
a::
Send, {Enter}
Sleep, 100
Send, 1
Sleep, 500
Send, {Enter}
Return
^a::
Send, {Enter}
Sleep, 100
Send, 2
Sleep, 500
Send, {Enter}
Return
^!a::
Send, {Enter}
Sleep, 100
Send, 1
Sleep, 1000
Send, {Enter}
Return
Cela fonctionne comme je le veux. Ce qui est important, c’est l’option choisie (1 ou 2) et les deux Sleep
valeurs différentes pour "Option 1". J'aimerais que ça fonctionne comme ça.
J'ai essayé d'utiliser GetKeyState
(même si la fonction est recommandée, pas celle-ci) sans succès. Deux problèmes:
- Je ne peux pas appuyer sur les touches Ctrl ou Alt avant la touche "a", contrairement à la touche d'origine. Je devais donc mettre un
Sleep
au début et appuyer sur les modificateurs dans la première seconde. - Cela ne fonctionnait toujours pas, car si je ne remplis pas ces variables en appuyant sur les touches réelles (Ctrl et / ou Alt), un message d'erreur apparaît.
Je pouvais trouver une solution de contournement pour les deux, mais je sentais que ça ne marcherait pas après tout. Voici le code:
a::
Sleep, 1000
GetKeyState, AltState, Alt
GetKeyState, CtrlState, Ctrl
Send, {Enter}
if (CtrlState = D) {
Send, Option 2
Sleep, 500
}
else {
Send, Option 1
if (CtrlState = D and AltState = D) {
Sleep, 1000
}
else {
Sleep, 500
}
}
Send, {Enter}
Return
Après cet échec, j'ai pensé à utiliser plusieurs KeyWait
commandes, mais je n'en suis plus sûr.
TL; DR. Si un utilisateur expérimenté d'AHK pouvait aider avec une alternative plus courte et plus efficace ou une solution pour la GetKeyState
variante (ou la déboguer), ce serait très apprécié!
Edit : en utilisant le caractère générique '*' et le GetKeyState en tant que fonction, le code fonctionne mieux que l'original et contient moins de répétitions, ce qui me permet de modifier plus facilement ultérieurement, si nécessaire.
*a::
Send, {Enter}
Sleep, 100
if GetKeyState("Control", "P") and not GetKeyState("Alt", "P") {
Send, 2
}
else {
Send, 1
}
if GetKeyState("Alt", "P") and GetKeyState("Control", "P") {
Sleep, 1000
}
else {
Sleep, 500
}
Send, {Enter}
Return