获取空文本框的句柄
Getting the handle of an empty textbox
我正在尝试从我的 .NET 应用程序控制另一个 .NET 应用程序。但是我无法获取特定文本框的句柄。
到目前为止,我一直在迭代主窗体子 windows 并检查由 GetWindowText() Windows API 方法编辑的值 return看看我是否有正确的控制。但是我试图控制的程序有 2 个空文本框,它们都具有相同的 class 并且它们都 return 来自 GetWindowText() 的相同值。所以我无法识别我需要获取句柄的文本框。
有没有办法获取控件的名称?我阅读了一些有关将 SendMessage 与 'WM_GETCONTROLNAME' 一起使用的信息,但我找不到那么多。
谢谢。
我设法使用 Microsoft UI 自动化库解决了这个问题。
我创建了一个遍历子 windows 的函数,并从它们的句柄创建了一个 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
我正在尝试从我的 .NET 应用程序控制另一个 .NET 应用程序。但是我无法获取特定文本框的句柄。
到目前为止,我一直在迭代主窗体子 windows 并检查由 GetWindowText() Windows API 方法编辑的值 return看看我是否有正确的控制。但是我试图控制的程序有 2 个空文本框,它们都具有相同的 class 并且它们都 return 来自 GetWindowText() 的相同值。所以我无法识别我需要获取句柄的文本框。
有没有办法获取控件的名称?我阅读了一些有关将 SendMessage 与 'WM_GETCONTROLNAME' 一起使用的信息,但我找不到那么多。
谢谢。
我设法使用 Microsoft UI 自动化库解决了这个问题。
我创建了一个遍历子 windows 的函数,并从它们的句柄创建了一个 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