1

Тема: AHK: Удерживание одной клавиши когда зажата другая

Есть клавиша A, при одиночном её нажатии должна нажиматься клавиша B, при удержании должна удерживаться другая клавиша (иногда Shift, иногда Ctrl).
Покажите пожалуйста скрипт.

Сейчас использую такую запись:

RCtrl::Send {ins}

RCtrl & Home::
if (GetKeyState("Shift", "P"))
   Send ^+{Home}
else
   Send ^{Home}
return

Недостаток - для каждой клавиши нужно добавлять отдельный блок кода в котором также отдельно проверять другие модификаторы. Скрипт получается тяжёлым непропорционально содержанию.

2

Re: AHK: Удерживание одной клавиши когда зажата другая

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

3

Re: AHK: Удерживание одной клавиши когда зажата другая

Я знаю, что одно не противоречит другому. В неидеальном скрипте который я прикрепил правый ctrl выполняет разные действия при удержании и нажатии. Но запись слишком длинная, если использовать все существующие на клавиатуре клавиши и все модификаторы для них.

4

Re: AHK: Удерживание одной клавиши когда зажата другая

Наверное придётся на каждую из клавиш клавиатуры писать отдельную подпрограмму.

5

Re: AHK: Удерживание одной клавиши когда зажата другая

Я кажется понял. Вы имеете в виду использовать разные активаторы действия (key::) для нажатия и удержания, используя {down} и {up}. Я пытался, у меня не получилось.

6 (изменено: Lortrum, 2023-07-13 02:00:41)

Re: AHK: Удерживание одной клавиши когда зажата другая

Я говорил о такой записи скрипта


a::
if (GetKeyState("s", "P"))
	MsgBox, 1!
else
	Send {Blind}
return

s::
if (GetKeyState("a", "P"))
	MsgBox, 2!
else
	Send {Blind}
return

w::
if ((GetKeyState("a", "P")) and (GetKeyState("s", "P")))
	Send {Text}абвгдеёжз
	else if (GetKeyState("a", "P"))
		Send ^w
	else if (GetKeyState("s", "P"))
		Send +w
else 
	Send w
return

Она выполняет свою задачу, но она очень длинная, если вместо 'w' использовать все клавиши на клавиатуре, то есть примерно 100. Если она настолько длинная, то возможно я делаю что-то неправильно.