1 (изменено: Kokkolar, 2016-08-28 12:56:44)

Тема: AHK: Динамические хоткеи

Есть скрипт:

Hotkey, z, on

^1::Hotkey, z, spec1
^2::Hotkey, z, spec2

spec1:
	Send {a down}{a up}
return

spec2:
	Send {b down}{b up}
return

Можно ли сделать так, чтобы последние 2 лейбла были равносильны полноценным ребиндам:

z::a
z::b

- безо всяких send/sendinput и т.д. ?

2 (изменено: yalanne, 2016-08-28 13:22:13)

Re: AHK: Динамические хоткеи

Вот так подходит?

^1::key := "a"
^2::key := "b"

$z::Send % key ? key : Ltrim(A_ThisHotkey,"$")

Последнюю строку можно прочесть так:
$ не дает запустить само себя если отправляется та же клавиша.
? - проверяем содержимое переменной key, если она не пуста то используем её, если же пуста то нажимаем ту же клавишу что вызвало поток, но без знака доллар.

или так:

Hotkey,$z,Zevent
^1::key := "a"
^2::key := "b"

Zevent(){
Global key
Send % key ? key : Ltrim(A_ThisHotkey,"$")
}

3

Re: AHK: Динамические хоткеи

^1:: mode := 1
^2:: mode := 2

#If mode = 1
sc2C::sc1E  ; z::a

#If mode = 2
sc2C::sc30  ; z::b
#If
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: Drugoy, 2016-08-28 16:46:25)

Re: AHK: Динамические хоткеи

yalanne,

Kokkolar пишет:

Можно ли сделать  … безо всяких send/sendinput и т.д. ?

А у вас тоже Send.

Kokkolar
Во-первых, приведённый вами скрипт вываливает ошибку об отсутствующем хоткее, ссылаясь на строку "Hotkey,z,on".
Во-вторых, заданный вами вопрос возможно лишён смысла: a::b использует Send, знаете ли вы об этом или нет. Если вы об этом знали и вопрос стоял лишь о варианте записи кода так, чтобы в нём отсутствовали Send/SendInput, то следовало бы это сразу указать.
Если так, то проблема решается через объявление нескольких remap'ов (как у вас во втором коде), размещая каждый из них внутри своей #If директивы. Edit: пример такого кода как раз и привёл teadrinker.

5 (изменено: Kokkolar, 2016-08-29 23:44:32)

Re: AHK: Динамические хоткеи

Drugoy
Извиняюсь. Действительно выдает ошибку, а я всего лишь для форума отрезал от скрипта лишнюю 1 строчку, которая к вопросу не имеет отношения.

Вот полная версия. Работает. Пробовал.

~^F9::ExitApp
Hotkey, z, on

^1::Hotkey, z, spec1
^2::Hotkey, z, spec2

spec1:
	Send {a down}{a up}
return

spec2:
	Send {b down}{b up}
return

Не знал что используется Send. Возможно там Send с ожиданием отжатия клавиши, тк в играх записи

z::a

и

z::send a

-ведут себя по-разному.

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

6 (изменено: Kokkolar, 2016-08-29 23:59:32)

Re: AHK: Динамические хоткеи

yalanne
Не подходит, тк при зажатии кнопки происходят множественные посылы a/b, требуется 100% эмуляция, чтобы при зажатии кнопки, зажимался и эмулируемый символ.

7 (изменено: Kokkolar, 2016-08-30 00:00:48)

Re: AHK: Динамические хоткеи

teadrinker
Спасибо. То что надо.