如何读取另一个程序的TStringGrid控件的单元格?

时间:2012-12-25 18:00:05

标签: vb.net delphi

如何从其他应用程序的gridview中提取项目?该控件的类名是TStringGrid

我可以使用TStringGrid使用这些声明来获取FindWindowEx窗口的句柄:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
 ByVal lpClassName As String, _
 ByVal lpWindowName As String) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _
                  ByVal childAfter As IntPtr, _
                  ByVal lclassName As String, _
                  ByVal windowTitle As String) As IntPtr
End Function

代码:

    Dim TheMainForm As Integer = FindWindow("form", "fname")
    Dim GV As Integer = FindWindowEx(TheMainForm, 0, "TStringGrid", "")

如何从GV(TStringGrid句柄)中提取项目?

(明天我必须完成这个项目。)

1 个答案:

答案 0 :(得分:4)

Delphi字符串网格不是Windows控件。这是一个定制的Delphi控件。因此,它不响应要求其内容的Windows消息。如果没有应用程序源,您需要对应用程序进行反向工程以确定存储内容的位置。

实际上,最有效的方法是将一个线程注入目标应用程序。然后该线程可以完成读取信息的工作,然后可以使用一些IPC将数据恢复到VB进程。

为了做到这一点,理想情况下,你需要:

  1. 了解用于构建应用程序的Delphi的确切版本。
  2. 深入理解Delphi编译器和RTL。
  3. TStringGrid
  4. 的Delphi VCL源代码

    我不知道你如何能够将阅读线程与Delphi应用程序同步。

    无论如何,虽然你要求的是理论上可行的,但实际上它是完全不切实际的。明智的解决方案是要求Delphi程序的作者提供自动化界面。