Как использовать фокус ввода / текста в качестве условия для горячих клавиш

У меня есть AutoHotkey, настроенный таким образом, чтобы распознавать сочетания клавиш Cmd + Left и Cmd + Right в качестве навигации назад / вперед в Chrome.

Проблема в том, что он также распознает нажатия клавиш во время ввода текста в текстовые поля. Однако при вводе текста я бы хотел, чтобы эти комбинации клавиш выполняли другую функцию - переход к началу / концу строки, аналогично Ctrl + Влево / Вправо.

Есть ли способ, чтобы одно сопоставление работало для текстовых полей, а другое - для всего остального в AutoHotkey?

1 ответ

Самый глубокий AutoHotkey (AHK), который можно обнаружить в Google Chrome и связанный с веб-контентом, - это Chrome_RenderWidgetHostHWND1 контроль. Этот элемент управления является окном просмотра для веб-контента. наш input а также textarea Элементы HTML немного глубже, внутри 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
    

Демонстрация:

Когда HTML input или же textarea элемент имеет фокус, пользовательский скрипт добавляет [AHK] на заголовок страницы, изменяя заголовок окна Google Chrome.

заголовок окнаГугл Хром

AHK может использовать эту характеристику, если заголовок окна заканчивается "[AHK] - Google Chrome" или нет, чтобы косвенно подключить HTML input / textarea сосредоточиться с набором команд.


Заметки:

Из моего тестирования есть две проблемы:

  1. Если input / textarea уже сфокусирован, когда страница загружается, [AHK] не может быть добавлено к заголовку страницы. Вы должны отодвинуть фокус от элемента и затем вернуться, чтобы изменить заголовок.

  2. Если input / textarea элемент динамически генерируется после загрузки страницы (это также происходит при загрузке скрипта), тогда эти элементы не будут иметь никакого эффекта.

Я буду продолжать работать над этим решением. Если у вас есть какие-либо предложения или вы знаете способ борьбы с этими проблемами JavaScript, пожалуйста, дайте мне знать и / или внести свой вклад. Источник размещен выше и размещен на Github.

Другие вопросы по тегам