2011-01-12 17 views
0

これは奇妙な質問です。これまでこれをやろうとはしていませんでした。フォームからデータを読む

私は、1つのプログラムのテキストボックスからのデータを別のプログラムにコピーして後で処理する必要があるという繰り返しプロセスがあります。 VB .NETを使用してこのプロセスを自動化したいと思います。データの収集元となるアプリケーションは私のものではないため、ActiveXのようなコントロールへのアクセスはありません。

フォーム上のコントロールを見つけてそれらから値を収集するために、別のアプリケーションのフォームにアクセスするためにアプリケーションを書く方法は?

私は以下のコードを試してみました。これにより、このコードが属するフォームの名前のみとなりました。私が開いている他のフォームの名前は見つけられませんでした。私はたくさんの選択肢があります。それは私が私の人生を容易にするために行う必要があります何の唯一のステップ1ですので、これはイライラさせられる...

Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As CallBack, ByVal lParam As Integer) As Integer 
Public Delegate Function CallBack(ByVal hwnd As IntPtr, ByVal lParam As IntPtr) As Boolean 


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim cb As New CallBack(AddressOf MyCallBack) 
    EnumWindows(cb, 8) 
End Sub 

Public Function MyCallBack(ByVal hwnd As Long, ByVal lparam As Long) As Boolean 
    Dim frm As System.Windows.Forms.Control 
    frm = System.Windows.Forms.Form.FromHandle(hwnd) 
    If frm Is Nothing Then Return True 

    If frm.Text <> "" Then 
     TextBox1.Text += frm.Text & ", " 
    End If 

    Return True 
End Function 

誰もが勧告を持っていますか?

おかげで、 SH

+0

Spy ++を使用して、他のアプリケーションのフォーム上のコントロールを識別できます。私は自分で使ったことはありませんが、おそらく試してみる価値があります。 http://msdn.microsoft.com/en-us/magazine/cc163617.aspx –

答えて

0

System.Windows.Forms.FormほとんどのWin32アプリケーションはネイティブウィンドウを使用するのに対し、唯一の.NETのフォームを表します。 Win32ウィンドウで作業するには、ネイティブWin32関数を使用する必要があります。ウィンドウのタイトルを取得したい場合は、ウィンドウハンドルを直接Win32 GetWindowText関数に渡します。

関連する問題