1

Тема: AHK: Зажатие клавиши по зажатию другой клавиши.

Здравствуйте. Возникла необходимость сделать макрос, который по зажатию клавиши , к примеру "Пробел", эмулировал зажатие другой клавиши, к примеру "Правый Cntrl".
Основная проблема этого этой задачи, что AHK не отслеживает состояние клавиши, как это происходит в высокоуровневых языках программирования, из чего возникает проблема, что зажатие клавиши один раз отслеживается, а вот если отжать и еще раз зажать, то скрипт по сути ломается, так как отжатие не регистрируется.
Решение этой задачи требует определенных костылей. А вот каких именно, знать мне отсутствие опыта не позволяет.

Пожалуйста, помогите.

2

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

Должен уточнить, что варианты с таймерами - идея не очень хорошая. Так как, время на которое будет зажиматься клавиша может быть от 30 миллисекунд до 1 секунды. И реакция на отжатие должна быть с минимальной задержкой.

3 (изменено: __Михаил__, 2022-05-22 14:59:27)

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

Ничего не понятно, что не выходит сделать? У меня нормально зажимает 'RCtrl':

*Space:: Send, {vkA3 Down}
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

4

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

__Михаил__
Уважаемый, вы вообще шапку поста читали, или ограничились заглавием?

5 (изменено: alterdranser, 2022-05-22 15:51:48)

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

Для тех, кто будет в будущем заглядывать сюда, поясняю.

Если использовать стандартную функцию Send, {Key Down}, то в эта команда срабатывает 1 раз и навсегда. Отжав кнопку, макрос все еще будет считать, что клавиша зажата. По этому я и уточняю, что AHK не отслеживает отжатие клавиш.

6

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

AHK и не должен сам по себе ничего отслеживать. Отслеживает конкретный код, но код вы не написали, так что и сказать ничего конкретного нельзя.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

Ну раз нормально описать суть сразу не можете, то и ответа не будет.

*Space:: Send, % "{Rctrl " (S ? "Up":"Down", S := !S) "}"
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

8

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

teadrinker
В скриптовых языках, увы да. По этому я и задаю вопрос.

9 (изменено: alterdranser, 2022-05-22 16:11:31)

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

Ладушки, сделаю еще более подробное объяснения, а то ведь опытным людям нынче все разжевывать надо. Хотя новичок тут вроде бы я.

И так. Есть условие "Зажата клавиша Пробел", в случае если это условие верно (то есть клавиша зажата), то нужно "Зажать клавишу RCntrl"
Однако же, возникает вопрос, что будет если отпустить пробел? AHK никак не отреагирует, поскольку нельзя задать условие if (Key Up), синтаксис не позволяет.
В то время как в нормальных языках, можно написать конструкцию

if (Input.GetKeyUp) {
	// Событие отжатия ранее нажатых клавиш
}

Так вот мне нужно, что бы при нажатии Пробела нажималась другая кнопка. А при отжатии отжималась та самая другая кнопка.

10 (изменено: ypppu, 2022-05-22 16:12:49)

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

alterdranser пишет:

AHK не отслеживает состояние клавиши

Есть такая возможность. Пример кода:

1 up::Soundbeep

- срабатывает только на отпускание клавиши.
Добавлено:
В любой момент можно проверить состояние клавиши командой GetKeyState.

11

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

ypppu
Попробую сейчас. Однако вроде бы такие выкрунтасы вызывали ошибки.

12

Re: AHK: Зажатие клавиши по зажатию другой клавиши.

ypppu

Проверил, на удивление сработало как надо. Видимо с синтаксисом была ранее заминка. Благодарю