-4

他のアプリケーションのグリッドビューからアイテムを抽出するにはどうすればよいですか? コントロールのクラス名は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 に答える