Eu tenho um script que contém três variantes como estas para mais de 50 chaves. Eu me pergunto, como eu poderia diminuir isso?
; 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
Isso funciona como eu quero que funcione. O que é importante é a opção escolhida (1 ou 2) e os dois valores Sleep
diferentes para "Opção 1". Eu gostaria que funcionasse assim.
Eu tentei usar GetKeyState
(mesmo se a função for recomendada, não isso) sem sucesso. Dois problemas:
- Eu não posso pressionar Ctrl ou Alt antes da tecla "a", ao contrário da original. Então eu tive que colocar um
Sleep
no começo e pressionar os modificadores no primeiro segundo.
- Ainda assim não funcionou, porque se eu não preencher essas variáveis pressionando as teclas atuais (Ctrl e / ou Alt), isso fornecerá uma mensagem de erro.
Eu poderia encontrar uma solução alternativa para ambos, mas senti que simplesmente não funcionaria, afinal. Aqui está o código:
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
Depois disso, pensei em usar vários comandos KeyWait
, mas não tenho mais certeza.
TL; DR. Se um usuário experiente do AHK puder ajudar com uma alternativa mais curta e eficiente ou com uma solução para a variante GetKeyState
(ou depurá-la), isso seria muito apreciado!
Editar : Usando o curinga '*' e o GetKeyState como uma função, o código funciona melhor do que o original e contém menos repetições, facilitando a modificação posterior , se necessário.
*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