C # - чтение текста из существующего процесса - PullRequest
2 голосов
/ 16 сентября 2009

Нам нужно прочитать текст из существующего приложения VB6. Поэтому мы используем методы FindWindow, GetWindowText и EnumChildWindows из kernel32 и можем перечислять и читать отображаемый текст в этом процессе.

Мы можем прочитать 90% текста с помощью нашего метода, но в целом существует определенный элемент управления (или блок), который мы не можем прочитать.

Мы не можем нацелить текст, который нам нужно прочитать, с помощью программ шпионского интерфейса, поэтому я предполагаю, что они должны отображать его непосредственно на экране с помощью GDI / GDI +. Они не могут использовать элемент управления или окно для отображения нужного нам текста.

Есть ли способ определить, как они воспроизводят текст, и, возможно, прочитать его?

Мы не хотим захватывать hDC окна и отображать его на растровом изображении и каким-то образом реверсировать CAPTCHA текст ... это может быть кошмаром.

РЕШЕНИЕ: Мы обнаружили, что для использования можно просто искать 2-3 фразы в этом поле по сравнению с фактическим распознаванием текста. Итак, мы собираемся отрендерить его в растровое изображение и сравнить его с 2-3 предварительно сохраненными растровыми изображениями, чтобы можно было просто сравнивать пиксель за пикселем.

Главный ответ привел нас к этому решению.

1 Ответ

1 голос
/ 16 сентября 2009

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

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

Это не будет так сложно, как, например, сделать OCR на почерке. Если вы можете определить шрифт, используемый приложением Visual Basic 6 для рисования текста, и до тех пор, пока текст, который вы хотите очистить, каждый раз рисуется в одном и том же месте в форме, разбить текст будет относительно легко. нарисовать текст в виде отдельных символов (в виде маленьких маленьких растровых изображений), а затем сравнить каждый из них с предварительно сгенерированной коллекцией символов, которые вы нарисовали одним и тем же шрифтом и одинакового размера. Символы будут идеально совпадать на попиксельной основе.

Возможно, проблема в том, что программа работает на разных системах и рисует текст разными шрифтами.

...