我已经设置了 AutoHotkey,以便将Cmd+Left和Cmd+Right按键识别为Chrome 中的Back/Forward导航。
问题是,当我在文本框中输入文本时,它也能识别出所按下的那些键。然而,当输入文本时,我希望这些组合键能够执行不同的功能 - 跳转到行首/行末,类似于Ctrl+ Left/ Right。
有没有办法让一个映射适用于文本框,而让另一个映射适用于 AutoHotkey 中的所有其他内容?
答案1
AutoHotkey (AHK) 在 Google Chrome 中可以检测到的最深层与网页内容相关的是控件Chrome_RenderWidgetHostHWND1
。此控件是视口网页内容。我们的input
HTMLtextarea
元素更深一些,在DOM渲染内容。
因此,我们需要找到一种方法来突破 HTML 元素和 AutoHotkey 之间的这堵墙进行通信。幸运的是,HTML 的同一边有一个玩家能够说 AHK 的术语:JavaScript!
为什么?简单来说,JavaScript 可以在元素获得或失去焦点时执行操作。其中一个操作可以是更改页面标题。这反过来会更改 Google Chrome 的窗口标题,而 AHK 可以读取窗口标题!
设置:
安装我的InputFocusTitleChange.user.js用户脚本。(来源)
现在您可以在 AutoHotkey 中使用以下语法:
SetTitleMatchMode, RegEx #x:: ; normal hotkey ; do something return #IfWinActive, \[AHK\] - Google Chrome$ #x:: ; input/textarea focus hotkey ; do something return #IfWinActive
示范:
当 HTMLinput
或textarea
元素获得焦点时,用户脚本会附加[AHK]
到页面标题,从而更改 Google Chrome 的窗口标题。
无论窗口的标题是否以 结尾"[AHK] - Google Chrome"
,AHK 都可以使用此特性将 HTML input
/textarea
焦点与一组命令间接连接起来。
笔记:
根据我的测试,有两个问题:
如果页面加载时
input
/已经获得焦点,则可能无法将其添加到页面标题中。您必须将焦点从元素移开然后再移回,才能更改标题。textarea
[AHK]
如果
input
/textarea
元素是在页面加载后动态生成的(这也是脚本加载时),那么这些元素将不会产生任何效果。
我将继续致力于此解决方案。如果您有任何建议或知道如何解决这些 JavaScript 问题,请随时告诉我和/或做出贡献。源代码发布在上面并托管在 Github 上。