在autohotkey中的多组重新映射之间切换
问题描述:
基本上我想要做的是通过使用不同的热键在不同的键盘布局之间切换。在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实现?
答
您可以使用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
的任意键(d,˚F,Ĵ或ķ)被按下。 RemapKey
通过访问A_ThisHotkey
获取最新热键,找出它映射到的内容并发送该密钥。该#UseHook
是为了防止Send
命令触发另一个热键必需(在我们的情况下,按下**˚F将触发**则J,Ĵ将触发ķ等)。 请注意,如果使用关联对象AutoHotkey_L只有。如果您使用的是其他版本,则必须以另一种方式定义您的地图(例如,像keyMapd:="SPACE"
这样的伪数组)。
答
这是一种替代方法,也需要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
您使用的是AutoHotKey_L吗? – MCL