Вопрос или проблема
ОБНОВЛЕННОЕ ЗАЯВЛЕНИЕ: 20181102@112800@SUN Создано сообщение
ОБНОВЛЕННОЕ ЗАЯВЛЕНИЕ: 20181104@133200@TUE Предложен код предварительного условия, который работал недолго
ОБНОВЛЕННОЕ ЗАЯВЛЕНИЕ: 20190101@184318@TUE Код предварительного условия больше не работает в csgo и никогда не работал с kf2, поэтому мне нужна помощь с другим решением, почему он не работает, возможно, произошло обновление, которое мешает его работе с csgo
win10_v1803.17134.345_home
autohotkeyahk_v1.1.30.00
Как удерживать W, удерживая XButton1 на Logitech G502 с помощью AutoHotKey? Проблема в том, что при удерживании клавиши со скриптом ниже она просто отправляет один выходной сигнал и не воспроизводит типичное поведение Windows, что действительно удерживает его (см. ниже пример). Имейте в виду, что, хотя я сознательно использую его для игры в FPS, глобальное переназначение значительно проще, чем включение каждой игры, в которую я случайно играю, в часть изменения кнопок управления LogitechG502.
Я думаю, что это круто, двигаться вперед в игре, держа другой рукой горячие чипсы Cheetos
Сделают ли предложения здесь игры хотеть измениться?
Зависимые ли игры теперь оттого, что знают, какие клавиши нажимают их пользователи?
ПРОБЛЕМА
- У меня нет способа переназначить
XButton1
на моем LogitechG502, чтобы имитировать удержаниеw
- команда ahk-while работает, но ведет себя неправильно и действует как быстрое нажатие-отпускание-нажатие-отпускание, даже когда замедлена с помощью ahk-sleep
- см. ниже решение по настройке нескольких команд ahk для переназначения XButton1 на w для перемещения вперед в игре
РЕШЕНИЕ
- Пока нет
- Код, предложенный user3419297, больше не работает после обновления csgo, которое было актуально для этого поста
ПРИМЕР
- Не работает:
XButton1::SendInput, w ; кнопка мыши назад как движение вперед в игре
- Удерживая 3 секунды, XButton1 (с верхним скриптом) дает мне:
w
- Удерживая 3 секунды, w дает мне:
wwwwwwwwwwwwwwwwwwwwwwwwww
- Удерживая 3 секунды, XButton1 (с верхним скриптом) дает мне:
- Работает, но неправильное использование переключения (или быстрое повторение нажатия W):
- неправильно имитирует удержание
w
, так как этот метод слишком быстрый повтор даже при замедлении с помощью ahk-sleep
- неправильно имитирует удержание
$XButton1:: while GetKeyState("XButton1", "P") Send w return
- Работает, но больше нет
- Этот код предварительного условия больше не работает после 2 месяцев использования, возможно, из-за обновления csgo, так как у меня нет другого шутера от первого лица, чтобы его протестировать
#NoEnv #SingleInstance Force #InstallKeybdHook #InstallMouseHook #UseHook #If WinActive ahk_exe csgo.exe || WinActive ahk_exe game2.exe || WinActive ahk_exe game3.exe XButton1::w #IfWinActive
Это должно работать:
; максимальное количество горячих клавиш, которые могут быть нажаты в течение 2 секунд (по умолчанию скорость активации горячих клавиш)
; без вызова предупреждающего диалога:
#MaxHotkeysPerInterval 10000
$XButton1::
while GetKeyState("XButton1", "P")
{
Send w
Sleep 20 ; мс или больше, если вы хотите уменьшить частоту команды отправки
}
return
Не протестировано.
https://autohotkey.com/docs/commands/While.htm
https://autohotkey.com/docs/commands/_MaxHotkeysPerInterval.htm
Попробуйте также переназначение:
#NoEnv
#SingleInstance Force
#InstallKeybdHook
#InstallMouseHook
#UseHook
#IfWinActive Название моей игры
XButton1::w
#IfWinActive
Замените Название моей игры
на точное название окна игры, как показано в Window Spy.
https://autohotkey.com/docs/commands/_IfWinActive.htm
РЕДАКТИРОВАТЬ:
Вы можете использовать директиву #If- или #IfWinActive-, чтобы создать чувствительные к контексту горячие клавиши для более чем одного приложения/окна:
#If WinActive("Название моей игры1") || WinActive("Название моей игры2") ; "||" означает "ИЛИ"
XButton1::w
XButton2::x
#If WinActive("Название моей игры3")
XButton1::a
XButton2::b
#If ; отключить чувствительность к контексту
; Во всех остальных приложениях/окнах вы можете сделать так, чтобы XButton1 и XButton2 делали что-то другое, например:
XButton1:: Send ^c ; копировать
XButton2:: Send ^v ; вставить
XButton1::
;ToolTip, XButton1 down
SendInput {w down}
Return
XButton1 Up::
SendInput {w up}
;ToolTip, XButton1 up
Return
+это работает! другие скрипты не действовали. попробуйте это сначала, если вы видите этот пост в настоящее время. дайте мне знать, если он не работает, и я разберусь, в чем дело… Проверьте объяснение ниже—
-Строка “XButton1::” определяет горячую клавишу для XButton1, который является одной из боковых кнопок на мыши. Это означает, что следующие строки до Return будут выполняться, когда XButton1 нажат. -Строка “SendInput {w down}” вызывает событие нажатия “w”, выполняя запрос OP о нажатии клавиши (сначала отправляя событие нажатия w), без отправки соответствующего события отпускания, если вы просто нажмете “SendInput w”. С “down” клавиша удерживается, пока не будет отправлено “up”. -Строка “Return” завершает горячую клавишу для XButton1.
-Строка “XButton1 Up::” определяет горячую клавишу, которая срабатывает, когда XButton отпущен (поднимается). -Строка “SendInput {w up}” отправляет событие отпускания клавиши для клавиши w. Поскольку это связано с горячей клавишей “XButton1 up”, это значит, что горячая клавиша выполняет запрос OP о использовании кнопки мыши для удержания другой клавиши. -Строка “Return” завершает горячую клавишу “XButton1 Up”. +”;ToolTip” строки являются комментариями, которые я мог бы удалить, но полезно раскомментировать их и увидеть, что всплывающие подсказки активируются при нажатии и отпускании XButton1.
Вы можете изменить “XButton1” и “w” на другие клавиши, чтобы достичь нужного вам эффекта.
.
Ответ или решение
Вопрос о том, как удерживать клавишу "w" при нажатии XButton1 на мыши Logitech G502 с помощью AutoHotKey, особенно актуален для геймеров, которые используют такие скрипты для управления в играх. Основная проблема, с которой сталкивается пользователь, заключается в том, что простой скрипт AHK производит только один выходной сигнал вместо удержания клавиши, как это обычно происходит в Windows. Это может быть особенно неудобно в играх, таких как Counter-Strike: Global Offensive (CS:GO) или Killing Floor 2, где постоянное движение вперёд может улучшить игровые показатели.
Теория
AutoHotKey (AHK) — это мощный инструмент для автоматизации задач, что позволяет создавать макросы и привязать горячие клавиши для специфичных функций. Основной функционал заключается в перехвате сигналов клавиатуры и мыши и выполнении заданных действий.
При разработке автоклавиатурных макросов для игр через AHK важно понимать, что игры с соревновательным многопользовательским элементом, такие как CS:GO, могут изменять свою обработку ввода после обновлений, что и приводит к сломам существующих скриптов. Игры могут распознавать макросы и изменять способ обработки сигналов, чтобы предотвратить использование подобного ПО с рядом ограничений.
Пример
Рассмотрим предложенное решение проблемы. Пример кода:
XButton1::
SendInput {w down}
Return
XButton1 Up::
SendInput {w up}
Return
Этот скрипт работает, потому что он «захватывает» состояние кнопки XButton1 мыши. Когда кнопка нажата, отправляется сигнал на удержание клавиши "w". Когда кнопка отпускается, отправляется сигнал отпускания клавиши "w". Такой подход имитирует естественное удержание клавиши.
Применение
-
Кодирование и тестирование скрипта:
- Убедитесь, что версия вашей операционной системы Windows и AHK обновлены.
- Убедитесь, что скрипт запускается с достаточными разрешениями, так как некоторые игры могут требовать административного доступа для корректного захвата сигналов.
-
Настройка контекста:
- Используйте директиву
#IfWinActive
для ограничения действия скрипта только на нужные приложения. Это гарантирует, что ваш скрипт будет работать только внутри активного окна игры, таким образом предотвращая нежелательные действия вне игры.
- Используйте директиву
#IfWinActive ahk_exe csgo.exe
XButton1::SendInput {w down}
XButton1 Up::SendInput {w up}
#IfWinActive
-
Проверка совместимости:
- После внедрения скрипта протестируйте его в игре. Обратите внимание на поведение персонажа и любые возможные задержки или лаги, которые могут возникнуть из-за выполнения скрипта.
-
Обход игры:
- Разработчики игр могут вводить средства для обнаружения использования скриптов, так что будьте осторожны и следите за изменениями в политике использования игр, особенно в соревновательных онлайн-играх.
-
Отладка и корректировка:
- Если скрипт перестает работать после обновлений игры, возможно, стоит проанализировать изменения, введенные обновлением, и соответственно адаптировать скрипт.
Заключение
Создание эффективных скриптов в AutoHotKey для игр требует понимания как основной логики работы AHK, так и особенностей работы системных и игровых ограничений. Успешная автоматизация удержания клавиши "w" на примере Logitech G502 может значительно улучшить опыт игры, когда одна рука игрока занята. Однако, важно помнить о моральных и этических аспектах использования таких скриптов в многопользовательских играх. В некоторых случаях это может рассматриваться как нарушение правил использования, за что грозят наказания со стороны разработчиков игр. Всегда учитывайте обновления и изменения в политике игр, чтобы избежать нежелательных последствий.