3

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

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

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

1 ответ1

8

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

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

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

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

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


Заметки:

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .