У меня есть скрипт, который содержит три варианта, как эти для 50+ ключей. Интересно, как я мог уменьшить это?
; 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
Это работает так, как я хочу, чтобы это работало. Важным является выбранный параметр (1 или 2) и два разных значения Sleep
для "Варианта 1". Я бы хотел, чтобы это работало так же, как это.
Я попытался использовать GetKeyState
(даже если функция не рекомендуется), но безуспешно. Две проблемы:
- Я не могу нажать Ctrl или Alt перед клавишей "a", в отличие от оригинальной. Поэтому мне пришлось поставить
Sleep
в начале и нажать модификаторы в первую секунду. - Это все еще не работало, потому что, если я не заполняю эти переменные нажатием фактических клавиш (Ctrl и / или Alt), это выдает сообщение об ошибке.
Я мог бы найти обходной путь для обоих, но я чувствовал, что это просто не сработает в конце концов. Вот код:
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
После этого я подумал об использовании нескольких команд KeyWait
, но я больше не уверен.
TL; DR. Если бы опытный пользователь AHK мог помочь с более короткой, более эффективной альтернативой или решением для варианта GetKeyState
(или отладить его), это было бы очень ценно !
Редактировать: Используя подстановочный знак '*' и GetKeyState в качестве функции, код работает лучше, чем оригинал, и содержит меньше повторений, что позволяет мне изменить позже, если это необходимо.
*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