Подтвердить что ты не робот

Экранное скремблирование приложения Windows в С#

Мне нужно очистить данные из приложения Windows, чтобы выполнить запрос в другой программе. Кто-нибудь знает хорошую отправную точку для меня сделать это в .NET?

4b9b3361

Ответ 1

Посмотрите ManagedSpy, исходный код. (ссылка)

Ответ 2

Возможно, вы захотите заглянуть в сообщение WM_GETTEXT. Это может быть используемый для чтения текста из других окон - это архаичная часть Windows API, а если вы находитесь на С# вам нужно p/invoke для него.

Посмотрите эту страницу для примера этого в С#.

В принципе, вы сначала FindControlEx(), чтобы получить дескриптор окна, которое вы хотите (по заголовку).

Во-вторых, вы рекурсивно перечислите элементы управления в этом окне с помощью EnumChildWindows(), чтобы найти все дочерние элементы окна и все эти дочерние дети до тех пор, пока у вас не будет полной карты целевой формы.

Вот выбранная часть отличное объяснение Theta-g от Google Answers:

Чтобы получить содержимое любого текстового поля или элемента управления списком, все, что нам нужно, это дескриптор окна. Если вы уже получили дескриптор окна, перейдите к части 2 объяснения.

ЧАСТЬ 1: Получение дескриптора управления

  • Чтобы получить дескриптор элемента управления, мы сначала получим дескриптор его родительского окна. Мы можем сделать это, используя метод Win32 FindControlEx(). Этот метод принимает заголовок окна (например, "Калькулятор" ) и/или его имя класса и возвращает его дескриптор.
  • Когда у нас есть дескриптор родительского окна, мы можем вызвать метод Win32 EnumChildWindows. Этот метод принимает метод обратного вызова, который он вызывает с помощью дескриптора каждого дочернего элемента управления, который он находит для указанного родителя. Например, если мы назовем этот метод дескриптором окна калькулятора, он вызовет метод обратного вызова с дескриптором элемента управления текстовым полем, а затем снова с помощью ручек каждой из кнопок в окне калькулятора и т.д..
  • Поскольку нас интересует только дескриптор элемента управления textbox, мы можем проверить класс окна в методе обратного вызова. Для этого можно использовать метод GetClassName() Win32. Этот метод принимает дескриптор окна и предоставляет нам строку, содержащую имя класса. Итак, текстовое поле принадлежит? Edit? класс, список в класс ListBox и т.д. После того, как вы определили, что у вас есть дескриптор правильного элемента управления, вы можете прочитать его содержимое.

ЧАСТЬ 2: Чтение содержимого элемента управления

  • Вы можете прочитать содержимое элемента управления с помощью функции Win32 SendMessage() и использовать его для передачи сообщения WM_GETTEXT целевому элементу управления. Это даст вам текстовое содержимое элемента управления. Этот метод будет работать для текстового поля, кнопки или статического контроля.
  • Однако описанный выше подход не будет работать, если вы попытаетесь прочитать содержимое списка. Чтобы получить содержимое списка, нам нужно сначала использовать SendMessage() с сообщением LB_GETCOUNT, чтобы получить количество элементов списка. Затем нам нужно вызвать SendMessage() с сообщением LB_GETTEXT для каждого элемента в списке.

Ответ 3

"Возможно, вы сможете использовать System.Diagnostics.Process.GetProcessesByName(" ProcName ") и получить главный дескриптор окна, оттуда вы можете использовать win32 API для получите дескриптор текстового поля, который будет использоваться для отображения нужного вам текста. С помощью дескриптора текстового поля вы можете получить или установить содержимое. я нет whiz с win32 API, но с небольшим количеством исследований я смог для выполнения аналогичных задач. Надеюсь, это поможет "

Взято отсюда: http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic1657.aspx

Ответ 4

Кодирование Колеса как некоторая статья о том, как он смог получить информацию из Покерного приложения.

Проверьте: deconstructing-the-poker-client-1. Это может быть полезно.

Ответ 5

screenscraperstudio.com

Он создает код VB "диалогового окна скребка".

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