1

我正在尝试通过应用程序的控制句柄从另一个应用程序中检索文本。如果控件是“静态”的,我没有问题,但我的代码似乎不适用于“编辑”控件。正如 MSDN 所说,GetWindowText 无法从 EDIT 控件中检索文本,但也许您知道实现此目的的另一种方法?

我当前的代码在这里:

Dim newHwnd As IntPtr = Handler.GetClassByPosition(ParentHwnd, cls, classPosition)
    Dim length As Integer = Handler.GetWindowTextLength(newHwnd)
    Dim sb As New String(" ".Chars(0), length + 1)
    If cls = "edit" Then
        Handler.GetWindowText(newHwnd, sb, sb.Length)
    End If

其中 GetClassByPosition 通过指定父句柄、类名(静态、编辑或按钮)和 classPosition(在循环中使用 - 现在不重要)返回控件的句柄

正如我所说,它适用于 STATIC(标签等),但如果我从该外部应用程序的 EDIT(文本框)控件中检索文本,它会返回 0。

更新:

我尝试了以下解决方案,如果数据是整数但如果它包含任何字母,则成功返回数据,结果为 0:

Dim tmpstr As IntPtr = Marshal.AllocHGlobal(100)
        Dim NumText = API.SendMessage(Hwnd, API.WM_GETTEXT, 200, tmpstr )
        NumText = Marshal.PtrToStringAnsi(tmpstr )
        Return NumText

在此先感谢,尼古拉

4

1 回答 1

2

尝试这个:

 Private Function GetText(ByVal hWnd As IntPtr) As String

    Dim ReturnValue As String = Nothing

    If hWnd.ToInt32 > 0 Then

        Dim Length As Integer = GetWindowTextLength(hWnd)

        If Length > 0 Then

            Dim sb As New System.Text.StringBuilder("", Length + 1)

            GetWindowText(hWnd, sb, sb.Capacity)

            ReturnValue = sb.ToString

            sb = Nothing

        End If

    End If

    Return ReturnValue

End Function
于 2012-12-07T02:37:50.780 回答