2013-06-01 6 views
0

В основном, что я пытаюсь сделать, это переключиться между различными раскладками клавиатуры, используя разные горячие клавиши.Переключение между несколькими наборами переназначений в 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?

+0

Вы используете AutoHotKey_L? – MCL

ответ

0

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

#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 (д, х, J или к) нажат. RemapKey принимает последнюю горячую клавишу, обращаясь к A_ThisHotkey, узнает, к чему она привязана, и отправляет этот ключ. #UseHook имеет важное значение для того, чтобы предотвратить Send команду, чтобы вызвать другую горячую клавишу (в нашем случае, нажав ** F вызовет ** J, J затем вызвать K и так далее). Обратите внимание, что использование ассоциативных объектов, если AutoHotkey_L только. Если вы используете другую версию, вам нужно будет определить вашу карту другим способом (например, псевдо-массив, такой как keyMapd:="SPACE").

0

Это альтернативный способ, требующий также 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