如何解决条件键重映射 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 的字符包装在 { }
中的发送命令中。基本上是逃避,如果你熟悉那是什么。
因此,您不想将 n 或 y 包裹在 { }
中。它甚至可能导致 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 举报,一经查实,本站将立刻删除。