从表单中读取数据

时间:2011-01-12 15:49:15

标签: vb.net pinvoke

这是一个奇怪的问题,我以前从未尝试过这样做。

我有一个重复的过程,要求我将一个程序中的文本框中的数据复制并粘贴到另一个程序中以便进一步处理。我想使用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

1 个答案:

答案 0 :(得分:0)

System.Windows.Forms.Form仅代表.NET表单,而大多数Win32应用程序使用本机窗口。您将不得不使用本机Win32函数来使用Win32窗口。如果要获取窗口标题,只需将窗口句柄直接传递给Win32 GetWindowText函数。