我正在尝试从.NET应用程序中控制另一个.NET应用程序。但是我无法获得特定文本框的句柄。
到目前为止,我一直在遍历主窗体子窗口并检查GetWindowText()Windows API方法返回的值,看看我是否有正确的控件。但是我试图控制的程序有2个空文本框,它们都有相同的类,它们都从GetWindowText()返回相同的值。所以我无法确定我需要的文本框来获取句柄。
无论如何都要获得控件的名称?我读了一些关于使用SendMessage和'WM_GETCONTROLNAME'的内容,但我找不到太多关于它的内容。
感谢。
答案 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