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

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

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

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

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

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

GetKeyState

Определяет состояние (нажата или отпущена) для клавиши клавиатуры или кнопки мыши/джойстика. Также определяет положение джойстика.

GetKeyState, OutputVar, KeyName [, Mode]
KeyIsDown := GetKeyState("KeyName" [, "Mode"])

Параметры

OutputVar Имя переменной, куда будет помещено состояние клавиши: для нажатой в переменную будет записана буква D, для отпущенной - U (однако функция GetKeyState() возвращает 1 для нажатой и 0 для отпущенной). Переменная будет пустой, если состояние клавиши получить не удалось.

Нижеследующие пункты относятся только к джойстикам.

1) Для оси джойстика, например, JoyX, в OutputVar будет записано число с плавающей точкой от 0 до 100, показывающее позицию джойстика в процентах от полного диапазона движения этой оси. Формат числа можно изменить через SetFormat.

2) Когда KeyName задан как JoyPOV, возвращённое значение будет между 0 и 35900. Следующие примерные значения POV используются многими джойстиками:

-1: нет угла
0: передний POV
9000 (т.е. 90 градусов): правый POV
27000 (т.е. 270 градусов): левый POV
18000 (т.е. 180 градусов): задний POV

KeyName Может быть практически любым одиночным символом с клавиатуры или одним из имён из списка клавиш и кнопок клавиатуры и мыши/джойстика (хотя состояние кнопки мыши обычно не может быть определено под Windows 95/98/Me). Примеры: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.

Кроме того, может быть указан код виртуальной клавиши, например, vkFF. Это может быть полезно в тех редких случаях, когда клавиша не имеет имени. Как определить код виртуальной клавиши, показано в конце страницы со списком имён клавиш и кнопок.
Mode Режим. Этот параметр игнорируется при определении положения джойстика.

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

Возможные значения:

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

T: Определяется включенность/выключенность клавиши (для CapsLock, NumLock, ScrollLock и Insert). Возвращённое значение D означает, что клавиша включена, U - выключена (однако функция GetKeyState() возвращает 1 и 0 соответственно).

Определение включенности для Insert, возможно, будет работать только под Windows 2000/XP или более поздней.

В Windows 9x определение включенности работает менее надёжно. Например, сразу после нажатия клавиши её состояние может определяться неверно, до тех пор, пока не будет показано какое-либо из связанных со скриптом окон, такое как MsgBox.

Примечания

Ожидание нужного состояния клавиши или кнопки мыши/джойстика обычно проще реализовать через команду KeyWait, нежели чем использовать GetKeyState в цикле.

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

Примеры использования GetKeyState с джойстиком смотрите на странице, где описаны переназначения кнопок джойстика, а также в скрипте Joystick-To-Mouse.

Примеры

; Элементарные примеры:
GetKeyState, state, RButton  ; Правая кнопка мыши.
GetKeyState, state, Joy2  ; Вторая кнопка первого джойстика.

GetKeyState, state, Shift
if state = D
    MsgBox Нажата по крайней мере одна клавиша Shift.
else
    MsgBox Ни одна клавиша Shift не нажата.

GetKeyState, state, CapsLock, T ;  D, если CapsLock включён, иначе U.
state := GetKeyState("Capslock", "T")  ; True, если CapsLock включён, иначе False.

; Пример переназначения (только для иллюстрации, поскольку на практике
; проще использовать встроенную возможность переназначения).
; В следующей комбинации кнопка мыши удерживается нажатой, пока нажат
; NumpadAdd (цифровой плюс), что фактически превращает NumpadAdd
; в кнопку мыши. Этот метод также может использоваться для посылки
; повторяющихся действий, пока пользователь удерживает клавишу или кнопку.
*NumpadAdd::
MouseClick, left,,, 1, 0, D  ; Удерживать нажатой левую кнопку.
Loop
{
    Sleep, 10
    GetKeyState, state, NumpadAdd, P
    if state = U  ; Клавиша отпущена, поэтому выйти из цикла.
        break
    ; ... какие-нибудь ещё действия, которые должны повторяться.
}
MouseClick, left,,, 1, 0, U  ; Отпустить кнопку мыши.
return

; Этот пример меняет поведение кнопки джойстика в зависимости от позиции
; по оси Х.
joy2:: 
GetKeyState, joyx, JoyX 
if joyx > 75 
    MsgBox Действие №1 (кнопка нажата, когда джойстик сдвинут вправо).
else if joyx < 25 
    MsgBox Действие №2 (кнопка нажата, когда джойстик сдвинут влево).
else
    MsgBox Действие №3 (кнопка нажата, когда джойстик в центре по горизонтали).
return

; Смотрите другие примеры на странице, где описаны переназначения кнопок
; джойстика, а также в скрипте Joystick-To-Mouse.

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

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