Как отфильтровать и переопределить ввод текста в Mac OS X

Я пытаюсь выяснить код ObjC, необходимый для определения, вводит ли пользователь в OSX текст в текстовое поле / область или нет. Я хотел бы предоставить специальные сочетания клавиш и расширение текста, если они есть. Я не пишу ключевой сниффер.

Я попытался сделать это, обнаружив, скрыт ли курсор ИЛИ режим курсора - IBeam, но это не работает. Например, ложный положительный случай - когда Chrome скрывает курсор при переключении вкладок, поэтому пользователь не находится в режиме ввода текста, но курсор скрыт.

Любая помощь будет принята с благодарностью.

Благодарю.

3 ответа

Решение

Мне удалось найти текущий элемент пользовательского интерфейса с фокусом с помощью API-интерфейса Accessibility, а затем посмотреть на его описание роли, чтобы определить, был ли это текстовый ввод.

Возможно, вам даже не понадобится писать приложение, если то, что вы хотите, достижимо с помощью словаря привязок клавиш по умолчанию или встроенной функции замены текста в Snow Leopard; для последнего см. вкладку "Текст" на панели "Язык и текст" в Системных настройках.

Невозможно определить, когда пользователь входит в режим "ввода текста" глобально, поскольку это определяется на уровне приложения. Вы можете делать определенные вещи (как указано выше) в текстовой системе, предоставляемой платформой AppKit, но вы не сможете повлиять на приложения, которые не используют его, такие как приложения Adobe и любое поле ввода текста во Flash-ролике (например, "Введите свое имя для доски рекордов:"). Единственные вещи, которые существуют в масштабе всей системы, - это ключевые события, которые намного ниже уровня, чем концепция ввода текста, и безопасный текстовый режим [1], который предназначен только для таких вещей, как поля пароля.

[1]: TN2150 описывает, как работает режим "безопасного ввода события", и ручной интерфейс к нему. Большинство приложений (Какао) просто используют NSSecureTextField, который делает тяжелую работу за вас.

Вы можете перехватить и переопределить весь ввод текста, создав собственный метод ввода. Вы можете сделать это программно ( набор из 5 примеров кода) или с помощью текстового файла правил (менее мощный вариант).

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