Возможно, вы захотите посмотреть сообщение WM_GETTEXT . Это может использоваться для чтения текста из других окон - это архаичная часть Windows API, и если вы находитесь в C #, вам потребуется p / invoke для этого.
Проверьте на этой странице для примера того, как сделать это в C #.
По сути, вы сначала FindControlEx (), чтобы получить дескриптор окна, которое вы хотите (по заголовку).
Во-вторых, вы рекурсивно перечислите элементы управления в этом окне с помощью EnumChildWindows (), чтобы найти все дочерние элементы управления окна и все эти дочерние элементы, пока у вас не будет полной карты целевой формы.
Вот выделенная часть превосходного объяснения Тета-га из ответов Google:
Чтобы получить содержимое любого элемента управления textbox или listbox, все, что нам нужно, - это дескриптор окна. Если вы уже получили ручку окна, переходите к части 2 объяснения.
ЧАСТЬ 1: Получение ручки управления
- Чтобы получить дескриптор элемента управления, мы сначала получаем дескриптор его родительского окна. Мы можем сделать это с помощью метода Win32 FindControlEx (). Этот метод берет заголовок окна (например, «Калькулятор») и / или имя его класса и возвращает его дескриптор.
- Как только мы получим дескриптор родительского окна, мы можем вызвать метод Win32 EnumChildWindows. Этот метод принимает метод обратного вызова, который он вызывает с дескриптором каждого дочернего элемента управления, который он находит для указанного родителя. Например, если мы вызовем этот метод с помощью дескриптора окна «Калькулятор», он вызовет метод обратного вызова с дескриптором элемента управления «текстовое поле», а затем снова с дескрипторами каждой из кнопок в окне «Калькулятор» и т. Д. .
- Поскольку нас интересует только дескриптор элемента управления textbox, мы можем проверить класс окна в методе обратного вызова. Для этого можно использовать метод Win32 GetClassName (). Этот метод берет дескриптор окна и предоставляет нам строку, содержащую имя класса. Таким образом, текстовое поле принадлежит? Изменить? класс, список для класса «ListBox» и так далее. Как только вы определили, что у вас есть ручка для правильного управления, вы можете прочитать его содержимое.
ЧАСТЬ 2: чтение содержимого элемента управления
- Вы можете прочитать содержимое элемента управления с помощью функции Win32 SendMessage () и использовать ее для передачи сообщения WM_GETTEXT целевому элементу управления. Это даст вам текстовое содержание элемента управления. Этот метод будет работать для текстового поля, кнопки или статического элемента управления.
- Однако вышеприведенный подход потерпит неудачу, если вы попытаетесь прочитать содержимое списка. Чтобы получить содержимое списка, нам нужно сначала использовать SendMessage () с сообщением LB_GETCOUNT, чтобы получить количество элементов списка. Затем нам нужно вызвать SendMessage () с сообщением LB_GETTEXT для каждого элемента в списке.