Question

TL; DR: Lorsque vous naviguez sur les propriétés du contrôle DataGridView d'un programme à l'aide ManagedSpy provoque ce programme d'affecter ses données DataGridView au format XML dans sa mémoire. Comment puis-je faire la même chose se produise de mon programme? (Il est pas tout à fait un DataGridView, le contrôle est appelé Infragistics.Win.UltraWinGrid.UltraGrid)

Full Story:

J'utilise ManagedSpy ( http://msdn.microsoft.com /en-us/magazine/cc163617.aspx ) pour espionner un programme que nous appelons DataProgram. S'il vous plaît se référer à la figure 2 sur cette page pour une capture d'écran de ManagedSpy.

DataProgram a plein d'informations DataGridView-ish que j'ai besoin. Il dispose également d'une option d'exporter cette information dans un fichier Excel. Je préfère avoir la possibilité de l'exporter au format CSV dans mon Presse-papiers.

Quand je marche à travers les contrôles de DataProgram sur la TreeView de ManagedSpy, je peux trouver la DataGridView exacte que je besoin de l'information à partir. Je sais que c'est le bon parce que je peux faire un clic droit et choisissez « Afficher la fenêtre » et il va clignoter une boîte autour du contrôle.

Voici la partie étrange: Juste quand je suis parti-cliquez dessus pour afficher ses propriétés sur le côté droit de la fenêtre ManagedSpy, magique se passe quelque chose. Toute la table est allouée dans la mémoire de DataProgram en XML, de sorte qu'avec l'aide d'un scanner de mémoire, je peux voir que toute la table est là juste devant mes yeux ... puis le Garbage Collector l'enlève. Mais il est là pour quelques bonnes 30 secondes environ (bien sûr, il varie, avec le GC étant non-déterministe). Soit dit en passant, la classe de contrôle est Infragistics.Win.UltraWinGrid.UltraGrid, et il est comme un DataGridView renforcé (je pense).

Voici ma question: Comme vous pouvez le voir, je veux lire la mémoire de DataProgram au point précis, il a la table XML alloué. Je sais comment lire la mémoire déjà (à l'aide ReadProcessMemory). Je voudrais savoir comment je peux déclencher DataProgram d'affecter cette table XML de mon programme, tout comme le fait ManagedSpy. Rappelez-vous, le code source de ManagedSpy est disponible sur le site Web, mais je ne suis pas en mesure de le déboguer, car il ne fonctionne que comme administrateur et pour une raison quelconque, je ne peux pas le faire fonctionner. Je juste besoin de savoir comment je peux, de mon programme, provoquer DataProgram pour créer cette info XML afin que je puisse le lire dans sa mémoire.

Était-ce utile?

La solution

En copiant sur la fonction RefreshWindows () et les événements treeWindow_AfterSelect et treeWindow_BeforeExpand, en ajoutant un treeView et un PropertyGrid, faisant référence à la ManagedSpyLib.dll puis écrire du code pour marcher le treeView et sélectionnez le nœud correct, je suis en mesure de reproduire le fonctionnalité dont je avais besoin.

Apparemment, la façon dont ManagedSpyLib fonctionne est plus compliquée alors je pensais (principalement parce qu'il est managé C ++, lol), mais l'article msdn dit la même chose peut être réalisé en utilisant une DLL normale codée dans le code non géré (comme x86asm) . Je vais essayer de le faire plus tard parce qu'actuellement, cette bibliothèque ne beaucoup plus que ce que je dois (il suit les événements, etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top