如何使用输入/文本区域焦点作为热键的条件

如何使用输入/文本区域焦点作为热键的条件

我已经设置了 AutoHotkey,以便将Cmd+LeftCmd+Right按键识别为Chrome 中的Back/Forward导航。

问题是,当我在文本框中输入文本时,它也能识别出所按下的那些键。然而,当输入文本时,我希望这些组合键能够执行不同的功能 - 跳转到行首/行末,类似于Ctrl+ Left/ Right

有没有办法让一个映射适用于文本框,而让另一个映射适用于 AutoHotkey 中的所有其他内容?

答案1

AutoHotkey (AHK) 在 Google Chrome 中可以检测到的最深层与网页内容相关的是控件Chrome_RenderWidgetHostHWND1。此控件是视口网页内容。我们的inputHTMLtextarea元素更深一些,在DOM渲染内容。

因此,我们需要找到一种方法来突破 HTML 元素和 AutoHotkey 之间的这堵墙进行通信。幸运的是,HTML 的同一边有一个玩家能够说 AHK 的术语:JavaScript

为什么?简单来说,JavaScript 可以在元素获得或失去焦点时执行操作。其中一个操作可以是更改页面标题。这反过来会更改 Google Chrome 的窗口标题,而 AHK 可以读取窗口标题!


设置:

  1. 安装我的InputFocusTitleChange.user.js用户脚本。(来源

  2. 现在您可以在 AutoHotkey 中使用以下语法:

    SetTitleMatchMode, RegEx
    
    #x:: ; normal hotkey
         ; do something
        return
    
    #IfWinActive, \[AHK\] - Google Chrome$
        #x:: ; input/textarea focus hotkey
             ; do something
            return
    
    #IfWinActive
    

示范:

当 HTMLinputtextarea元素获得焦点时,用户脚本会附加[AHK]到页面标题,从而更改 Google Chrome 的窗口标题。

窗口标题 谷歌浏览器

无论窗口的标题是否以 结尾"[AHK] - Google Chrome",AHK 都可以使用此特性将 HTML input/textarea焦点与一组命令间接连接起来。


笔记:

根据我的测试,有两个问题:

  1. 如果页面加载时input/已经获得焦点,则可能无法将其添加到页面标题中。您必须将焦点从元素移开然后再移回,才能更改标题。textarea[AHK]

  2. 如果input/textarea元素是在页面加载后动态生成的(这也是脚本加载时),那么这些元素将不会产生任何效果。

我将继续致力于此解决方案。如果您有任何建议或知道如何解决这些 JavaScript 问题,请随时告诉我和/或做出贡献。源代码发布在上面并托管在 Github 上。

相关内容