1 (изменено: nahewid601, 2022-02-20 19:14:49)

Тема: AHK: отвязка дефолтных клавиш в компьютерных играх

Всем привет! Наверное, многие играли в компьютерные игры и знают, что в них (иногда) предоставляется возможность настроить управление. Которая заключается в том, что игроку предоставляют возможность выбрать клавиши, которые будут назначены на определенные действия в игре. Будут, так сказать, привязаны к этим действиям. А действия будут привязаны к клавишам. По-английски это называется bind (или binding - привязывание, привязка, иногда еще говорят bound, означает то же самое).

Однако в некоторых случаях оказывается, что я не могу назначить на данное действие нужную мне кнопку. Скажем, я хочу привязать кнопку мыши к данному действию. А игра позволяет привязать к нему только кнопки клавиатуры. Короче, выбирать можно только из кнопок клавиатуры.
В этих случаях очень полезным оказывается использование AHK: очень уж он выручает в таких случаях. Скажем, в игре я назначаю на данное действие некоторую кнопку клавиатуры (часто - произвольную). А затем в AHK пишу скрипт, чтобы нажатие кнопки мыши перенаправлялось именно на эту кнопку.

Например, очень часто управление движением в играх назначается на wasd. Поменять его возможно, но только на другие клавиши клавиатуры. А мне нравится движение вперед делать по правой кнопке мыши. Тогда мне достаточно оставить привязку клавиши w к этому действию, как есть, т.е. по дефолту или по умолчанию. А в скрипте AHK нажатие правой кнопки мыши переназначить на w.

Однако очень часто так бывает, что невозможность переназначить кнопку мыши вовсе не случайна, а вызвана тем, что к ней по умолчанию и так уже что-то привязано, какое-то действие, причем, эту связь разорвать невозможно: игра не предоставляет такой возможности. Соответственно, если запустить скрипт, он, конечно, будет работать, "нажимая" на w, но то второе действие, которое привязано к мыши по умолчанию, также будет выполняться.

Возникает задача как-нибудь разорвать эту связь. В некоторых случаях эта задача решается, в других - нет. Всё зависит от игры, и решение если и существует, то ad hoc. Хотелось бы найти какое-нибудь общее решение. И мне интересно, можно ли решить эту задачу с помощью AHK. Я имею в виду, binding эта программа делать позволяет. А сможет ли она сделать unbinding, т.е. решить обратную задачу?

В интернете на эту тему практически ничего не нашлось. На сайте autohotkey.com кто-то задавал такой вопрос. Но вопрошающий не смог толком объяснить, чего он хочет. А отвечающий не понял вопроса.
Unbind a key?

2

Re: AHK: отвязка дефолтных клавиш в компьютерных играх

Иногда игры перехватывают клавиши на низком уровне и АХК по умолчанию это преодолеть может лишь используя такой же подход. Проверьте как себя ведёт скрипт при запуске от администратора. Использовать другие методы в онлайн играх опасно - могут забанить.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: отвязка дефолтных клавиш в компьютерных играх

__Михаил__, нет, не сработало! Возможно, конечно, я что-то не так делаю. Скрипт ahk - это ведь не исполняемая программа, а некий файл вида AutoHotkey.ahk. Если щелкнуть по нему дважды, вызывается программа Autohotkey.exe. Короче, мне пришлось запустить Autohotkey.exe от имени администратора, а тот скрипт, который при этом вызывается по умолчанию, заменить на свой. Потому что загрузить свой скрипт в вызванную таким способом программу не получается.

Но всё равно, даже так не сработало. Может, еще будут варианты? Если честно, не верится, что с такой проблемой никто, кроме меня, не сталкивался.

Что касается онлайновых игр, мне так кажется, там обычно дают возможность сделать любые настройки. Проблемы как правило возникают в "старых" (ретро) играх. Так или иначе, но бан меня не пугает. Мне сейчас интересно, есть ли принципиально такая возможность у AHK, или нет. А если нет, возможно, есть какая-то другая программа? Специально для unbinding'а.

4 (изменено: __Михаил__, 2022-02-20 21:04:24)

Re: AHK: отвязка дефолтных клавиш в компьютерных играх

Конечно были проблемы с играми не только у вас одного. Мне сохранить аккаунт в игре было важнее, поэтому копать глубже уже не стал в своё время.
Как вариант проверьте ещё 'Run with UI Access' - в соседней теме этого было достаточно.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5

Re: AHK: отвязка дефолтных клавиш в компьютерных играх

__Михаил__, спасибо, конечно. Просто это не то, что я надеялся услышать. Я ожидал что-нибудь вроде: конечно, это давно известная всем проблема. Общепринято решать ее вот так. (И ссылка на тему с подробным описанием решения. ) А не так, что, мол, не знаю, не пробовал. Попробуйте - вдруг получится.
Ладно, может, еще кто-нибудь ответит.

Если, что мой скрипт выглядит так:
#If WinActive("ahk_exe SILENT HILL 4.exe")
RButton::w
return

Там всего три строчки. Но, быть может, надо переписать его как-нибудь по-другому? Например, с использованием какой-нибудь команды Raw.
Их там целая куча, вроде бы:
(https://www.script-coding.com/AutoHotkey/Send.html)
Send Keys
SendRaw Keys
SendInput Keys
SendPlay Keys
SendEvent Keys

Я просто не особо в этом разбираюсь. Ладно, может, еще кто-нибудь ответит.

6 (изменено: __Михаил__, 2022-02-20 21:41:19)

Re: AHK: отвязка дефолтных клавиш в компьютерных играх

Команда 'Send' отправляет в окно, а вам нужен перехват ПКМ, это не то.
Ещё в этой теме посмотрите, может что поможет.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101