微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AutoHotkey:为什么热键会破坏重新映射?

如何解决AutoHotkey:为什么热键会破坏重新映射?

我想用 LCtrl 交换 LAlt,这本身就很简单:

#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

解决方法

来自文档:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。