1

Тема: Half-Life\Sven Coop: Bhop, игнор. работы кода на другие кнопки.

Доброго времени суток.

Есть код:

*space::
Loop
{
GetKeyState,state,space,P
if state = U
break

Send,{space}
Sleep,20
; memez
}
return

При нажатии на клавишу пробел он продолжает её нажимать с периодом в Sleep,20. Это именно то, что мне нужно. Однако, при той же нажатой клавише пробел, если зажать ctrl (или caps lock или alt) он выполняет ту же команду к этой клавише.

Для примера - игры в заголовке. Нажимая пробел идёт распрыг, но когда в распрыжке нужно где-то быстро присесть (ctrl), чтобы пролететь под препятствием, персонажа начинает дико трясти, т.к. приседание само себя быстро нажимает. В настройках поставил другую буквенную кнопку ( Z для примера), но т.к. руки уже давно привыкли, что приседание это ctrl, в нужный момент на большой скорости нажать на Z не получается (да и переучиваться не горю желанием).

Отсюда вопрос: как сделать код так, чтобы при нажатой клавише пробел он игнорировал скрипт к ctrl (и другим перечисленным выше кнопкам).

Спасибо.

2 (изменено: stealzy, 2017-10-03 23:08:24)

Re: Half-Life\Sven Coop: Bhop, игнор. работы кода на другие кнопки.

Команда Send устроена так, что по-умолчанию она игнорирует любые зажатые клавиши в течении отправки.

ToolTip Зажми шифт на клавиатуре
KeyWait Shift, D
ToolTip
Send Если бы шифт был зажат с точки зрения ОС при отправке сообщения от Send, то все буквы этого сообщения были бы большими: {vk51}{vk57}{vk45}{vk52}{vk54}{vk59}.

Если подумать, то возникает интересный вопрос: каким образом это работает с точки зрения ОС? Ведь она ничего не знает про команду Send в ahk.
На мой взгляд происходит приблизительно так: нажатые клавиши виртуально отжимаются перед командой Send, а после зажимаются обратно, если, конечно, они все еще нажаты физически. С точки зрения игры это будет означать повторное нажатие зажатых клавиш.

Но, к вашему счастью у команды Send есть опция отключения данной фичи для клавиш-модификаторов. Что это за опция вы можете прочесть в справке, в том числе и русской.
В каком-то смысле роль этой опции аналогична роли * в вашей горячей клавише *space::.

3 (изменено: ShponglE, 2017-10-04 01:34:39)

Re: Half-Life\Sven Coop: Bhop, игнор. работы кода на другие кнопки.

Спасибо за ответ.
Откровенно говоря - я полный профан в скриптах.
Я попытался поискать в справке (кстати, в Вашей подписи справка не рабочая (не открывает ссылки)) отключение клавиш-модификаторов (и иные интерпретации предложения, в т.ч. и в гугле), но либо я не нашёл, либо большинство не понял.
Не могли бы вы, пожалуйста, по моему примеру составить код так, чтобы при нажатой клавише пробел, он игнорировал другие клавиши-модификаторы. Буду очень признателен!

4 (изменено: stealzy, 2017-10-04 01:58:55)

Re: Half-Life\Sven Coop: Bhop, игнор. работы кода на другие кнопки.

ShponglE пишет:

справка не рабочая (не открывает ссылки)

Какие ссылки? Поиск работает, содержание тоже.
В статье по Send смотрите опцию Blind. Или погуглите: autohotkey send blind.

5 (изменено: ShponglE, 2017-10-05 01:16:55)

Re: Half-Life\Sven Coop: Bhop, игнор. работы кода на другие кнопки.

stealzy пишет:

Какие ссылки? Поиск работает, содержание тоже.

https://imgur.com/a/hNxqn (ссылка на скрин).

Спасибо, но я нашёл готовый скрипт, который был мне нужен:

*~$Space::
Loop
{
    GetKeyState, SpaceState, Space, P
    If SpaceState = U
  break  
    Sleep 20
    Send, {Blind}{Space}
}
Return

Спасибо! Всего доброго!

6

Re: Half-Life\Sven Coop: Bhop, игнор. работы кода на другие кнопки.

Ну так вы и используете {Blind} теперь, поздравляю!
По поводу справки — вас что-то в ОС поломано, потому что у всех остальных она нормально работает. Наверняка и с другими справками .chm у вас теже проблемы.