アプリのコントロールハンドルを使用して、別のアプリケーションからテキストを取得しようとしています。コントロールが「静的」であれば問題ありませんが、コードが「編集」コントロールとして機能していないようです。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
よろしくお願いします、ニコラ