微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

条件键重映射 AHK

如何解决条件键重映射 AHK

我想重新映射 'j' 键,以便它在 ergo 为 true 时按 n,或者在 AutoHotKey 为 false 时按 y。例如,当我正常使用 "j::n" 重新映射时,shift+j 输出大写 N,其他带有 'j' 键的修饰符也是如此。但是,我下面的代码仅在没有修饰符的情况下按下字母时才有效。有没有办法解决这个问题,并有条件地使用 AutoHotKey 重新映射键?

j::
    if (ergo) ;inverted use of the ergo variable to make the code more efficient
        Send {n}
    else
        Send {y}
return

解决方法

您只想将具有 special meaning 的字符包装在 { } 中的发送命令中。基本上是逃避,如果你熟悉那是什么。
因此,您不想将 ny 包裹在 { } 中。它甚至可能导致 undesired behavior

对此有很多方法。不能说哪个最好,因为不知道你的完整脚本是什么样的。
我将提供两个我认为最有可能为您提供最佳方法的选项。


首先,您尝试过的发送命令方式。做对了:

*j::
    if (ergo)
        SendInput,{Blind}n
    else
        SendInput,{Blind}y
return

因此,使用 *(docs) 修饰符,这样即使按下额外的修饰符,热键也能工作。
然后使用 blind send mode 以便您在触发热键时可能按住的修饰键不会被释放。
还切换到 SendInput,因为它是推荐的更快、更可靠的发送模式。


第二种方法是使用 #If(docs) 创建上下文敏感的热键。

#If,ergo
j::n
#If
j::y

这是一种方便且简单的方法。但可能会导致其他问题。
为什么?好吧,#If 有一些缺点,您可以阅读有关 here 的更多信息,但长话短说:
除非您有更复杂的脚本,否则您可能不会遇到任何问题。

,

例如,当我正常使用“j::n”重新映射时,shift+j 输出一个大写的 N,其他带有 'j' 键的修饰符也是如此。 但是,我下面的代码仅在没有修饰符的情况下按下字母时才有效

看起来您正在寻找通配符 * 修饰符。

来自docs

通配符:即使按下了额外的修饰符,也会触发热键。这通常与重新映射键或按钮结合使用。

因此在此更改之后,您的代码将如下所示:

*j::
    if (ergo) ;inverted use of the ergo variable to make the code more efficient
        Send {n}
    else
        Send {y}
return

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。