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-ish,里面充满了我需要的信息。它还可以选择将该信息导出到 Excel 文件。我宁愿选择将其导出为 CSV 到我的剪贴板。

当我在 ManagedSpy 的树视图上浏览 DataProgram 的控件时,我可以找到我需要从中获取信息的确切 DataGridView。我知道这是正确的,因为我可以右键单击它并选择“显示窗口”,它会在控件周围闪烁一个框。

这是奇怪的部分:当我左键单击它以在 ManagedSpy 窗口的右侧查看其属性时,神奇的事情发生了。整个表作为 XML 在 DataProgram 的内存中分配,因此在内存扫描仪的帮助下,我可以看到整个表就在我眼前……然后垃圾收集器将其带走。但是它在那里持续了大约 30 秒(当然它会有所不同,GC 是不确定的)。顺便说一句,控件类是 Infragistics.Win.UltraWinGrid.UltraGrid,它就像一个增强的 DataGridView(我想)。

这是我的问题:如您所见,我想在它分配了 XML 表的确切位置读取 DataProgram 的内存。我已经知道如何读取内存(使用 ReadProcessMemory)。我想了解如何触发 DataProgram 从我的程序中分配那个 XML 表,就像 ManagedSpy 一样。请注意,ManagedSpy 的源代码可从网站获得,但我无法调试它,因为它只能以管理员身份运行,并且由于某种原因我无法使其运行。我只需要知道如何从我的程序中激发 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 回答