【问题标题】:Autohotkey: Conflict between functions using the same keyAutohotkey:使用相同键的功能之间的冲突
【发布时间】:2017-08-14 01:39:37
【问题描述】:

我最近经常使用“$”,而且在我的(西班牙语)键盘上,我每次都必须按 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

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

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

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

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

    这可以防止它被解雇购买脚本。如果InputLevel >= SendLevel,则不会因为Send 而执行热键。默认情况下,它们都是 0。

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

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

    【讨论】:

    • 这对我有用,但另一个答案也提供了一个代码更改较少的解决方案。非常感谢您的解释,感谢您,现在我了解了“SendLevel”的工作原理,并且可以将其用于其他代码。
    • @Mosky np,选择对您最有用的答案正是您应该做的。
    【解决方案2】:

    首选直观方式:使用ç::$而不是命令方块。

    这将重新映射键而不是为其分配宏。这种方式在 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)

    【讨论】:

    • @Oleg – 我在发布答案之前对其进行了测试。它工作正常。你知道为什么它不应该工作吗?如果不是,也许您可​​以考虑撤回您的反对票。感谢您公平竞争。
    • 你可能只是认为你做到了;)。 ç::$ 扩展为 *ç::*ç up:: 这将吃掉所有的 ç 热键。如果您在测试时将ç::$ 放在其他热键下,那么它解释了为什么它对您有用(原因相同,它变成k-hook 热键,并且不吃其他热键)。我测试了您在答案中发布的代码,它不起作用,我看不出它是怎么做到的。
    • 也可能是我的版本中的一个错误。我正在使用一个相当旧的。
    • 我做了,甚至提交了bug report。到目前为止没有任何回应。我仍然看不出你的代码是如何工作的。
    • @Oleg - 我的错,我发现测试版本最后是ç::$。我确定了答案,对此我深表歉意。我忘记了那个细节,我只是在再次测试时才想起它。您的详细解释似乎是正确的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多