【问题标题】:AutoHotkey: Why do hotkeys break remappings?AutoHotkey:为什么热键会破坏重新映射?
【发布时间】:2021-06-15 04:23:05
【问题描述】:

我想把 LAlt 换成 LCtrl,这本身就很简单:

#SingleInstance Force
#UseHook
#MenuMaskKey VKFF
SetWorkingDir %A_ScriptDir%
SendMode Input
LAlt::RCtrl
RCtrl::LAlt

它只是工作。但我想这样做的主要原因是阻止 LAlt 作为菜单键的功能。我想要将物理 LAlt 按钮与 JKLI 用作箭头键并且 LAlt 没有完全静音意味着我不能使用它们来导航上下文菜单 - 因为 Alt 会在按键时关闭它们。如果我将<!i::Send {Up} 添加到脚本中,就会发生这种情况。现在 LAlt 不会在按键时被阻止 - 现在按下它会在菜单选项名称下方显示下划线,以前不是这样,并且任何打开的上下文菜单都将被关闭。

所以我的主要问题是:为什么会发生这种情况?为什么(额外的)热键会破坏重新映射,有什么方法可以防止\解决\处理这个问题?

现在,我知道如何解决此问题的一种方法是使用 >^i::Send {Up},并且由于热键在其他情况下不起作用,请删除 SendMode Input。但是文档说SendInput 更好,因此我选择了另一种方式——将脚本一分为二,一个运行另一个。

; Script One:                                   ; Script Two (two.ahk):

#SingleInstance Force                            #SingleInstance Force
#UseHook                                         #UseHook
#MenuMaskKey VKFF                                #MenuMaskKey VKFF
SetWorkingDir %A_ScriptDir%                      SetWorkingDir %A_ScriptDir%
SendMode Input                                   SendMode Input

Run two.ahk                                      >^i::Send {RCtrl up}{Up}{RCtrl down}
                                                 >^k::Send {RCtrl up}{Down}{RCtrl down}
LAlt::RCtrl                                      >^j::Send {RCtrl up}{Left}{RCtrl down}
RCtrl::LAlt                                      >^l::Send {RCtrl up}{Right}{RCtrl down}
Capslock::Backspace                              >^o::Send +{F10}

这似乎工作正常,但有没有更好的方法可以实现我想要的?就像在一个文件中一样,保留SendMode Input 而不必用{RCtrl up} ... {RCtrl down} 中和RCtrl

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    来自文档:

    虽然重新映射的键可以触发普通热键,但默认情况下它不能触发鼠标热键或钩子热键

    既然你有#UseHook,我想如果你和#InputLevel一起玩,你就可以为所欲为https://www.autohotkey.com/docs/commands/_InputLevel.htm

    【讨论】:

    • 我不明白这句话如何解释为什么添加 <!i::Send {Up} 会使 LAlt::RCtrl 停止工作。而#InputLevel 不适用于SendInput
    • 你读过关于“#UseHook”的部分吗?请参阅“备注”部分autohotkey.com/docs/misc/Remap.htm。 '...默认情况下,它不能触发鼠标热键或挂钩热键...' 文档还说,如果两个脚本正在使用 '#UseHook' 它会禁用其中一个:autohotkey.com/docs/commands/Send.htm#SendInputDetail 所以它会恢复为 'Event'。
    猜你喜欢
    • 2021-09-04
    • 2011-06-14
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2012-11-28
    • 2012-08-09
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多