Я знаю, что мой код не настолько изящный, но он должен работать, а это не так. Чтобы дать голову, я добавляю свои массивы в список, чтобы я мог их видеть, пока я получаю код.vb.net findwindowex не работает, чтобы найти ребенка по названию
cb = New CallBack(AddressOf MyCallBack)
EnumWindows(cb, 0)
Dim CadTITLE As String = ""
For Each item As String In ListBox1.Items
If item.Contains("Program Name") Then
CadTITLE = item
End If
Next
ListBox1.Items.Clear()
Dim Hwnd As IntPtr = FindWindow(Nothing, CadTITLE)
Dim hndls() As IntPtr = GetChildWindows(Hwnd)
Dim CallTITLE As String = ""
For Each hnd In hndls
If Len(GetText(hnd)) > 0 Then
ListBox1.Items.Add(GetText(hnd))
End If
Next
For Each item As String In ListBox1.Items
If item.Contains("Call No") Then
CallTITLE = item
End If
Next
Dim hwnd2 As IntPtr = FindWindowEx(Hwnd, IntPtr.Zero, nothing, CallTITLE)
If hwnd2.Equals(IntPtr.Zero) Then
MsgBox("Not Found")
Else
MsgBox("Found")
End If
Согласно MSDN, я должен быть в состоянии FindWindowEx по названию окна, которое я нашел в переменном CallTITLE (подтвержденный MsgBox (CallTITLE), но она по-прежнему не находит дочернее окно. Это должен вернуть msgbox («найденный»), а затем я могу найти нужное текстовое поле.
М которые пытались возиться с окнами через эти старые API-вызовы, редко бывают приятными. Рассматривали ли вы использование более современного подхода, такого как [Автоматизация пользовательского интерфейса] (https://msdn.microsoft.com/en-us/library/ms747327%28v=vs.110%29.aspx)? –
SIGHHHHHHHH. Мне было интересно, почему все образцы, которые я нашел, были в vb6. Я не думал об этом раньше, но сейчас смотрю в него. – jkeefe56
Итак, компьютеры, на которых мы работаем, используют более старую версию .net framework (pre-4.5, неуверенный, что именно). Таким образом, автоматизация пользовательского интерфейса отсутствует. Хорошее предложение! – jkeefe56