Нужна помощь в написании скрипта? Close

Вы можете задать любой вопрос по программе Autohotkey в нашей группе Вконтакте. Если решение требует более высокой квалификации- можно обратиться непосредственно ко мне.

ВконтактеГруппа Вконтакте Электронная почтаЭлектронная почта Личная страницаСимаков Яков ВК
home icon Все разделы
comunity icon Нужна помощь?

GetKeyState -Autohotkey

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

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 Может быть практически любым одиночным символом с клавиатуры или одним из имён из списка клавиш и кнопок клавиатуры и мыши/джойстика. Примеры: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.

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

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

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

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

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

Примечания

Ожидание нужного состояния клавиши или кнопки мыши/джойстика обычно проще реализовать через команду 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.
Автор перевода: YMP
Настоящее имя переводчика: Юрий Попов
Источник: http://www.script-coding.com/AutoHotkey/GetKeyState.html
Под редакцией ahk-wiki.ru от 21.08.19