0

別のアプリケーションの Windows フォームから情報を取得しようとしています。

このアプリケーションのテキストボックスまたはラベルからデータを読み取ることはできますが、PANEL からは読み取れません。このパネルにはコントロールが含まれていないためです。

あなたの提案が必要です。

前もって感謝します。ここで私が使用しているコード:

  For Each top As windowsAPIoutils.ApiWindow In enumerator.GetTopLevelWindows()
        For Each child As windowsAPIoutils.ApiWindow In enumerator.GetChildWindows(top.hWnd)
            If top.MainWindowTitle.StartsWith("TITLE_Of_APPLICATION") Then
               'The class name of the control
                If child.ClassName = "TEdit"  Then

                    textbox1.Text = child.MainWindowTitle 

                End If
            End If


        Next child
    Next top
4

2 に答える 2

4

これを行うために Win32 API を使用できる唯一の方法は、テキストを取得したい項目が実際のウィンドウに裏打ちされた Win32 コントロールである場合です。

そのため、他の項目がテキスト ボックスまたはラベルである場合、これらは両方とも Win32EDITSTATICコントロールを使用してそれぞれ実装されているため、問題なく動作します。

「パネル」が何を意味するのか正確にはわかりませんが、他のアプリケーションによってカスタム描画されたものだと思います。したがって、そのアプリケーションに含まれるテキストを要求する必要があります。これは標準の Windows コントロールではないため、Windows から提供することはできません。何らかの理由で他のアプリケーションに問い合わせることができない場合は、UI 自動化などの代替方法を調査する必要があります。

「パネル」がグループ ボックスを意味する場合、それは単なる標準の Windows ボタン コントロールであり、キャプション (上部に表示) があります。これは、ラベル コントロールのキャプションを取得するのと同じ方法で取得できます。Win32 の用語では、コントロールにWM_GETTEXTメッセージを送信することを意味します。

于 2013-03-11T12:07:01.130 に答える
0

これが私が使用した解決策です:TesseractはオープンソースのOCRエンジンであり、ここにそれを取得するためのリンクがあります:https ://code.google.com/p/tesseract-ocr/

それの使い方 :

Imports System.IO
Imports System.Threading
Imports System.Collections.Specialized

Public class myClass

Private ProcessList As New Hashtable

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)     Handles Button.Click
Dim croppedFile as String = "C:\image.tif"
Dim OCRProcess As Process = New Process()
OCRProcess.StartInfo.FileName = "C:\tesseract\tesseract.exe"
OCRProcess.StartInfo.Arguments = croppedFile & " " & croppedFile & " -l eng"
OCRProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
OCRProcess.StartInfo.CreateNoWindow = True
OCRProcess.EnableRaisingEvents = True
AddHandler OCRProcess.Exited, AddressOf Me.ProcessExited
OCRProcess.Start()
ProcessList.Add(OCRProcess.Id.ToString, croppedFile & ".txt")
Do While Not OCRProcess.HasExited
    Application.DoEvents()
Loop
End Sub

Friend Sub ProcessExited(ByVal sender As Object, ByVal e As System.EventArgs)
Dim Proc As DictionaryEntry
Dim oRead As StreamReader
Dim EntireFile As String = ""
For Each Proc In ProcessList
    If (sender.id.ToString = Proc.Key) Then
        oRead = File.OpenText(Proc.Value)
        EntireFile = oRead.ReadToEnd()
    End If
Next
MsgBox(EntireFile)
End Sub

End Class

それが誰かを助けることを願っています

于 2013-03-15T10:24:11.643 に答える