2011-01-12 148 views
0

這是一個奇怪的問題,我從來沒有試過這樣做過。從表格中讀取數據

我有一個重複的過程,要求我將數據從一個程序的文本框複製並粘貼到另一個程序中作進一步處理。我想用VB.NET自動化這個過程。從中收集數據的應用程序不是我的,所以我沒有類似ActiveX的控件訪問。

如何編寫應用程序以從另一個應用程序訪問表單,以便能夠找到表單上的控件並從中收集值?

只是試驗,我用了下面的代碼。這導致只有該代碼所屬的表單的名稱。它沒有找到我打開的任何其他表格的名稱,我有很多可供選擇的開放式名稱。這是令人沮喪的,因爲它只是我需要做的一件事,使我的生活更輕鬆......

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 – 2011-01-12 16:15:36

回答

0

System.Windows.Forms.Form僅代表.NET的形式,而大多數Win32應用程序使用本機窗口。您將不得不使用本機Win32函數來使用Win32窗口。如果你想獲得窗口標題,只需將窗口句柄直接傳遞給Win32 GetWindowText函數。