Главная идея:

  1. Первое нажатие клавиши активирует весь скрипт, пусть это будет Enter, например
  2. Если в течение 5 секунд после активации определенные клавиши будут нажаты и отпущены по порядку, выполняется основная часть скрипта. Если в течение этого времени будут нажаты какие-либо другие клавиши, скрипт завершится

Я знаю, как установить таймер, и как проверить, нажата ли клавиша в текущий момент времени (с GetKeyState), но я не знаю, как проверить, была ли клавиша нажата (и, возможно, отпущена) в течение определенного времени кадр, пока таймер не закончится, чтобы быть конкретным.

1 ответ1

0

Вы можете использовать горячую клавишу, а затем горячие строки для захвата последовательности клавиш.

Это не завершает 5-секундный период времени раньше, если нажимаются другие клавиши, но ничего не произойдет. Если вы хотите немедленно выйти из системы при обнаружении определенных нажатий клавиш, вы можете пойти в цикл, сравнивая A_LastKey с известными клавишами 'ok', чтобы нажать и выйти рано, если обнаружится что-то еще.

#Persistent    

hotstringsDisabled:=True

Return

; hotkey definition to enable hotstrings
Enter::
    hotstringsDisabled:=False
    SetTimer, DisableHotstrings, -5000  ; run once after 5 seconds
Return

DisableHotstrings:
    hotstringsDisabled:=True
Return

; hotstring definitions... 
; make as many as you like using this form...
; b0=don't backspace, c=case sensitive
:*b0c:custom::
    If hotstringsDisabled
        Return

    ;your code to do something useful goes here...
    Msgbox % "A_ThisHotkey=" A_ThisHotkey "`n" "A_LastKey=" A_LastKey
Return

Начальная горячая клавиша также может быть объединена (зависит только от того, как вы хотите это сделать)...

Enter::
    hotstringsDisabled:=False
    Sleep 5000
    hotstringsDisabled:=True
Return

Оператор Sleep 5000 - это то, что вы бы заменили циклом, если хотите раньше выйти из некоторых других клавиш или что-то в этом роде.

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