1

У меня есть скрипт AutoHotKey, который должен нажимать F3, когда я удерживаю Ctrl, и нажимать F2, когда я отпускаю Ctrl.

Мой скрипт на данный момент:

$ctrl::
Suspend, On
Send, {F3}
While (GetKeyState("Ctrl",P))
{
}
Send, {F2}
Suspend, Off
Return

Но когда я удерживаю Ctrl, это ничего не делает. Когда я отпускаю Ctrl, он попадает в F3 и F2. Может кто-нибудь сказать мне, как это исправить?

3 ответа3

1

Этот код обеспечивает желаемую функциональность:

$~ctrl::
    send {f3}
    keyWait, ctrl
    send {f2}
return
1

через: http://www.autohotkey.com/docs/commands/Send.htm

Чтобы удерживать или отпустить клавишу: заключите в скобки название клавиши, за которым следует слово "Вниз" или "Вверх". Например:

Отправить {b вниз} {b вверх}
Отправить {TAB down} {TAB up}
Отправить {вверх вниз}; Нажмите клавишу со стрелкой вверх.
Сон 1000; Держите это в течение одной секунды.
Отправить> {Вверх}; Отпустите кнопку со стрелкой вверх.

Когда клавиша удерживается с помощью описанного выше способа, она не начинает автоповторение, как если бы вы удерживали ее физически (это потому, что автоповторение - это функция драйвера / аппаратного обеспечения). Тем не менее, цикл может быть использован для имитации автоповтора. В следующем примере отправляются 20 нажатий клавиш:

Цикл 20 {
Отправить {Tab вниз}; Автоповтор состоит из последовательных понижательных событий (без повышающих событий).
Сон 30; Количество миллисекунд между нажатиями клавиш (или используйте SetKeyDelay).
}
Отправить {Tab up}; Отпустите ключ.

Слово DownTemp также может быть использовано. Его эффект такой же, как и Вниз, за исключением клавиш изменения (Control / Shift / Alt / Win). В этих случаях DownTemp сообщает последующим отправкам, что ключ не отключен постоянно, и может быть освобожден всякий раз, когда нажатие клавиши вызывает его. Например, Send {Control DownTemp}, за которым последует Send a, произведет обычное нажатие клавиши "a", а не нажатие клавиши control-A.

0

Кажется, вам нужна опция keyup для горячих клавиш.

Вот проверенный рабочий код:

Ctrl::
Send {F3}
keywait, Ctrl, L ; prevent F3 from firing while Ctrl is being held down.
return

Ctrl Up::Send {F2}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .