Как отфильтровать и переопределить ввод текста в Mac OS X
Я пытаюсь выяснить код ObjC, необходимый для определения, вводит ли пользователь в OSX текст в текстовое поле / область или нет. Я хотел бы предоставить специальные сочетания клавиш и расширение текста, если они есть. Я не пишу ключевой сниффер.
Я попытался сделать это, обнаружив, скрыт ли курсор ИЛИ режим курсора - IBeam, но это не работает. Например, ложный положительный случай - когда Chrome скрывает курсор при переключении вкладок, поэтому пользователь не находится в режиме ввода текста, но курсор скрыт.
Любая помощь будет принята с благодарностью.
Благодарю.
3 ответа
Мне удалось найти текущий элемент пользовательского интерфейса с фокусом с помощью API-интерфейса Accessibility, а затем посмотреть на его описание роли, чтобы определить, был ли это текстовый ввод.
Возможно, вам даже не понадобится писать приложение, если то, что вы хотите, достижимо с помощью словаря привязок клавиш по умолчанию или встроенной функции замены текста в Snow Leopard; для последнего см. вкладку "Текст" на панели "Язык и текст" в Системных настройках.
Невозможно определить, когда пользователь входит в режим "ввода текста" глобально, поскольку это определяется на уровне приложения. Вы можете делать определенные вещи (как указано выше) в текстовой системе, предоставляемой платформой AppKit, но вы не сможете повлиять на приложения, которые не используют его, такие как приложения Adobe и любое поле ввода текста во Flash-ролике (например, "Введите свое имя для доски рекордов:"). Единственные вещи, которые существуют в масштабе всей системы, - это ключевые события, которые намного ниже уровня, чем концепция ввода текста, и безопасный текстовый режим [1], который предназначен только для таких вещей, как поля пароля.
[1]: TN2150 описывает, как работает режим "безопасного ввода события", и ручной интерфейс к нему. Большинство приложений (Какао) просто используют NSSecureTextField, который делает тяжелую работу за вас.
Вы можете перехватить и переопределить весь ввод текста, создав собственный метод ввода. Вы можете сделать это программно ( набор из 5 примеров кода) или с помощью текстового файла правил (менее мощный вариант).