#loops #autohotkey
#циклы #автоотключение
Вопрос:
У меня запущен мой первый скрипт AHK, который перехватывает функциональные клавиши и преобразует их в мультимедийные ключи (только если включена блокировка прокрутки). Это отлично работает.
Однако, если блокировка прокрутки не включена, я хочу, чтобы AHK просто передал ключ в запущенное приложение. Итак, я добавил предложение else, чтобы просто повторно отправить ключ (см. Ниже), но это приводит к более чем 70 нажатиям клавиш в секунду, как только я нажимаю F3. Как будто я в цикле.
Что не так с этим кодом?
F3::
if GetKeyState("Scrolllock", "T") {
Send {Volume_Up}
SoundBeep 1000, 50
SoundBeep 1100, 50
} else {
SendInput, {F3}
}
return
Ответ №1:
$F3::
if GetKeyState("Scrolllock", "T") {
Send {Volume_Up}
SoundBeep 1000, 50
SoundBeep 1100, 50
} else {
SendInput, {F3}
}
return
Проблема, с которой вы столкнулись, заключалась в том, что ваша Send
команда повторно запускала горячую клавишу, частью которой она была, что можно предотвратить с помощью модификатора $ .
Из документов:
Обычно это необходимо только в том случае, если скрипт использует команду отправки для отправки ключей, которые содержат саму горячую клавишу, что в противном случае может привести к ее запуску. Префикс $ заставляет использовать клавиатурный хук для реализации этой горячей клавиши, что в качестве побочного эффекта предотвращает запуск команды отправки. Префикс $ эквивалентен указанию #UseHook где-то над определением этой горячей клавиши.
Ответ №2:
Предполагая, что у вас нет более сложного скрипта, с которым могут возникнуть проблемы с оговорками #If
, я бы рекомендовал следующий подход для любого переназначения, подобного этому.
#If, GetKeyState("ScrollLock", "T")
F3::
SendInput, {Volume_Up}
SoundBeep, 1000, 50
SoundBeep, 1100, 50
return
#If
Таким образом, F3 сохраняет свою первоначальную функциональность, когда блокировка прокрутки не включена.
(Отправка F3 не совпадает с фактически используемой клавишей, некоторые программы могут не распознать имитированное нажатие клавиши, особенно если он использует прямой ввод, и вы также теряете функциональность удерживания F3)