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


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

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

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


3
2018-06-27 02:09


происхождения


Это будет сложно, потому что AHK не может обнаружить отдельные элементы внутри веб-контента, но у меня есть некоторые трюки в моем рукаве для выполнения этой работы без большой работы. ;) - iglvzx
Каковы ваши трюки, @iglvzx? - Art


ответы:


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

Итак, нам нужно найти способ общения через эту стену между элементами HTML и AutoHotkey. К счастью, есть игрок на той же стороне, что и HTML, который может говорить о лингере AHK: JavaScript!

Как так? Проще говоря, JavaScript может выполнять действие, когда элемент получает или теряет фокус. Одним из таких действий может быть изменение названия страницы. Это, в свою очередь, изменяет заголовок окна Google Chrome, и AHK может читать заголовки окон!


Настроить:

  1. Установите мой InputFocusTitleChange.user.js userscript. (Источник)

  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 элемент имеет фокус, добавляет usercript [AHK] на название страницы, изменив заголовок окна Google Chrome.

window title  google chrome

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


Заметки:

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

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

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

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


8
2018-06-28 22:56



Ничего себе это очень подробно! Я скоро отдам его! Благодаря! - Art
Итак, как я могу использовать это, чтобы вставить следующее: `#IfWinActive, ahk_class Chrome_WidgetWin_1 BackSpace :: Send, {Left} {Delete}` ... когда в Chrome, но не в textarea/input? - DiMono