0

TL;DR: ManagedSpy を使用してプログラムの DataGridView コントロールのプロパティを参照すると、そのプログラムは DataGridView データを XML としてメモリに割り当てます。私のプログラムから同じことを起こすにはどうすればよいですか? (これは完全な DataGridView ではありません。コントロールは Infragistics.Win.UltraWinGrid.UltraGrid と呼ばれます)

完全なストーリー:

私は ManagedSpy ( http://msdn.microsoft.com/en-us/magazine/cc163617.aspx ) を使用して、DataProgram と呼ばれるプログラムをスパイしています。ManagedSpy のスクリーンショットについては、そのページの図 2 を参照してください。

DataProgram には、必要な情報が満載の DataGridView っぽいものがあります。また、その情報を Excel ファイルにエクスポートするオプションもあります。それをCSVにエクスポートしてクリップボードに入れるオプションがあればいいのにと思います。

ManagedSpy のツリービューで DataProgram のコントロールを確認すると、情報が必要な正確な DataGridView を見つけることができます。右クリックして「ウィンドウを表示」を選択すると、コントロールの周りにボックスが点滅するので、それが正しいことを知っています。

奇妙な点は次のとおりです。ManagedSpy のウィンドウの右側にプロパティを表示するために左クリックすると、魔法のようなことが起こります。テーブル全体が DataProgram のメモリ内に XML として割り当てられるため、メモリ スキャナの助けを借りて、テーブル全体が目の前にあることを確認できます...その後、ガベージ コレクタがそれを取り除きます。しかし、それは30秒ほどそこにありました(もちろん、GCが非決定論的であるため、変化します)。ちなみに、コントロール クラスは Infragistics.Win.UltraWinGrid.UltraGrid で、強化された DataGridView のようなものです (私は想像します)。

これが私の質問です。ご覧のとおり、XML テーブルが割り当てられている正確なポイントで DataProgram のメモリを読み取りたいと考えています。私はすでにメモリを読み取る方法を知っています(ReadProcessMemoryを使用)。ManagedSpy と同じように、DataProgram をトリガーしてプログラムから XML テーブルを割り当てる方法を知りたいです。ManagedSpy のソース コードは Web サイトから入手できますが、管理者としてのみ実行され、何らかの理由で実行できないため、デバッグできません。プログラムから DataProgram を呼び出してその XML 情報を作成し、メモリから読み取ることができるようにする方法を知る必要があります。

4

1 に答える 1

0

関数 RefreshWindows() とイベント treeWindow_AfterSelect および treeWindow_BeforeExpand をコピーし、treeView と PropertyGrid を追加し、ManagedSpyLib.dll を参照してから、treeView をたどって正しいノードを選択するコードを記述することで、必要な機能を複製することができました。 .

どうやら、ManagedSpyLib の動作は思ったよりも複雑です (主にマネージ C++ にあるためです 笑) が、msdn の記事によると、非マネージ コード (x86asm など) でコーディングされた通常の DLL を使用しても同じことが実現できます。現在、このライブラリは私が必要とする以上のことを行っているため(イベントなどを追跡します)、後で試してみます。

于 2010-04-26T13:46:26.137 に答える