2011-01-12 76 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函数。