Поиск рамки слова (положение и размер) на экране с помощью Cocoa или Carbon
-
22-07-2019 - |
Вопрос
Вот один из сложных вопросов:
Мне нужно иметь возможность находить положение и размер слова (его рамки) на экране (достаточно его первого появления, оттуда я смогу получить следующие).
Например, я хотел бы иметь возможность определять позиции слов в (но не ограничиваясь ими) 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, а также о словах, содержащихся в текстовом блоке.
Другие советы
Это возможно, но очень трудно добиться надежной работы.Вы можете играть с Прямое подключение Ловца заклинаний функция для просмотра примера.