Autohotkey 自动热键:使用相同键的函数之间的冲突
最近我用了很多“$”键,在我的(西班牙语)键盘上,我必须每次按Shift+4,所以我决定使用AutoHotkey来加快速度。 这个想法通过使用“ç”键来加快速度,因为我不经常使用它Autohotkey 自动热键:使用相同键的函数之间的冲突,autohotkey,Autohotkey,最近我用了很多“$”键,在我的(西班牙语)键盘上,我必须每次按Shift+4,所以我决定使用AutoHotkey来加快速度。 这个想法通过使用“ç”键来加快速度,因为我不经常使用它 ç:: Send $; new use of the key Return 这很有效,但有时我确实需要写“ç”和“ç”,所以我尝试添加这个 !ç:: Send ç ; to get the "ç" back in game Return +ç:: Send Ç ;original use of
ç::
Send $; new use of the key
Return
这很有效,但有时我确实需要写“ç”和“ç”,所以我尝试添加这个
!ç::
Send ç ; to get the "ç" back in game
Return
+ç::
Send Ç ;original use of the "ç" key
Return
但它不起作用(继续发送$,因为“ç”现在是“$”)。
我觉得这应该很明显,但仍然找不到解决办法。感谢您的时间解决此问题的最简单方法是增加 用于重新映射的热键
#InputLevel 1
ç::
Send $ ; new use of the key
Return
#InputLevel 0
这可以防止它被炒鱿鱼购买脚本。如果InputLevel
>=,则由于Send
而不会执行热键。默认情况下,它们都是0
实际上,在这种情况下,问题不在于SendLevel
(它不大于InputLevel
),而在于ç
热键注册为reg
热键,reg
热键无法区分模拟输入和真实输入,因此它总是会被触发
使用#UseHook on
而不是设置输入级别也可以解决问题#InputLevel 1
使ç
成为k-hook
键(因为所有具有InputLevel>0
的热键都使用键盘挂钩)。在这种情况下,这才是重要的,而不是级别本身。首选的直观方式:使用ç::$
而不是命令块。
这将重新映射键,而不是为其指定宏。这种方式在AHK脚本中非常直观,因为主要和次要语法与主要和次要意图很好地对应,即:
#InputLevel
优先级排序不会使事情变得不必要的复杂化
更改后的完整代码:
!ç::
Send ç ; to get the "ç" back in game
Return
+ç::
Send Ç ;original use of the "ç" key
Return
; new use of the key
; ### this code has to be b̲e̲l̲o̲w̲ the macros
ç::$
经过测试,它的工作原理与预期一致。(版本1.1.25.012017-03-05)@Oleg–我在发布答案之前对它进行了测试。它很好用。你知道为什么它不起作用吗?如果没有,也许你可以考虑收回你的否决。谢谢你公平的对待。你可能只是认为你做到了;)<代码>ç::$扩展为
*ç:
和*çup::
这将吃掉所有的热键。如果您在测试时将ç::$
放在其他热键下,那么它会解释为什么它对您有效(原因与它变成k-hook
热键相同,并且不会吃掉其他热键)。我测试了你在答案中发布的代码,它不起作用,我不知道它是如何起作用的。也可能是我版本中的一个bug。我用的是一个相当旧的,我用过,甚至还提交了一份。目前没有回应。我仍然不明白你的代码是如何工作的。@Oleg–我的错,我发现测试版本的末尾是ç::$
。我修正了答案,我为此道歉。我忘记了那个细节,我只是在再次测试时才想起它。您的详细解释似乎是正确的。这对我来说很有效,但另一个答案也提供了一个解决方案,代码中的更改更少。非常感谢您的解释,感谢您,现在我了解了“SendLevel”是如何工作的,我可能会将其用于其他代码。@Mosky np,选择对您最有用的答案正是您应该做的。