.net 获取空文本框的句柄

.net 获取空文本框的句柄,.net,vb.net,pinvoke,.net,Vb.net,Pinvoke,我正在尝试从.NET应用程序控制另一个.NET应用程序。但是我很难得到一个特定文本框的句柄 到目前为止,我一直在遍历主窗体子窗口,并检查GetWindowText()windows API方法返回的值,以查看是否有正确的控件。但是我试图控制的程序有两个空文本框,它们都有相同的类,并且都从GetWindowText()返回相同的值。所以我无法识别需要处理的文本框 是否仍然需要获取控件的名称?我读了一些关于使用带有“WM_GETCONTROLNAME”的SendMessage的文章,但是我找不到那么

我正在尝试从.NET应用程序控制另一个.NET应用程序。但是我很难得到一个特定文本框的句柄

到目前为止,我一直在遍历主窗体子窗口,并检查GetWindowText()windows API方法返回的值,以查看是否有正确的控件。但是我试图控制的程序有两个空文本框,它们都有相同的类,并且都从GetWindowText()返回相同的值。所以我无法识别需要处理的文本框

是否仍然需要获取控件的名称?我读了一些关于使用带有“WM_GETCONTROLNAME”的SendMessage的文章,但是我找不到那么多


谢谢。

我通过使用Microsoft UI自动化库解决了这个问题

我创建了一个遍历子窗口的函数,并从它们的句柄创建了一个AutomationElement,它允许我检查控件的ID/名称。一旦我找到了我要找的控件,我就把它的手柄还给了他

Public Shared Function getHandleByID(ByVal windowHandle As IntPtr, ByVal ID As String) As IntPtr
    For Each window As IntPtr In GetChildWindows(windowHandle)
        Dim aE As AutomationElement = AutomationElement.FromHandle(window)
        If aE.Current.AutomationId = ID Then
            Return New IntPtr(aE.Current.NativeWindowHandle)
        End If
    Next
    Return Nothing
End Function

也许可以帮助你更轻松地完成这项任务。@HanletEscaño谢谢你的建议。我一直在使用Spy++和Ranorex Spy查看有关控件的详细信息。Spy++like Inspect不显示控件的名称,但是Ranorex Spy显示控件的名称,因此必须有某种方法来获取控件的名称?在完成UI自动化的工作之后,为什么需要窗口句柄。UI自动化可以为您阅读文本。@David除了阅读文本之外,还会有更多的事情发生。我需要做的一件事是更改控件的父级。