Mam skrypt zawierający trzy takie warianty dla kluczy 50+. Ciekawe, jak mógłbym to zmniejszyć?
; 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
To działa tak, jak chcę, żeby to działało. Ważna jest wybrana opcja (1 lub 2) i dwie różne Sleep
wartości dla „Opcja 1”. Chciałbym, żeby tak działało.
Próbowałem użyć GetKeyState
(nawet jeśli funkcja jest zalecana, a nie ta) bez powodzenia. Dwa problemy:
- Nie mogę nacisnąć klawisza Ctrl ani Alt przed klawiszem „a”, inaczej niż w oryginalnym. Więc musiałem umieścić
Sleep
na początku i naciśnij modyfikatory w pierwszej sekundzie. - Nadal jednak nie zadziałało, ponieważ jeśli nie wypełnię tych zmiennych naciskając właściwe klawisze (Ctrl i / lub Alt), pojawi się komunikat o błędzie.
Mogłem znaleźć obejście dla obu, ale czułem, że po prostu nie będzie działać. Oto kod:
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
Po tym niepowodzeniu pomyślałem o użyciu wielu KeyWait
polecenia, ale już nie jestem pewien.
TL; DR. Jeśli doświadczony użytkownik AHK może pomóc w krótszej, bardziej wydajnej alternatywie lub rozwiązaniu dla GetKeyState
wariant (lub debuguj go), byłoby bardzo mile widziane!
Edytować : Używając symbolu wieloznacznego „*” i funkcji GetKeyState jako funkcji, kod działa lepiej niż oryginał i zawiera mniej powtórzeń, co ułatwia mi późniejszą modyfikację, jeśli zajdzie taka potrzeba.
*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
źródło