c ++ win32 обнаружение выделения текста, выборка и изменение в другом приложении - PullRequest
2 голосов
/ 21 февраля 2012

Я видел приложение, используемое для помощи слепым, оно называется JAWS (оно работает как программа чтения с экрана), оно обнаруживает строку и читает ее во многих приложениях, таких как приложения MS Office, блокнот, Internet Explorer .....так далее.Можно ли обнаружить выделение текста в другом приложении?Как? Я думаю, что доступность используется, но я не знаю, как это сделать!Я могу заменить обнаружение выбора нажатием на клавишу._ Я пытался найти решение, как следующие

  1. получить верхнее и активированное окно или из местоположения мыши.
  2. получить дочерний элемент из местоположения мыши.
  3. getвыделенный текст или установить его.

В MS Word я использовал spy ++, чтобы обнаружить элемент управления, содержащий текст, который я получаю «Документ Microsoft Word» enter image description here

1 Ответ

4 голосов
/ 21 февраля 2012

Нет простого способа сделать это, потому что нет единого последовательного способа получить текст (выбранный или иным образом) из произвольных приложений.Приложения, такие как JAWS, обычно имеют целый ряд используемых ими техник, в зависимости от приложения или элемента управления:

  • Для элементов управления EDIT и RichEdit работают различные EM_ сообщения .

  • Для Internet Explorer можно использовать HTML DOM .

  • Для Word текст Интерфейсы объектной модели могут использоваться для доступа к тексту и форматированию.Другие приложения могут поддерживать аналогичные модели для конкретных приложений.

  • Некоторые (но не все) приложения и каркасы приложений поддерживают такие API-интерфейсы, как UIAutomation или IAccessible2 , который обеспечивает доступ к информации об элементах управления в приложении, а также к информации о тексте и выделении текста.

  • Для приложений, которые не поддерживают ничего из вышеперечисленного, программы чтения с экрана частоиспользуйте технику, называемую внеэкранной моделью , сложную технику, которая включает в себя перехват всех вызовов графического вывода и ведение в памяти базы данных того, что было нарисовано где, чтобы они могли искать текст, который должен бытьв любой точке экрана.

Поскольку ни один из них не охватывает все по-своему, программы для чтения с экрана обычно пробуют все из них в соответствии с текущим приложением: вы можете почти придумать программу для чтения с экранакак библиотека специального кода для извлечения информации из различных приложений.

...