autohotkeyahk | удерживая кнопку мыши, чтобы держать другую клавишу?

537
fohrums
win10_v1803.17134.345_home autohotkeyahk_v1.1.30.00 

Как удерживать w при удерживании XButton1 на Logitech G502 с помощью AutoHotKey? Проблема в том, что, удерживая клавишу с помощью скрипта ниже, он просто отправляет один вывод и не производит типичное поведение Windows, которое действительно его удерживает ( см. Ниже, например ). Имейте в виду, что только потому, что я намеренно использую это для игр в fps, но глобально переназначить это гораздо проще, чем включить каждую игру, в которую я играю, чтобы участвовать в изменении кнопок управления LogitechG502.

Я думаю, что это здорово - продвигаться вперед в игре, хватая горячие чипсы другой рукой

ПРОБЛЕМА

  • У меня нет возможности переназначить XButton1на LogitechG502 для репликации холдингаw
    • Команда ahk-while работает, но не ведет себя должным образом и действует очень быстро, как пресс-релиз-пресс-релиз, даже при замедлении с использованием ahk-sleep
    • см. ниже решение по настройке нескольких команд ahk для переназначения XButton1 LogitechG502 в w для продвижения вперед во время игры

РЕШЕНИЕ

  • Этот обязательный код ведет себя правильно, но должен быть определен согласно gametitle( только если был способ глобально переназначить его ). Мало того, но не работает для всех игр, таких как Killing Floor 2, так как Counter-Strike Global Offensive csgo работает до сих пор.
#NoEnv #SingleInstance Force #InstallKeybdHook #InstallMouseHook #UseHook #IfWinActive Название моей игры XButton1 :: ш #IfWinActive

ОБРАЗЕЦ

  • не работает: XButton1::SendInput, w ; mouse advanced button back as holding forward in-game
    • Удерживая в течение 3 секунд, XButton1 ( со сценарием выше ) дает мне:w
    • Проведение в течение 3-сек, вес дает мне:wwwwwwwwwwwwwwwwwwwwwwwwww
  • worksbuttoofast:
$ XButton1 :: while GetKeyState ("XButton1", "P") Отправить вернуть
  • не воспроизводит удержание wдолжным образом, так как этот метод намного быстрее повторения, даже если его замедляет ахк-сон
1
Непонятно в чем ваша проблема и решение. harrymc 6 лет назад 0
Проблема заключается в том, что предлагаемый ответ @ user3419297, выполняет работу, фактически удерживая w, но это слишком быстро и неправильно копирует, как окно удерживает клавишу. fohrums 6 лет назад 0

2 ответа на вопрос

2
user3419297

Это должно работать:

; maximum number of hotkeys that can be pressed within 2 seconds (default rate of hotkey activations) ; without triggering a warning dialog: #MaxHotkeysPerInterval 10000  $XButton1:: while GetKeyState("XButton1", "P") { Send w Sleep 20 ; ms or more if you want to reduce the frequency of the send command  } return 

Непроверенные.

https://autohotkey.com/docs/commands/While.htm

https://autohotkey.com/docs/commands/_MaxHotkeysPerInterval.htm

Протестировано работает, но это действительно быстро, и замена `Send` на` SendInput` еще быстрее. Это не то же самое поведение, что и удержание `w`. Я также не понимаю причину линии знака фунта с интервалом `10000`. fohrums 6 лет назад 0
Вы можете уменьшить частоту отправки команды в цикле, добавив в нее режим ожидания (время до повтора команды отправки). Смотрите отредактированный ответ. user3419297 6 лет назад 0
Это помогает быть быстрым, но при тестировании в игре я получаю действие movefoward-stop-moveforward-stop. ** Это не правильный тип поведения ** я ищу. Может быть, дело не в «ах-пока», а, возможно, в способе просто удерживать клавишу? fohrums 6 лет назад 0
2
user3419297

Попробуйте также переназначение :

#NoEnv #SingleInstance Force #InstallKeybdHook #InstallMouseHook #UseHook  #IfWinActive Title of my game  XButton1::w  #IfWinActive 

Замените Title of my gameна точное название игрового окна, как показано в Window Spy.

https://autohotkey.com/docs/commands/_IfWinActive.htm

РЕДАКТИРОВАТЬ:

Вы можете использовать директиву # If- или # IfWinActive для создания контекстно-зависимых горячих клавиш для более чем одного приложения / окна:

#If WinActive("Title of my game1") || WinActive("Title of my game2") ; "||" means "OR"  XButton1::w XButton2::x  #If WinActive("Title of my game3")   XButton1::a XButton2::b  #If ; turn off context sensitivity  ; In all other applications/windows you can make XButton1 and XButton2 to do something else, e.g.:  XButton1:: Send ^c ; copy XButton2:: Send ^v ; paste 

https://autohotkey.com/docs/commands/_If.htm

Это работает, но я хотел избежать необходимости реализовывать название игры и создавать несколько одинаковых кодов для каждого `(gametitle)`. Значит, нужны строки со знаком фунта, включая последнюю строку `# ifwinactive`? fohrums 6 лет назад 0
Смотрите РЕДАКТИРОВАТЬ в моем ответе. user3419297 6 лет назад 0