1 (изменено: araks, 2022-08-05 19:37:54)

Тема: AHK: модифицированная клавиша в любых комбинациях

Здравствуйте.
У меня есть такой код:

>!sc17::Send {vk26} ; RAlt + i => up

Как сделать чтобы это сочетание всегда работало как стрелка вверх, в том числе с другими модификаторами?

Например при нажании RShift + RAlt + i срабатывало Rshift + Up.

2 (изменено: araks, 2022-08-05 19:38:23)

Re: AHK: модифицированная клавиша в любых комбинациях

Чтобы моя команда всегда была клавишей Up.
Например:
RAlt + i сработало как Up.
Shift + RAlt + i сработало как Shift +Up.
Ctrl + Shift + RAlt + i сработало как Ctrl + Shift +Up.
Ctrl + Shift + LAlt + RAlt + i сработало как Ctrl + Shift + LAlt +Up.
Т.е. с любыми комбинациями.

3

Re: AHK: модифицированная клавиша в любых комбинациях

araks, добро пожаловать на форум! Ознакомьтесь, пожалуйста, с Правилами, отредактируйте свои посты. Обратите внимание на точки в конце предложений.

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

4

Re: AHK: модифицированная клавиша в любых комбинациях

teadrinker Здравствуйте. Ознакомился. Точки расставил.

5

Re: AHK: модифицированная клавиша в любых комбинациях

Мудрить надо какую нибудь муть.

Prefix := {"^":"Ctrl","+":"LShift","!":"Alt","#":"Win"}
 
*>+vk49::
	P := ""
	for k, v in Prefix {
		P .= GetKeyState(v, "P") ? k : ""
	}
	SendInput %P%{Up} 
	Return

Работает кое как, это вам скорее для примера.
Вместо RAlt  стоит RShift. С RAlt часто проблемы.

Тут вопрос возникает где в справке написано что это не должно работать:

*>!i:: Send {Blind}{Up}

Ничего не отправляет, но ГК при этом работает:

*>!i:: ToolTip {Blind}{Up}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

6 (изменено: araks, 2022-08-08 12:24:47)

Re: AHK: модифицированная клавиша в любых комбинациях

В общем подсказали на другом форуме. Результат для всех стрелок.


#If (GetKeyState("RAlt", "P") == 1)
	if %A_ThisHotKey% == i
		*i::Send {Blind}{RAlt Up}{Up}
	if %A_ThisHotKey% == k
		*k::Send {Blind}{RAlt Up}{Down}
	if %A_ThisHotKey% == j
		*j::Send {Blind}{RAlt Up}{Left}
	if %A_ThisHotKey% == l
		*l::Send {Blind}{RAlt Up}{Right}
#If

7

Re: AHK: модифицированная клавиша в любых комбинациях

Рано обрадовался. Для английского языка работает, для русского не работает.

8

Re: AHK: модифицированная клавиша в любых комбинациях

araks пишет:

В общем подсказали на другом форуме

Глупость подсказали. Горячие клавиши не создаются по условию таким образом:

	if %A_ThisHotKey% == i
		*i::Send {Blind}{RAlt Up}{Up}

оно просто игнорируется.

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

9

Re: AHK: модифицированная клавиша в любых комбинациях

teadrinker Для ангийской раскладки всё работает.
Можете подсказать как правильно и чтобы в обеих раскладках работало?

10 (изменено: Clannad5, 2022-08-08 12:58:16)

Re: AHK: модифицированная клавиша в любых комбинациях

araks
Проблемы с русским возможно в том, что там указаны английские клавиши. Попробуйте указать код клавиши.

11 (изменено: araks, 2022-08-08 13:12:14)

Re: AHK: модифицированная клавиша в любых комбинациях

Clannad5 Пробовал так:


#If (GetKeyState("RAlt", "P") == 1)
	if %A_ThisHotKey% == sc17
		*sc17::Send {Blind}{RAlt Up}{Up}
	if %A_ThisHotKey% == sc25
		*sc25::Send {Blind}{RAlt Up}{Down}
	if %A_ThisHotKey% == sc24
		*sc24::Send {Blind}{RAlt Up}{Left}
	if %A_ThisHotKey% = sc26
		*sc26::Send {Blind}{RAlt Up}{Right}
#If

Ничего не меняется.

12

Re: AHK: модифицированная клавиша в любых комбинациях

araks, разве у нас правило про точки отменилось?

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

13 (изменено: Clannad5, 2022-08-08 13:07:15)

Re: AHK: модифицированная клавиша в любых комбинациях

araks
A_ThisHotKey:

Имя клавиши последней из выполненных горячих клавиш (если горячие клавиши не выполнялись, значения нет), например, #z. Это значение изменится, если текущий поток будет прерван другой горячей клавишей, поэтому, если вы хотите позднее использовать первоначальное значение в процедуре, немедленно скопируйте его в другую переменную.

Тут явно код клавиши не нужно указывать, т.к идёт условие для следующей команды "Если последняя нажатая клавиша равняется - j"
Проще говоря, чтобы вам проще было понять, поставьте после условия:

msgbox, % "Последняя нажатая клавиша: " A_ThisHotKey

14

Re: AHK: модифицированная клавиша в любых комбинациях

teadrinker Нет. Твёрдо и точка.

15

Re: AHK: модифицированная клавиша в любых комбинациях

araks пишет:

Для ангийской раскладки всё работает

Этот код отдельно даже не запустится.

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

16

Re: AHK: модифицированная клавиша в любых комбинациях

Предполагаю, что если убрать все if-ы, не будет никакой разницы.

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

17

Re: AHK: модифицированная клавиша в любых комбинациях

teadrinker
а я кое-что заметил.
Первый его пример выше:


>!sc17::
Send {sc148} ; RAlt + i => up
return

Тоже не будет работать с русской расскладкой.
Проблема самого интепретатора?

18 (изменено: araks, 2022-08-08 13:30:05)

Re: AHK: модифицированная клавиша в любых комбинациях

teadrinker В оригинале я спрашивал для одной клавиши и мне подсказали такой код:


#If (GetKeyState("RAlt", "P") == 1)
*i::Send {Blind}{RAlt Up}{Up}
#If

Но он тоже работает только для английской раскладки. Если точнее для русской не работают сочетания с Ctrl.
C Win и Shift Работает.

19 (изменено: araks, 2022-08-08 13:32:38)

Re: AHK: модифицированная клавиша в любых комбинациях

Clannad5 пишет:

teadrinker
а я кое-что заметил.
Первый его пример выше:


>!sc17::
Send {sc148} ; RAlt + i => up
return

Тоже не будет работать с русской расскладкой.
Проблема самого интепретатора?

У меня с русской раскладкой работает. Правда предварительно я сделал замену:

<^>::RAlt

.

20 (изменено: Clannad5, 2022-08-08 13:36:54)

Re: AHK: модифицированная клавиша в любых комбинациях

araks
Проблема просто в том, что если убрать Alt и оставить только I, то будет и в русской расскладке работать.
Скорее всего это какой-то баг на уровне интепретатора, возможно можно как-то иначе улавливать нажатия клавиШ.

К примеру вот так у нас будет работать, если позволим интепретатору самому нажать на RAlt+I:

F10::
!>vk49::
SendInput {sc148} ; RAlt + i => up
return

21

Re: AHK: модифицированная клавиша в любых комбинациях

Clannad5 пишет:

Тоже не будет работать с русской расскладкой.

Это от раскладки зависит. Правый альт при русской раскладке может быть не альт, а AltGr. У меня этого нет, и всё работает в любой раскладке одинаково.

araks пишет:

мне подсказали такой код

Вот это уже выглядит правильно. Почему с русской раскладкой не работает, точно не могу сказать, попробуйте заменить i на сканкод.

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

22 (изменено: Clannad5, 2022-08-08 13:52:00)

Re: AHK: модифицированная клавиша в любых комбинациях

teadrinker
Я попробовал поставить звездочку и работает теперь в двух расскладках.

*!>vk49::

Однако неизвестный мне дефект возникает, а именно CTRL зажимается левый и не отжимается.
Хотя казалось бы, причем тут он?

Я заметил кое-что на сайте проверки клавиатуры.
Если в русской расскладке просто нажать RAlt - автоматически зажимается CTRL.

Возможно в этом весь баг процесса.
Нужно у клавиши AltGr отключать Ctrl каким-то образом, либо юзать левый Alt.

23 (изменено: Clannad5, 2022-08-08 14:14:42)

Re: AHK: модифицированная клавиша в любых комбинациях

araks
Всё что вы можете, это отключить AltGr и тогда проблема должна исчезнуть, я так думаю.

Используйте приложение "keytweak" я качал отсюда.
Выбираете клавишу около пробела, выбираете ей назначение LAlt, применяете и потверждаете.

То есть когда мы будем нажимать RAlt, мы будем нажимать LAlt, как по другому сделать я не узнал.

24

Re: AHK: модифицированная клавиша в любых комбинациях

araks

Держите
Устанавливаете через Setup. потом добавляете новую клавиатуру тут:
https://i.imgur.com/VgbrGb6.png

И вуаля! Правый альт теперь работает как правый альт.

25

Re: AHK: модифицированная клавиша в любых комбинациях

Clannad5 Спасибо огромное за участие и помощь!
Программа MSKLC?

После вашей фразы: "Я заметил кое-что на сайте проверки клавиатуры.
Если в русской расскладке просто нажать RAlt - автоматически зажимается CTR" - тоже стал гуглит проблему и нашёл это же решение.

Всё работает!