Переключение между несколькими наборами переназначений в autohotkey

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

Поэтому, когда я нажимаю

^+!F4::

эти клавиши переназначены

d::Space
f::j
j::k
k::l

и делаю это

^+!F8::

переназначит

a::s
s::d
d::f
f::Space
j::Left
k::Numpad4
l::Numpad5
;::Numpad6

и наконец

^+!F7::

Вернет все по умолчанию

Кажется, что бы я ни пробовал, скрипт не компилируется, чтобы дублировать горячие клавиши. Можно ли этого добиться с помощью autohotkey?


person user2444090    schedule 01.06.2013    source источник
comment
Вы используете AutoHotKey_L?   -  person MCL    schedule 02.06.2013


Ответы (2)


Вы можете использовать команду Горячая клавиша для динамического изменения горячих клавиш. Вот небольшой пример того, как вы можете переназначить свои ключи:

#Persistent
#UseHook

keyMap := {d: "SPACE", f: "j", j: "k", k: "l"}
; Associative objects are AHK_L only!
; for a pseudo array, do something like this:
; keyMapd := "SPACE"
; keymapf := "j"
; ...

Exit

F4::
    for orig, new in keyMap
    {
        Hotkey, %orig%, RemapKey
    }
return

RemapKey:
    newKey := keyMap[A_ThisHotkey]
    ; to retrieve from a pseudo array, do this:
    ; newKey := keyMap%A_ThisHotkey%
    Send, {%newKey%}
return

keyMap — это ассоциативный массив, сопоставляющий исходный ключ с его новой целью. Нажатие F4 возьмет каждую клавишу, определенную в keyMap, и назначит ей подпрограмму с именем RemapKey, поэтому она будет вызываться, когда любая клавиша в keyMap (d, f, j или k). RemapKey берет последнюю горячую клавишу, обращаясь к A_ThisHotkey, выясняет, на что она сопоставлена, и отправляет эту клавишу. #UseHook необходим, чтобы команда Send не вызывала другую горячую клавишу (в нашем случае нажатие **F вызовет **J, J затем активирует J). >К и так далее). Обратите внимание, что использование ассоциативных объектов, если только AutoHotkey_L. Если вы используете другую версию, вам придется определить свою карту по-другому (например, псевдомассив, например keyMapd:="SPACE").

person MCL    schedule 01.06.2013

Это альтернативный способ, также требующий AutoHotKey_L.

#SingleInstance Force
Flag:=0
Return

^+!F7::
Flag:=0
TrayTip, AutoHotKey, Keyboard setting Default, 1
Return

^+!F4::
Flag:=1
TrayTip, AutoHotKey, Keyboard setting A, 1
Return

^+!F8::
Flag:=2
TrayTip, AutoHotKey, Keyboard setting B, 1
Return

#If (Flag=1)
x::SoundBeep, 500, 100
d::Space
f::j
j::k
k::l
#If

#If (Flag=2)
x::SoundBeep, 2000, 100
a::s
s::d
d::f
f::Space
j::Left
k::Numpad4
l::Numpad5
;::Numpad6
#If
person Robert Ilbrink    schedule 02.06.2013