【问题标题】:Can AutoHotKey toggle keymapping?AutoHotKey 可以切换键盘映射吗?
【发布时间】:2013-07-08 21:55:29
【问题描述】:

所以我尝试在 AutoHotKey 中编写一个简单的脚本,该脚本将使用 NumLock(我已映射到注册表中的大写锁定)作为切换键,以将我的方向键转换为小键盘 nab 键。我的脚本如下:

GetKeyState, state, NumLock, T
if state = D
{
    Up::Numpad8
    Down::Numpad2
    Left::Numpad4
    Right::Numpad6
    Enter::Numpad5
}
if state = U
{
    $Up::Up
    $Down::Down
    $Left::Left
    $Right::Right
    $Enter::Enter
}
Return

但是,我收到一条错误消息,提示在第 15 行重复了 Up。我如何告诉 AutoHotKey 将我的键返回到其原始键指定?我尝试将“else”部分留空,而不是“if state = U”部分,但是当再次切换时,键仍保持更改状态。我确定我缺少一些简单的东西。

【问题讨论】:

标签: windows autohotkey


【解决方案1】:

啊,给你。你不能按照你试图做的方式去做。由于您只能在脚本中映射一次键,因此将 if/or 函数放在热键中,如下所示:

GetKeyState, state, NumLock, T

up::
    if(state = D){
        send {Numpad8}
    }else{
        send {up}
    }
return

【讨论】:

  • 我在文档中读到 $ 会阻止脚本再次触发脚本。如果 Up 设置为 up 与 "up::up" (这不起作用,但想象一下),按键将被识别为向上,这将在无限循环中一次又一次地触发。阻止脚本自行触发的方法是使用 $.此外, numpad::up 不起作用,因为我希望方向按钮返回到它们的原始状态。我实际上没有数字键盘。脚本的目标是模拟它。
  • 呃,我已经编辑了我的答案。我刚刚发布的内容对您有用。
  • 哦。抱歉,应该先刷新一下。谢谢,有道理。我会试一试,今晚回来报告。
【解决方案2】:

这是一个使用#If context 的简化解决方案。

这样做的好处是,您不必有If 语句即可在Else 语句中将键重新映射回自身。如果条件不成立,密钥将保留其正常功能。

#If GetKeyState("NumLock", "P")
    Up::Numpad8
    Down::Numpad2
    Left::Numpad4
    Right::Numpad6
    Enter::Numpad5
#If

【讨论】:

    猜你喜欢
    • 2014-08-14
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多