Копирование текста из текстового поля в C ++ - PullRequest
2 голосов
/ 12 июля 2009

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

Как правило, какие методы / темы я должен использовать, чтобы "проникнуть внутрь" другого .exe, работающего в моей системе, и извлечь данные из текстового поля внутри него, используя C ++?

Мне просто нужен указатель на то, как я могу этого достичь. Спасибо.

Ответы [ 3 ]

4 голосов
/ 12 июля 2009

Другим распространенным методом «проникновения» в приложение с графическим интерфейсом (для Windows) является DLL Injection + Windows Subclassing. Это, вероятно, считается несколько продвинутым Windows-программированием. Отличная книга по этой теме - «Windows Via C / C ++». Краткое представление о том, что это по сути:

  1. Вставьте свою пользовательскую DLL в адресное пространство целевой программы.
  2. Найдите HWND для целевого текстового поля.
  3. Подкласс функций, которые имеют отношение к изменению / редактированию этого текстового поля.
  4. Теперь, когда кто-либо редактирует / изменяет текст, сначала вызывается ваша функция, позволяющая вам видеть / манипулировать текстом. Вы даже можете не перенаправлять его на обычный обработчик.

Также обратите внимание, что ничто из того, что я упомянул выше, никоим образом не является «взломом окон», это четко определенное поведение, которое было намеренно реализовано Microsoft. Это довольно хорошо задокументировано на MSDN.

Если вы хотите сделать это, взгляните на «Windows Subclassing» и «Setting Hooks».

4 голосов
/ 12 июля 2009

Вы можете просто использовать EnumChildWindows и SendMessage с WM_GETTEXT для конкретного окна, из которого вы хотите получить текст.

0 голосов
/ 12 июля 2009

См. Как я создал работающего онлайн покерного бота: извлечение текста из сторонних приложений для объяснения методов ввода и подкласса, упомянутых @DeusAduro, а также нескольких других методов для то же самое, например, перехват API-интерфейсов для вывода текста GDI. И, конечно, если это стандартное текстовое поле, вы всегда можете отправить WM_GETTEXT, это работает даже через границы процесса (фактически было разработано для работы через границы процесса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...