Как получить текст с экрана
Вопрос
Существует какой-то вызов API Win OS или около того, который позволяет получать текст с экрана.
не путем получения снимка и последующего его распознавания, а через API
идея состоит в том, чтобы получить текст, находящийся под курсором мыши, на который пользователь указывает и на который щелкает.
Вот как такие инструменты, как Babylon (http://www.babylon.com) и ответы в один клик (http://www.answers.com/main/download_answers_win.jsp) и многие другие работают.
Может ли кто-нибудь указать мне правильное направление, чтобы получить эту функциональность?
Решение
Прямого способа получить текст не существует.Приложение может отображать текст миллионом различных способов (одним из которых является Windows API), и после его обработки — это просто набор пикселей.
Однако вы можете попробовать найти окно прямо под курсором мыши и попытаться получить из него текст.Это будет нормально работать с большинством стандартных элементов управления Windows (метками, текстовыми полями и т. д.), однако не будет работать в интернет-браузерах.
Я думаю, лучшее, что вы можете сделать, это сделать свое приложение таким, чтобы оно поддерживало как можно больше различных (общих) элементов управления описанным выше способом.
Другие советы
Вы можете получить текст каждого окна с помощью 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;
С уважением,
Ливен
В Windows есть API для инструментов специальных возможностей, таких как программы чтения с экрана для слепых.(Более новые версии также используются для других целей, таких как автоматизация и тестирование пользовательского интерфейса.) Он работает со многими приложениями, даже с большинством браузеров, которые отображают собственный контент без использования стандартных элементов управления Windows.Он работает не со всеми приложениями, но в большинстве случаев его можно использовать для определения текста под курсором мыши.
Текущий API называется API автоматизации Windows.Описание того, как это сделать в целом, выходит за рамки ответа на вопрос о переполнении стека, поэтому я просто предоставил ссылку на документацию.
Старый API, который был широко доступен, когда этот вопрос был впервые опубликован, называется API Microsoft Active Accessibility.Как и в случае с современными API, область применения здесь слишком широка, чтобы подробно описывать ее здесь.
Обратите внимание, что документация для обоих API написана как для разработчиков, создающих инструменты специальных возможностей (например, программы чтения с экрана), так и для разработчиков, пишущих приложения, которые хотят быть совместимыми с этими инструментами специальных возможностей.
Основная идея заключается в том, что инструмент специальных возможностей получает COM-интерфейсы, предоставляемые окнами целевого приложения, и может использовать эти интерфейсы для определения элементов управления и их текста, а также того, как они связаны как логически, так и пространственно.Приложения, состоящие из стандартных элементов управления Windows, в большинстве случаев поддерживаются автоматически.Приложениям с пользовательскими реализациями пользовательского интерфейса приходится выполнять работу по обеспечению этих интерфейсов.К счастью, наиболее важные из них, такие как основные браузеры, проделали работу по поддержке этих интерфейсов.
я думаю, это называется буфер обмена.Я готов поспорить, что эти программы вводят события щелчка, двойного щелчка и клавиатуры, а затем копируют туда элементы для проверки.Альтернативно, они путаются с текстовыми элементами управления Windows и таким образом захватывают контент.Я подозреваю, что из-за проблем с безопасностью эти инструменты также имеют проблемы с запуском в Vista.