2010-04-26 45 views
0

TL; DR: 当使用ManagedSpy中浏览程序的DataGridView控件的属性它会导致该节目分配其的DataGridView数据作为在其存储器中的XML。 我怎样才能使我的程序发生同样的事情? (它不是相当一个DataGridView,控制被称为Infragistics.Win.UltraWinGrid.UltraGrid)如何使一个GridView分配其存储器中作为XML

全文:

我使用ManagedSpy中(http://msdn.microsoft.com/en-us/magazine/cc163617.aspx)来窥探一个程序,我们将称为DataProgram。 请参阅该页面上的图2以获取ManagedSpy的屏幕截图。

DataProgram有一个DataGridView-ish充满了我需要的信息。 它还可以将该信息导出到Excel文件。 我宁愿有选择将其导出到CSV到我的剪贴板。

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

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

这是我的问题: 正如你所看到的,我想在精确的位置读取DataProgram的内存,它已经分配了XML表。 我知道如何读取内存(使用ReadProcessMemory)。 我想了解如何触发DataProgram从我的程序中分配该XML表,就像ManagedSpy一样。 请注意,ManagedSpy的源代码可从网站获得,但我无法进行调试,因为它仅以管理员身份运行,并且出于某种原因无法运行。 我只需要知道如何从我的程序中激发DataProgram来创建XML信息,以便从内存中读取它。

回答

0

通过复制函数RefreshWindows()和事件treeWindow_AfterSelect和treeWindow_BeforeExpand,添加一个treeView和一个PropertyGrid,引用ManagedSpyLib.dll,然后编写一些代码来遍历treeView并选择正确的节点,我能够复制我需要的功能。

显然,ManagedSpyLib的工作方式比较复杂,然后我认为(主要是因为它是托管C++,lol),但是msdn文章说,使用非托管代码编码的正常DLL也可以实现同样的效果(如x86asm )。我会尽量做到这一点,因为目前这个库的方式比我需要的更多(它跟踪事件等)。

相关问题