获取空文本框的句柄

时间:2016-02-17 15:06:53

标签: .net vb.net pinvoke

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

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

无论如何都要获得控件的名称?我读了一些关于使用SendMessage和'WM_GETCONTROLNAME'的内容,但我找不到太多关于它的内容。

感谢。

1 个答案:

答案 0 :(得分:0)

我设法通过使用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