Вы проверили, перезапускали ли вы скрипт после внесения изменений?Это очень распространенная ошибка не только среди начинающих.В соответствии с вашим примером ваши ключи Z
.. V
должны вести себя как F1
.. F4
только при выключенном NumLock
.
Учитывая природу вашего скрипта, выможно добавить директиву #SingleInstance Force
, которая будет автоматически заменять любой старый экземпляр вашего скрипта на новый каждый раз, когда вы снова запускаете скрипт, что упрощает тестирование.
Вы можете легко выполнить условное связывание с помощью директивы #if
, которая делает последующие горячие клавиши и горячую строку эффективными только при выполнении условия.
Чтобы проверить состояние CapsLock или NumLockклавишами вы также можете использовать встроенную функцию GetKeyState
, которая для клавиш переключения, таких как CapsLock
или NumLock
, в режиме "T"
возвращает значение True или False в зависимости от переключателясостояние клавиши.
Кроме того, если вы хотите переназначить клавиши, вы можете просто написать имя целевой клавиши справа от горячей клавиши, которая будет полностью связывать клавиши, как в событиях Down, так и Up.Однако, чтобы это работало, вы должны указать свои триггерные клавиши в нижнем регистре, так как указание верхнего регистра будет запускать переназначение только при нажатии клавиш с клавишей Shift (CapsLock не будет иметь никакого эффекта), и это не ваше желаемое поведение,[ Подробнее о переназначении клавиш ]
Вот пример того, что вы можете сделать:
#If GetKeyState("CapsLock", "T")
z::F1
x::F2
c::F3
v::F4
Обратите внимание, что, поскольку переназначение клавиш всегда использует хук клавиатуры (потому чтоон также должен регистрировать события Up), нет необходимости использовать префикс $
в ваших горячих клавишах.
Тем не менее, вы можете еще больше автоматизировать ваш скрипт, если вы используете какукажите для ваших горячих клавиш текущее активное окно и свяжите их с вашей игрой, используя директиву #IfWinActive
.
Однако, если в игре есть чаты, вы можете объединить оба условияв одном #If
, используя встроенную функцию WinActive
следующим образом:
#If GetKeyState("CapsLock", "T") and WinActive("My Game Title")
z::F1
; ...
Вы можете проверить, как сузить поиск окна по его заголовку на документация для параметра WinTitle .
Если вы хотите еще больше улучшить свой сценарий, вы можете узнать, есть ли какие-либо обнаруживаемые изменения в окне игры, когда чат активен,например, если переменного токаДля этого существует определенный контроль (вы можете проверить, как если бы это было другое окно, используя функцию WinExist
для проверки определенного класса окна.
Чтобы искать такие изменения, вы можете использоватьСценарий выглядит следующим образом (из документации MouseGetPos ):
#Persistent
SetTimer, WatchCursor, 100
return
WatchCursor:
MouseGetPos, , , id, control
WinGetTitle, title, ahk_id %id%
WinGetClass, class, ahk_id %id%
ToolTip, ahk_id %id%`nahk_class %class%`n%title%`nControl: %control%
return
, который позволит вам видеть информацию об окнах под мышью.Вы можете использовать его для проверки имени или класса элемента управления чата, наведя на него указатель мыши.
Однако имейте в виду, что многие игры вообще не используют элементы управления Windows в своих интерфейсах, а просто рисуютони отображаются на экране сами по себе, поэтому, если вы пытаетесь это сделать и не можете добиться значительных успехов через некоторое время, вам не следует тратить на это слишком много времени, а скорее наслаждайтесь игрой со своим переключателем CapsLock
.
Еще один хитрый способ проверить, активен ли чат, - это найти изображение на экране или цвет пикселя, используя ImageSearch
или намного проще PixelGetColor
, но выможет сделать это, только если интерфейс вашей игры не очень сложный / анимированный.