Pregunta

TL; DR: Al navegar por las propiedades del control DataGridView de un programa utilizando ManagedSpy que causa que el programa para asignar sus datos de DataGridView como XML en su memoria. ¿Cómo puedo hacer que lo mismo suceda de mi programa? (No es absolutamente un DataGridView, el control se llama Infragistics.Win.UltraWinGrid.UltraGrid)

Historia completa:

Estoy usando ManagedSpy ( http://msdn.microsoft.com /en-us/magazine/cc163617.aspx ) para espiar a un programa que nos referiremos como DataProgram. Por favor refiérase a la Figura 2 en que la página para una captura de pantalla de ManagedSpy.

DataProgram tiene un DataGridView-ish llena de información que necesito. También tiene una opción para exportar esa información a un archivo de Excel. Yo prefiero tener la opción de exportar a CSV en mi portapapeles.

Cuando camino a través de controles de DataProgram en vista de árbol de ManagedSpy, puedo encontrar el DataGridView exacto que necesito la información de. Sé que es el más adecuado porque puedo haga clic derecho y elegir la opción "Mostrar ventana" y va a parpadear una caja alrededor del control.

Aquí está la parte extraña: Justo cuando me fui clic en él para ver sus propiedades en la parte derecha de la ventana del ManagedSpy, algo mágico sucede. toda la tabla se asigna dentro de la memoria de DataProgram como XML, para que con la ayuda de un escáner de memoria puedo ver que toda la tabla está justo en frente de mis ojos ... y luego el colector de basura se la quita. Pero está allí para algunos buenos 30 segundos o menos (por supuesto, varía con la GC es no determinista). Por cierto, la clase de control es Infragistics.Win.UltraWinGrid.UltraGrid, y es como un reforzado DataGridView (imagino).

Aquí está mi pregunta: Como se puede ver quiero leer la memoria de DataProgram en el punto preciso que tiene la tabla XML asignado. Yo sé cómo leer la memoria ya (usando ReadProcessMemory). Me gustaría saber cómo puedo desencadenar DataProgram para asignar esa tabla XML desde mi programa al igual que lo hace ManagedSpy. Eso sí, el código fuente de ManagedSpy está disponible en la página web pero no soy capaz de depurar, ya que sólo se ejecuta como administrador y por alguna razón que no puedo hacer que se ejecute. Sólo necesito saber como puedo, desde mi programa, provocar DataProgram para crear esa información XML para que pueda leerlo desde su memoria.

¿Fue útil?

Solución

Al copiar en los RefreshWindows función () y los eventos treeWindow_AfterSelect y treeWindow_BeforeExpand, la adición de un TreeView y un PropertyGrid, haciendo referencia al ManagedSpyLib.dll y luego escribir algo de código para caminar la vista de árbol y seleccione el nodo correcto yo era capaz de duplicar la funcionalidad que necesitaba.

Al parecer, la forma en que funciona ManagedSpyLib es más complicado de lo que pensaba (principalmente porque está en C ++ administrada, lol), pero el artículo de MSDN dice que el mismo se puede conseguir mediante el uso de un archivo DLL normal, codificado en no administrado código (como x86asm) . Voy a tratar de hacerlo más tarde porque actualmente esta biblioteca hace mucho más de lo que necesito (hace un seguimiento de eventos, etc.).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top