-4

如何从其他应用程序的 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 句柄)中提取项目?

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

4

1 回答 1

4

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

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

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

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

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

无论如何,虽然您所要求的在理论上是可能的,但实际上它是完全不切实际的。明智的解决方案是要求 Delphi 程序的作者提供一个自动化接口。

于 2012-12-26T11:24:52.280 回答