Как прочитать содержимое сообщения WM_PAINT? - PullRequest
0 голосов
/ 09 июня 2018

Моя цель - отсканировать часть программы, которая постоянно обновляется новым текстом.Я пробовал OCR с Tesseract, но я считаю, что было бы намного эффективнее как-то перехватить текст, если это возможно.Я пытался использовать функцию GetWindowText (), но она возвращает только заголовок окна.Используя Window Detective Я определил, что всякий раз, когда окно обновляется так, как я хочу, сообщение WM_PAINT надежно отправляется в окно.

Я немного заглядываю в Windows API Hooks, но похоже, что большинство этих методов, включающих внедрение DLL, предназначены для отправки новых сообщений, а не доступа к содержимому уже отправленных сообщений.

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 11 июня 2018

Когда вы говорите «экранная царапина», это действительно то, что вы имеете в виду?Читая ваше сообщение, кажется, что вы действительно хотите получить текст в дочернем окне или рассматриваемом элементе управления - как текст, а не только как растровое изображение.Для этого вам необходимо:

  1. Определить, какое дочернее окно или элемент управления фактически содержит текст, который вы хотите получить.Похоже, вы, возможно, уже сделали это, но если нет, то в качестве инструмента выбора обычно Spy ++ .(Обратите внимание: используемая вами версия Spy должна соответствовать «разрядности» вашего приложения.)

  2. Затем, во-первых, попытайтесь выяснить, может ли быть текст в этом окне.восстановлено как-то.Если это стандартный элемент управления Windows (в частности, EDIT или RICHEDIT), то есть документированные способы сделать это, см. MSDN.

  3. Если это не удастся, возможно, вы добились некоторого успехазвонки на ExtTextOut(), хотя это не приятное предложение, и я думаю, что вы можете изо всех сил пытаться его достичь.Тем не менее, я полагаю, что принятый способ (в некотором смысле слова «принят») составляет здесь .

  4. Со ссылкой на пункт 3, даже если вы достигнетеитак, как вы узнали бы, что какой-то конкретный вызов ExtTextOut() рисует интересующее вас окно?Ответ, скорее всего, HWND WindowFromDC().

Надеюсь, это немного поможет.Пожалуйста, не возвращайтесь ко мне с подробными вопросами о том, как это может относиться к вашему конкретному варианту использования.Меня это не очень интересует, это всего лишь несколько указателей.

...