Как захватить два текстовых поля без заголовка и одного и того же класса?

Итак, я пытаюсь захватить окно с двумя текстовыми полями и отправить текст в оба этих текстовых поля. Но оба текстовых поля не имеют заголовка и одного и того же имени класса «Редактировать». Пока все, что я могу сделать, это захватить первое текстовое поле и все.

Ниже вставлен мой код.

Imports System.Runtime.InteropServices
Imports System.Text

Public Class Form1

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, _
     ByVal lParam As String) As Integer

    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
    (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, _
     ByVal lpsz2 As String) As Integer

    Private Const WM_SETTEXT As Integer = &HC

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As  _
    System.EventArgs) Handles Button1.Click

        Dim hwnd As Integer
        Dim txt As Integer
        Dim text As String

            hwnd = FindWindow(vbNullString, "Description")
            If hwnd <> Nothing Then
                txt = FindWindowEx(hwnd, 0, "Edit", vbNullString)
                If txt <> Nothing Then
                    text = "00000"
                    SendMessage(txt, WM_SETTEXT, 0, text)
                End If
            End If

    End Sub

End Class

person Jayesh Surendran Menon    schedule 25.10.2013    source источник
comment
Какое это имеет отношение к функциям Window API, кроме того факта, что вы их используете?   -  person Robert Harvey    schedule 25.10.2013
comment
извините, если я ввел неправильный заголовок   -  person Jayesh Surendran Menon    schedule 25.10.2013


Ответы (1)


Используйте второй параметр FindWindowEx() с именем «hwndChildAfter»:

Дескриптор дочернего окна. Поиск начинается со следующего дочернего окна в порядке Z. Дочернее окно должно быть прямым дочерним окном hwndParent, а не просто дочерним окном.

Таким образом, вы должны иметь возможность передать первый дескриптор текстового поля, чтобы получить следующее:

txt2 = FindWindowEx(hwnd, txt, "Edit", vbNullString)
person Idle_Mind    schedule 25.10.2013
comment
Похоже, это должно сработать. Я написал код, используя ваши комментарии, и буду тестировать его в течение следующих двух с половиной часов и сообщу вам как можно скорее. Большое спасибо за ваш вклад - person Jayesh Surendran Menon; 25.10.2013
comment
Вы также можете передать txt в GetWindow API с флагом GW_HWNDNEXT. Если указанное окно является дочерним окном, дескриптор идентифицирует родственное окно. - person Idle_Mind; 25.10.2013