如何让AutoHotKey脚本仅在Chrome中双击单词时执行查找操作
解决Chrome中双击触发查找的脚本范围问题
这个问题其实是因为你把上下文敏感的条件指令放错位置啦!AutoHotkey里的#IfWinActive是用来限定后续热键的生效范围,而不是在热键内部做判断。咱们来调整一下脚本结构就能解决问题:
修正后的完整脚本
; 设置窗口标题匹配模式为"任意位置匹配" SetTitleMatchMode, 2 ; 仅当Chrome窗口激活时,后续的热键才生效 #IfWinActive, ahk_class Chrome ~LButton:: ; 判断是否是双击(两次按键间隔小于400ms,且不是第一次按下) If (A_TimeSincePriorHotkey < 400) and (A_TimeSincePriorHotkey <> -1) { SendInput ^c ; 复制选中的单词 Sleep, 10 ; 短暂等待确保复制完成 SendInput ^f ; 打开查找框 Sleep, 10 ; 短暂等待确保查找框加载 SendInput ^v ; 粘贴复制的内容到查找框 } Return ; 结束上下文敏感范围,避免影响后续其他脚本 #IfWinActive
关键调整说明
#IfWinActive的位置:把它放在热键~LButton::之前,这样整个热键只会在Chrome窗口激活时被触发,非Chrome窗口双击左键完全不会触发这个脚本逻辑。- 保留原左键功能:
~LButton里的~符号很重要,它表示保留左键原本的点击/选中功能,不会因为热键覆盖而导致左键无法正常使用。 - 结束上下文范围:最后加上
#IfWinActive(不带参数),可以关闭之前的上下文敏感设置,防止影响脚本中其他可能存在的热键。
原来的脚本之所以在非Chrome窗口也会运行,是因为#IfWinActive放在了热键定义之后,此时热键已经被注册为全局生效的了,内部的判断其实起不到限定范围的作用——热键本身已经触发了,只是在内部做了窗口判断,但还是会占用系统资源,体验也不好。调整位置后就从根源上限定了热键的生效场景。
内容的提问来源于stack exchange,提问作者Royi Namir
相关产品推荐
相关产品推荐

