Domanda

TL; DR: Durante la navigazione le proprietà del controllo DataGridView di un programma utilizzando ManagedSpy che provoca quel programma per allocare i propri dati in formato XML DataGridView nella sua memoria. Come posso causare la stessa cosa accada dal mio programma? (Non è un bel DataGridView, il controllo viene chiamato Infragistics.Win.UltraWinGrid.UltraGrid)

Full Story:

Sto usando ManagedSpy ( http://msdn.microsoft.com /en-us/magazine/cc163617.aspx ) di spiare su un programma che ci riferiamo come DataProgram. Si prega di fare riferimento alla figura 2 in quella pagina per uno screenshot di ManagedSpy.

DataProgram ha un DataGridView-ish pieno di informazioni di cui ho bisogno. Essa ha anche un'opzione per esportare queste informazioni in un file Excel. Preferisco avere la possibilità di esportarlo in formato CSV nella mia Appunti.

Quando cammino attraverso i controlli di DataProgram su TreeView di ManagedSpy, posso trovare il DataGridView esatto che ho bisogno le informazioni da. So che è quello giusto perché posso fare clic destro e scegliere "Mostra finestra" e si metterà a lampeggiare un riquadro intorno al controllo.

Ecco la parte strana: Proprio quando ho lasciato clic su di esso per visualizzarne le proprietà sul lato destro della finestra di ManagedSpy, qualcosa di magico accade. L'intera tabella è allocato all'interno della memoria di DataProgram come XML, in modo che con l'aiuto di uno scanner di memoria posso vedere che l'intera tabella è proprio lì davanti ai miei occhi ... e poi il Garbage Collector porta via. Ma è lì per alcuni buoni 30 secondi o giù di lì (ovviamente varia, con il GC essere non deterministico). Tra l'altro, la classe di controllo è Infragistics.Win.UltraWinGrid.UltraGrid, ed è come un rinforzato DataGridView (immagino).

Ecco la mia domanda: Come si può vedere che voglio leggere la memoria di DataProgram nel punto preciso ha la tabella XML assegnato. Io so leggere la memoria già (usando ReadProcessMemory). Mi piacerebbe sapere come posso innescare DataProgram di destinare tale tabella XML dal mio programma, proprio come ManagedSpy fa. Intendiamoci, il codice sorgente di ManagedSpy è disponibile presso il sito web, ma io non sono in grado di eseguire il debug perché funziona solo come amministratore e per qualche motivo non riesco a farlo funzionare. Ho solo bisogno di sapere come posso, dal mio programma, provocare DataProgram per creare queste informazioni XML in modo che io possa leggerlo dalla sua memoria.

È stato utile?

Soluzione

Per copiare negli RefreshWindows function () e gli eventi treeWindow_AfterSelect e treeWindow_BeforeExpand, l'aggiunta di un controllo TreeView e un PropertyGrid, riferimento al ManagedSpyLib.dll e poi scrivere del codice per camminare TreeView e selezionare il nodo corretto ero in grado di duplicare il funzionalità di cui avevo bisogno.

A quanto pare il modo in cui funziona ManagedSpyLib è più complicato poi ho pensato (soprattutto perché è in Managed C ++, lol), ma l'articolo di MSDN dice la stessa può essere raggiunto utilizzando una DLL normale codificato in non gestito codice (come x86asm) . Cercherò di farlo più tardi, perché al momento questa libreria non molto più di quello che mi serve (che tiene traccia degli eventi, ecc).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top