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

Art*_*Art 3 google-chrome autohotkey

我以一种将Cmd+LeftCmd+Right击键识别为Chrome 中的Back/Forward导航的方式设置了 AutoHotkey 。

问题是当我在文本框中输入文本时,它还可以识别被按下的那些键。但是,在输入文本时,我希望这些组合键执行不同的功能 - 跳转到行首/行尾,类似于Ctrl+ Left/ Right

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

igl*_*vzx 8

谷歌浏览器中最深的 AutoHotkey (AHK) 可以检测到,与 web 内容相关的是Chrome_RenderWidgetHostHWND1控件。此控件是Web 内容的视口。我们inputtextareaHTML 元素在渲染内容的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
    
    Run Code Online (Sandbox Code Playgroud)

示范:

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

窗口标题 谷歌浏览器

AHK 可以利用这个特性,"[AHK] - Google Chrome"无论窗口的标题是否以结尾,间接地将 HTML input/ textareafocus 与一组命令连接起来。


笔记:

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

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

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

我将继续研究这个解决方案。如果您有任何建议或知道解决这些 JavaScript 问题的方法,请随时告诉我和/或贡献。源在上面发布并托管在 Github 上。