Как мне перехватить два текстовых поля без заголовка и одного класса?
Итак, я пытаюсь захватить окно с двумя текстовыми полями и отправить текст в оба этих текстовых поля. Но оба текстовых поля не имеют заголовка и имеют одинаковое имя класса "Редактировать". Пока все, что я могу сделать, это захватить первое текстовое поле и все.
Ниже приведен мой код.
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
1 ответ
Решение
Используйте второй параметр для FindWindowEx() с именем "hwndChildAfter":
Ручка для дочернего окна. Поиск начинается со следующего дочернего окна в Z-порядке. Дочернее окно должно быть прямым дочерним окном hwndParent, а не просто окном-потомком.
Таким образом, вы должны быть в состоянии передать первый дескриптор текстового поля, чтобы получить следующий как это:
txt2 = FindWindowEx(hwnd, txt, "Edit", vbNullString)