У меня есть скрипт AutoHotKey, который должен срабатывать, F3когда я удерживаю клавишу Ctrl, и срабатывать, F2когда я отпускаю клавишу Ctrl.
Мой текущий сценарий:
$ctrl::
Suspend, On
Send, {F3}
While (GetKeyState("Ctrl",P))
{
}
Send, {F2}
Suspend, Off
Return
Но когда я удерживаю Ctrl, ничего не происходит. Когда я отпускаю Ctrl, он бьет и по F3и по F2. Может кто-нибудь сказать мне, как это исправить?
решение1
Этот код обеспечивает желаемую вами функциональность:
$~ctrl::
send {f3}
keyWait, ctrl
send {f2}
return
решение2
Theнажатие клавишиВариант с горячими клавишами, похоже, то, что вам нужно.
Вот проверенный рабочий код:
Ctrl::
Send {F3}
keywait, Ctrl, L ; prevent F3 from firing while Ctrl is being held down.
return
Ctrl Up::Send {F2}
решение3
с помощью:http://www.autohotkey.com/docs/commands/Send.htm
Чтобы удерживать или отпускать клавишу: заключите в фигурные скобки название клавиши, а затем слово Down или Up. Например:
Send {b down}{b up}
Send {TAB down}{TAB up}
Send {Up down} ; Нажмите клавишу со стрелкой вверх.
Sleep 1000 ; Удерживайте ее нажатой в течение одной секунды.
Send> {Up up} ; Отпустите клавишу со стрелкой вверх.
Когда клавиша удерживается с помощью метода выше, она не начинает автоматически повторяться, как если бы вы удерживали ее физически (это связано с тем, что автоматически повторяться — это функция драйвера/оборудования). Однако для имитации автоматического повтора можно использовать цикл. Следующий пример отправляет 20 нажатий клавиши Tab:
Loop 20 {
Send {Tab down} ; Автоповтор состоит из последовательных событий нажатия (без событий нажатия).
Sleep 30 ; Количество миллисекунд между нажатиями клавиш (или используйте SetKeyDelay).
}
Send {Tab up} ; Отпустите клавишу.
Также можно использовать слово DownTemp. Его эффект такой же, как у Down, за исключением клавиш-модификаторов (Control/Shift/Alt/Win). В этих случаях DownTemp сообщает последующим посылкам, что клавиша не нажата постоянно и может быть отпущена, когда нажатие клавиши требует этого. Например, Send {Control DownTemp}, а затем Send a, произведет обычное нажатие клавиши "a", а не нажатие клавиши control-A.