如何在AutoHotKey中切换键盘映射

时间:2014-06-24 14:24:51

标签: autohotkey hotkeys

我想将键盘的一部分映射为数字键盘:(我的笔记本电脑键盘没有数字键盘)

j->1
k->2
l->3
u->4
i->5
o->6

我想用快捷方式切换映射,假设 Control + Alt + M , 我的代码在下面,但是,我不知道如何重置映射:

mode = 0

^!m::
  if (mode = 1)
  {
    mode = 0
    j->1
    k->2
    l->3
    u->4
    i->5
    o->6
  }
  else
  { 
    mode = 1
    u::u ;got error here: duplicate hotkey
  }
return

我在u::u时遇到重复的热键错误,似乎AHK不允许在脚本中映射多个键。 GetKeyState("NumLock", "P")不起作用,因为我没有 NumLock

我能用这段代码实现:

^!m::
Suspend
u::4
i::5
o::6
return

但这会切换整个脚本,这显然不太好。所以我想要一个更好的解决方案。

2 个答案:

答案 0 :(得分:9)

如果您运行AKH_L(例如AutoHotkey v1.1.10.01),您可以使用#IF语句来控制热键(就像使用#IfWinActive在应用程序级别控制热键一样)。

Mode := 0

^!m::
    mode:=!mode ;not! toggle
return

#If mode ; All hotkeys below this line will only work if mode is TRUE
    j::1
    k::2
    l::3
    u::4
    i::5
    o::6
#If

答案 1 :(得分:3)

示例#1:热键切换方法

使用Hotkey命令的切换选项,请参阅[Hotkey]

keys:="jkluio"
Loop,Parse,keys ;create the hotkeys
            Hotkey,$%A_loopField%,Num_pad
Loop,Parse,keys ;turn them off
            Hotkey,$%A_loopField%,Off

^!m::
    Loop,Parse,keys ;toggle hotkeys
            Hotkey,$%A_loopField%,Toggle
return

Num_pad:
    Send % InStr(keys,SubStr(A_ThisHotkey,0))
return

示例#2:if()切换方法

mode:=0
keys:="jkluio"
Loop,Parse,keys ;create the hotkey
    Hotkey,$%A_loopField%,Num_pad

^!m::
    mode:=!mode ;not! toggle
return

Num_pad:
    if (mode)
        Send % InStr(keys,SubStr(A_ThisHotkey,0))
    else
        Send % SubStr(A_ThisHotkey,0)
return

注意

我推荐第一个例子,因为它更有效率。第二个例子仅用于“学习”目的。