Нахождение рамки слова (положение и размер) на экране с помощью какао или углерода - PullRequest
1 голос
/ 30 октября 2009

Вот сложный вопрос:

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

Например, я хотел бы иметь возможность определять положения слов в (но не ограничиваясь этим) Word, Excel и PowerPoint для Mac, а также в Safari и других.

Решение должно быть как можно быстрее; Я должен быть в состоянии найти по крайней мере 5-6 слов в секунду и использовать как можно меньше процессорного времени.

Вот что я думал до сих пор:

  • OCR в контексте экрана / графики окна (какая-нибудь хорошая платформа с открытым исходным кодом, которая работает в Mac OS X 10.4 и может быть использована в коммерческом продукте?). Evernote очень хорошо распознает слова на изображениях. Я не знаю, использует ли он собственный внутренний или коммерческий движок с открытым исходным кодом, но я бы хотел использовать такой механизм, если это «правильное» решение. В идеале я бы обнаружил фрейм слова в окне активного приложения (как получить фрейм другого приложения?).
  • Получение какой-то "зацепки" при рисовании текста в Кварце и перехват местоположения слова при его прорисовке (на первый взгляд кажется не очень возможным!).
  • AppleScript, но это во многом зависит от того, какой API предлагает приложение (я не думаю, что вы можете получить координаты слова в документе Word из того, что я видел), и это медленно .
  • ... вне идей ...

Моя цель - привести все рамки слова в абзаце в правильном порядке на основе строки, содержащей текст абзаца.

Заранее спасибо за любые подсказки!

Ответы [ 2 ]

2 голосов
/ 31 октября 2009

В качестве отправной точки вы можете взглянуть на код QuickCursor . Он извлекает текст из множества различных приложений через AX Accessibility API . Теперь он не будет захватывать размещение слова в пикселях, но по крайней мере вернет строку NSString, связанную с текстом в этом элементе пользовательского интерфейса. Конечно, это означает, что рассматриваемое приложение должно поддерживать эти API; Я не знаю, если бы MS Office Suite. Кроме того, он поддерживает только редактируемые элементы, поэтому не редактируемая веб-страница в Safari также не будет работать. Но это может дать вам отправную точку для некоторых идей.

Взгляните на QCUIElement.{m,h}, а затем на реализацию в QCAppDelegate.m (beginQuickCursorEdit:) ... реализация его абстрактного QCUIElement выглядит так же просто, как:

QCUIElement *focusedElement = [QCUIElement focusedElement];
id value = focusedElement.value;

Редактировать : Ага! Ознакомьтесь с примером кода инспектора специальных возможностей: UIElementInspector . На самом деле он может получить AXPosition элементов на странице. Теперь это не слово в слово, но мы все ближе. Он сообщит вам о расположении текстового блока по x, y, а также о словах, содержащихся в текстовом блоке.

1 голос
/ 31 октября 2009

Это возможно, но очень трудно получить надежную работу. Вы можете поиграть с функцией Direct Connect *1002* Spell Catcher, чтобы увидеть пример.

...