Как отфильтровать и переопределить ввод текста в Mac OS X - PullRequest
5 голосов
/ 21 апреля 2011

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

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

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

Спасибо.

Ответы [ 3 ]

3 голосов
/ 22 апреля 2011

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

0 голосов
/ 21 апреля 2011

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

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

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

0 голосов
/ 21 апреля 2011

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

...