Родной каретный макос какао - PullRequest
0 голосов
/ 07 мая 2018

Я хочу иметь возможность получить глобальную позицию каретки внутри любого приложения в Mac High Sierra, используя какао или appleScript. Я уже использую NSEvent, чтобы получить хук клавиатуры и мыши, но есть ли способ получить хук положения каретки?

Каретка отличается от положения мыши. Он перемещается по ключевому событию или щелчку мышью. В окнах вы можете получить позицию каретки практически где угодно. Я хочу знать, есть ли эквивалент для macos.

Я хочу показать всплывающее окно над текстовой кареткой, если я набираю текст на клавиатуре или в строке, она перемещается вместе с текстом. Я пытался получить позицию ключевого события (locationInWindow), но он возвращает мне мышь позиция. Я не песочница, поэтому я могу даже называть applecripts

ОБНОВЛЕНИЕ: это можно сделать, получив границы письма перед кареткой с использованием API специальных возможностей.

спасибо

1 Ответ

0 голосов
/ 10 мая 2018

У меня пока нет возможности попробовать это для себя, так что вы можете побить меня до удара "подтвердить / отклонить это".

UIEvent имеет addGlobalMonitorForEventsMatchingMask:handler:, где маска может иметь значение NSEventMaskCursorUpdate, и, вероятно, возвращенный объект NSEvent будет содержать координату, на которую можно воздействовать (т.е. преобразовывать в экранное пространство).

Осторожно, вот документы прямо говорят

События, связанные с ключами, могут отслеживаться только при включенной доступности или если ваше приложение является доверенным для доступа с расширенными возможностями (см. AXIsProcessTrusted).

Похоже, что в вашем сообщении вы не хотите использовать Accessibility API («но если не используете accessibility API»), так что может означать, что вам не повезло в конкретной комбинации требований, которые вы стремиться выполнить.

...