Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "KeyWait", в содержании - "Keyboard Control" - "KeyWait", v1.0.47.06.

Ник переводчика: YMP.

Настоящее имя переводчика: Юрий Попов.

KeyWait

Ждёт, пока не будет отпущена или нажата клавиша или кнопка мыши/джойстика.

KeyWait, KeyName [, Options]

Параметры

KeyName Может быть практически любым одиночным символом с клавиатуры или одним из имён из списка клавиш и кнопок клавиатуры и мыши/джойстика. У джойстика поддерживаются только кнопки.

Кроме того, может быть указан код виртуальной клавиши, например, vkFF. Это может быть полезно в тех редких случаях, когда клавиша не имеет имени и не выдаёт при нажатии никакого видимого символа. Как определить код виртуальной клавиши, показано в конце страницы со списком имён клавиш и кнопок.
Options Если этот параметр пустой, команда будет ждать неопределённо долго, пока не будет физически отпущена пользователем указанная клавиша или кнопка мыши/джойстика. Однако, если хук клавиатуры не установлен и KeyName содержит имя клавиши, отпускаемой искусственно при помощи, например, команды Send, это будет воспринято как физическое отпускание клавиши. То же верно для кнопок мыши, если не установлен хук мыши.

Возможные значения: одна или несколько из следующих букв (в любом порядке, с пробелами или без).

D: Ждать нажатия клавиши.

L: Проверять логическое состояние клавиши. Это состояние, в котором клавиша находится по мнению операционной системы и активного окна, но оно не обязательно совпадает с физическим состоянием. Эта опция игнорируется для кнопок джойстика.

T: Таймаут (например, T3). Число секунд, которое должна ждать команда, прежде чем установить ErrorLevel в 1 и прекратить ожидание. Если клавиша или кнопка переходит в заданное состояние, команда не ждёт истечения таймаута. Вместо этого она немедленно устанавливает ErrorLevel в 0, и скрипт продолжает выполнение.

Значение таймаута может быть числом с плавающей точкой, например, 2.5, но не может быть шестнадцатеричным, таким как 0x03.

ErrorLevel

Устанавливается в 1, если истёк таймаут, иначе равен 0.

Примечания

Под Windows Me/98/95 физическое состояние клавиши или кнопки мыши будет скорее всего всегда совпадать с логическим. Под Windows NT/2000/XP или более поздней физическое состояние клавиши или кнопки мыши обычно будет совпадать с логическим, за исключением случаев, когда установлены хуки клавиатуры или мыши. В этом случае состояние клавиши или кнопки будет отражать её реальное физическое положение. Вы можете определить, использует ли скрипт хуки, при помощи команды KeyHistory или через меню скрипта. Вы можете гарантировать установку любого хука, или сразу обоих, добавив в скрипт директиву #InstallKeybdHook и/или #InstallMouseHook.

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

Чтобы ждать отпускания двух или более клавиш, используйте несколько KeyWait последовательно. Например:

KeyWait Control ; Ждать отпускания Control и Alt.
KeyWait Alt

Если вам нужно ждать нажатия любой клавиши из некоторого набора клавиш, смотрите примеры в описании команды Input.

Примеры

; Пример №1: элементарное использование.
KeyWait, a  ; Ждать отпускания А.
KeyWait, LButton, D  ; Ждать нажатия левой кнопки мыши.
KeyWait, Joy1, D T3  ; Ждать не дольше 3 секунд нажатия первой кнопки джойстика.
KeyWait, LAlt, L  ; Ждать логического отпускания левого Alt.
; Пример №2: простая комбинация.
~Capslock::
KeyWait, Capslock  ; Ждать физического отпускания пользователем.
MsgBox Вы нажали и отпустили Capslock.
return
; Пример №3: переназначение клавиши или кнопки мыши (только для иллюстрации,
; поскольку на практике проще использовать встроенную возможность переназначения).
; Левая кнопка мыши удерживается нажатой, пока нажат NumpadAdd (цифровой плюс),
; что фактически превращает NumpadAdd в кнопку мыши.
*NumpadAdd::
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку мыши.
KeyWait, NumpadAdd           ; Ждать отпускания клавиши.
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку.
return
; Пример №4: ждёт двойного нажатия клавиши (наподобие двойного щелчка мыши).
; KeyWait используется для блокирования встроенного автоповтора клавиатуры,
; чтобы двойное нажатие не получилось, когда вы удерживаете RControl,
; используя его в качестве модификатора другой клавиши.
; KeyWait достигает этого, поддерживая поток горячей клавиши в состоянии выполнения
; и полагаясь на то, что #MaxThreadsPerHotkey (максимальное количество потоков
; для горячей клавиши) имеет своё значение по умолчанию 1.
; Замечание: существует более проработанный скрипт, различающий одиночные, двойные
; и тройные нажатия, он приведён в конце страницы с описанием SetTimer.
~RControl::
if (A_PriorHotkey <> "~RControl" or A_TimeSincePriorHotkey > 400)
{
    ; Слишком большой промежуток между нажатиями, так что это не двойное нажатие.
    KeyWait, RControl
    return
}
MsgBox Вы дважды нажали правый Control.
return

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.