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 に答える