Vb.net findwindowEX复杂的外部程序

Vb.net findwindowEX复杂的外部程序,vb.net,spy++,findwindow,findwindowex,Vb.net,Spy++,Findwindow,Findwindowex,嘿,我一直在想怎么才能一直走下去,上面写着: 窗口00211286英寸QWidget 以绿色突出显示的是我试图通过以下代码找到的内容: 目前我有: Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr Private Declare Function FindWi

嘿,我一直在想怎么才能一直走下去,上面写着:

窗口00211286英寸QWidget

以绿色突出显示的是我试图通过以下代码找到的内容:

目前我有:

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As Integer, ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As IntPtr
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As IntPtr
Public Declare Function SendMessageLong& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)

Public Const WM_CHAR = &H102
Private Const BM_CLICK = &HF5
Public Const WM_LBUTTONDBLCLK = &H203
Public Const ENTER_KEY = 13

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim hwndParent As Long = FindWindow(vbNullString, "Genymotion")
    Dim hwndButton As Long = FindWindowEx(hwndParent, IntPtr.Zero, "QWidget", "")
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "content")
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "mainFrame")
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "")
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "qt_scrollarea_viewport")
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "")
End Sub
我得到FindWindow的值,然后也是第一个findwindowEx的值。。。。但在那之后,我得到了一个大胖子0。最后一个FindWindowEx的号码和第一个FindWindowEx的号码一样

任何帮助都会很好

试试这个:

    Dim hwndParent As Long = FindWindow(vbNullString, "Genymotion") ' Parent Window by Caption
    Dim hwndButton As Long = FindWindowEx(hwndParent, IntPtr.Zero, "QWidget", "") ' First Child QWidget
    hwndButton = FindWindowEx(hwndParent, hwndButton, "QWidget", "") ' Second Child QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "content") ' "content" QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "mainFrame") ' "mainFrame" QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "") ' First Child QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "qt_scrollarea_viewport") ' "qt_scrollarea_viewport" QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "") ' First Child QWidget
注意这两行中发生的情况:

    Dim hwndButton As Long = FindWindowEx(hwndParent, IntPtr.Zero, "QWidget", "") ' First Child QWidget
    hwndButton = FindWindowEx(hwndParent, hwndButton, "QWidget", "") ' Second Child QWidget
第一行获取句柄为001816EC的第一个QWidget。在第二行中,我们使用相同的父句柄,但是我们将之前找到的小部件的句柄传递给第二个名为“hWndChildAfter”的参数。这将获取句柄为0011686A的第二个QWidget。这两个窗口彼此是“兄弟”窗口。

请尝试以下操作:

    Dim hwndParent As Long = FindWindow(vbNullString, "Genymotion") ' Parent Window by Caption
    Dim hwndButton As Long = FindWindowEx(hwndParent, IntPtr.Zero, "QWidget", "") ' First Child QWidget
    hwndButton = FindWindowEx(hwndParent, hwndButton, "QWidget", "") ' Second Child QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "content") ' "content" QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "mainFrame") ' "mainFrame" QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "") ' First Child QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "qt_scrollarea_viewport") ' "qt_scrollarea_viewport" QWidget
    hwndButton = FindWindowEx(hwndButton, IntPtr.Zero, "QWidget", "") ' First Child QWidget
注意这两行中发生的情况:

    Dim hwndButton As Long = FindWindowEx(hwndParent, IntPtr.Zero, "QWidget", "") ' First Child QWidget
    hwndButton = FindWindowEx(hwndParent, hwndButton, "QWidget", "") ' Second Child QWidget

第一行获取句柄为001816EC的第一个QWidget。在第二行中,我们使用相同的父句柄,但是我们将之前找到的小部件的句柄传递给第二个名为“hWndChildAfter”的参数。这将获取句柄为0011686A的第二个QWidget。这两个窗口彼此是“兄弟”窗口。

虽然不是问题的答案,但请注意,模拟用户输入的直接消息(SendMessage、PostMessage等)在windows中并不可靠。您是否考虑过使用(或类似的方法)?虽然不是问题的答案,但请注意,直接消息(SendMessage、PostMessage等)来模拟用户输入在Windows中并不可靠。你有没有考虑过使用(或类似的东西)?