Поиск рамки слова (положение и размер) на экране с помощью Cocoa или Carbon

StackOverflow https://stackoverflow.com/questions/1651938

Вопрос

Вот один из сложных вопросов:

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Это возможно, но очень трудно добиться надежной работы.Вы можете играть с Прямое подключение Ловца заклинаний функция для просмотра примера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top