Windows 自动热键可以切换按键映射吗?

Windows 自动热键可以切换按键映射吗?,windows,autohotkey,Windows,Autohotkey,因此,我正在尝试用AutoHotKey编写一个简单的脚本,它将使用NumLock(我已经映射到注册表中的capslock)作为切换,将方向键转换为numpad nab键。我的脚本如下: GetKeyState, state, NumLock, T if state = D { Up::Numpad8 Down::Numpad2 Left::Numpad4 Right::Numpad6 Enter::Numpad5 } if state = U {

因此,我正在尝试用AutoHotKey编写一个简单的脚本,它将使用NumLock(我已经映射到注册表中的capslock)作为切换,将方向键转换为numpad 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”部分,但当再次切换时,键仍保持在更改的状态。我确信我遗漏了一些简单的东西

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

GetKeyState, state, NumLock, T

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

这是一个使用的简化解决方案

这样做的好处是,您不必使用
If
语句将键重新映射回
Else
语句中的键本身。如果条件不正确,钥匙将保留其正常功能

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

我在文档中读到,$阻止脚本再次触发脚本。如果Up设置为“Up::Up”(不起作用,但想象它起作用),按键将被识别为Up,它将在一个无休止的循环中一次又一次地触发Up。阻止脚本触发自身的方法是使用$。另外,numpad::up无法工作,因为我希望方向按钮返回到其原始状态。我实际上没有一个数字广告。剧本的目的是模仿它。嗯,我已经编辑了我的答案。我刚刚发布的内容对你有用。对不起,应该先点击刷新按钮。谢谢,这很有道理。我今晚会试一试并汇报。注意,这是关于编程的。相关的: