2010-04-26 50 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 )。我會盡量做到這一點,因爲目前這個庫的方式比我需要的更多(它跟蹤事件等)。

相關問題