Как получить текст с экрана - PullRequest
4 голосов
/ 05 февраля 2009

Есть какой-то вызов Win OS API или около того, что позволило бы получить текст с экрана

не путем получения снимка и последующего распознавания, а через API

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

Так работают такие инструменты, как Вавилон (http://www.babylon.com) и ответы в один клик (http://www.answers.com/main/download_answers_win.jsp) и многие другие.

)

Может кто-нибудь указать мне правильное направление, чтобы получить эту функциональность?

Ответы [ 4 ]

2 голосов
/ 05 февраля 2009

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

Однако вы можете попробовать метод, который заключается в том, чтобы найти окно непосредственно под мышью и попытаться получить от него текст. Это будет нормально работать на большинстве стандартных элементов управления Windows (ярлыки, текстовые поля и т. Д.), Однако не будет работать в интернет-браузерах.

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

1 голос
/ 05 февраля 2009

Вы можете получить текст каждого окна с помощью API GetWindowText. Положение мыши можно найти с помощью API GetCursorPos.

В Delphi вы можете использовать эту функцию (спасибо Питеру ниже)

Function ChildWindowUnderCursor: HWND;
Var
  hw, lasthw: HWND;
  pt, clientpt: TPoint;
Begin
  Result := 0;
  GetCursorPos( pt );
  // find top-level window under cursor
  hw := WindowFromPoint( pt );
  If hw = 0 Then Exit;

  // look for child windows in the window recursively
  // until we find no new windows
  Repeat
    lasthw := hw;
    clientpt := Pt;
    Windows.ScreenToClient( lasthw, clientpt );
    // Use ChildwindowfromPoint if app needs to run on NT 3.51!
    hw := ChildwindowFromPointEx( lasthw, clientpt, CWP_SKIPINVISIBLE );
  Until hw = lasthw;
  Result := hw;
End;

С уважением,
Ливны

0 голосов
/ 28 октября 2017

В Windows есть API для инструментов доступности, таких как программы чтения с экрана для слепых. (Более новые версии также используются для других целей, таких как автоматизация пользовательского интерфейса и тестирование.) Он работает со многими приложениями, даже с большинством браузеров, которые отображают свой собственный контент без использования стандартных элементов управления Windows. Он не будет работать со всеми приложениями, но в большинстве случаев его можно использовать для определения текста под мышью.

Текущий API называется Windows Automation API . Описание того, как это сделать в целом, выходит за рамки ответа о переполнении стека, поэтому я просто предоставил ссылку на документацию.

Более старый API, который был широко доступен, когда этот вопрос был впервые опубликован, называется Microsoft Active Accessibility API . Как и в случае с современными API, область действия здесь слишком широка, чтобы детализировать ее.

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

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

0 голосов
/ 05 февраля 2009

Я думаю, это называется буфер обмена. Я собираюсь поспорить, что эти программы вводят события щелчка, двойного щелчка и клавиатуры, а затем копируют туда предметы для проверки. Кроме того, они могут работать с текстовыми элементами управления Windows и таким образом получать контент. я подозреваю, что из-за проблем с безопасностью, эти инструменты также могут работать в Vista.

...