Autohotkey:使用相同键的功能之间的冲突

Autohotkey: Conflict between functions using the same key

我最近经常使用“$”,在我的(西班牙语)键盘中我每次都必须按 Shift+4,所以我决定使用 AutoHotkey 来让它更快。 这个想法通过使用“ç”键使它更快,因为我不经常使用它。

ç::
  Send $; new use of the key
Return

这个很好用,但有时我确实需要写“ç”和“Ç”,所以我尝试添加这个

!ç::
   Send ç  ; to get the "ç" back in game
Return

+ç::
   Send Ç ;original use of the "ç" key
Return

但它不起作用(继续发送 $,因为“ç”现在是“$”)。 我觉得这应该很明显,但仍然找不到解决方案。谢谢你的时间

解决这个问题的最简单方法是增加 #InputLevel 对于您重新映射的热键。

#InputLevel 1
ç::
  Send $ ; new use of the key
Return
#InputLevel 0

这可以防止它被解雇购买脚本。如果 InputLevel >= SendLevelSend 将不会执行热键。默认情况下它们都是 0。

实际上在这种情况下,问题不在于 SendLevel(它不大于 InputLevel),而是 ç 热键被注册为 reg 热键, reg 热键无法区分模拟输入和真实输入,因此它总是会被触发。

使用#UseHook on代替设置输入电平也能解决问题。 #InputLevel 1 使 ç 成为 k-hook 键(因为所有带 InputLevel > 0 的热键都使用键盘钩子)。在这种情况下,这才是重要的,而不是关卡本身。

首选直观方式:使用ç::$代替命令方块。

这将重新映射按键而不是为其分配宏。这种方式在 AHK 脚本中很直观,因为主要和次要语法与主要和次要意图很好地对应,即:

  1. (主要)完全重新映射密钥(在 AHK 中,这是在没有宏的情况下完成的)
  2. (次要)添加一些执行非标准功能的宏

• 使用 #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.01 版本中,2017-03-05)