Самый глубокий AutoHotkey (AHK), который можно обнаружить в Google Chrome и связанный с веб-контентом, - это элемент управления Chrome_RenderWidgetHostHWND1
. Этот элемент управления является окном просмотра для веб-контента. Наши HTML-элементы input
и textarea
немного глубже, в 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
Демонстрация:
Когда элемент input
HTML или textarea
имеет фокус, пользовательский скрипт добавляет [AHK]
к заголовку страницы, изменяя заголовок окна Google Chrome.
AHK может использовать эту характеристику, если заголовок окна оканчивается на "[AHK] - Google Chrome"
или нет, чтобы косвенно связать фокус input
HTML /textarea
с набором команд.
Заметки:
Из моего тестирования есть две проблемы:
Если input
/textarea
уже сфокусирована при загрузке страницы, [AHK]
может не добавляться к заголовку страницы. Вы должны отодвинуть фокус от элемента и затем вернуться, чтобы изменить название.
Если элемент input
/textarea
генерируется динамически после загрузки страницы (это также происходит при загрузке скрипта), эти элементы не будут иметь никакого эффекта.
Я буду продолжать работать над этим решением. Если у вас есть какие-либо предложения или вы знаете способ борьбы с этими проблемами JavaScript, пожалуйста, дайте мне знать и / или внести свой вклад. Источник размещен выше и размещен на Github.