2015-05-07 2 views
-1

Я знаю, что мой код не настолько изящный, но он должен работать, а это не так. Чтобы дать голову, я добавляю свои массивы в список, чтобы я мог их видеть, пока я получаю код.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 («найденный»), а затем я могу найти нужное текстовое поле.

+0

М которые пытались возиться с окнами через эти старые API-вызовы, редко бывают приятными. Рассматривали ли вы использование более современного подхода, такого как [Автоматизация пользовательского интерфейса] (https://msdn.microsoft.com/en-us/library/ms747327%28v=vs.110%29.aspx)? –

+0

SIGHHHHHHHH. Мне было интересно, почему все образцы, которые я нашел, были в vb6. Я не думал об этом раньше, но сейчас смотрю в него. – jkeefe56

+0

Итак, компьютеры, на которых мы работаем, используют более старую версию .net framework (pre-4.5, неуверенный, что именно). Таким образом, автоматизация пользовательского интерфейса отсутствует. Хорошее предложение! – jkeefe56

ответ

0

Всегда, я могу сражаться с чем-то часами и как только я задаю вопрос, я выясню это.

Dim hwnd2 As IntPtr = FindWindowEx(Hwnd, Nothing, "MDIClient", Nothing) 
    Dim hwnd3 As IntPtr = FindWindowEx(hwnd2, Nothing, Nothing, CallTITLE) 




    If hwnd3.Equals(IntPtr.Zero) Then 
     MsgBox("Not Found") 
    Else 
     MsgBox("Found") 
    End If 
Смежные вопросы