Как заставить GridView выделять свою память как XML - PullRequest
0 голосов
/ 26 апреля 2010

TL; DR: При просмотре свойств элемента управления DataGridView программы с использованием ManagedSpy она заставляет эту программу выделять свои данные DataGridView в виде XML в своей памяти. Как я могу вызвать то же самое из моей программы? (это не совсем DataGridView, элемент управления называется Infragistics.Win.UltraWinGrid.UltraGrid)

Полная история:

Я использую ManagedSpy (http://msdn.microsoft.com/en-us/magazine/cc163617.aspx), чтобы шпионить за программой, которую мы будем называть DataProgram. Пожалуйста, обратитесь к рисунку 2 на этой странице для скриншота ManagedSpy.

DataProgram имеет DataGridView, полный информации, которая мне нужна. Он также имеет возможность экспортировать эту информацию в файл Excel. Я предпочел бы иметь возможность экспортировать его в CSV в мой буфер обмена.

Когда я просматриваю элементы управления DataProgram в древовидном представлении ManagedSpy, я могу найти точный DataGridView, из которого мне нужна информация. Я знаю, что он правильный, потому что я могу щелкнуть по нему правой кнопкой мыши и выбрать «Показать окно», и вокруг элемента управления вспыхнет окно.

Вот странная часть: Когда я щелкнул левой кнопкой мыши по нему, чтобы просмотреть его свойства в правой части окна ManagedSpy, произошло нечто волшебное. Вся таблица размещена в памяти DataProgram как XML, так что с помощью сканера памяти я могу видеть, что вся таблица находится прямо перед моими глазами ... и затем сборщик мусора убирает ее. Но это там в течение хороших 30 секунд или около того (конечно, это изменяется, с GC, являющимся недетерминированным). Кстати, классом управления является Infragistics.Win.UltraWinGrid.UltraGrid, и он похож на расширенный DataGridView (я представляю).

Вот мой вопрос: Как вы можете видеть, я хочу прочитать память DataProgram в точном месте, где ей выделена таблица XML. Я уже умею читать память (используя ReadProcessMemory). Я хотел бы узнать, как я могу запустить DataProgram для выделения этой таблицы XML из моей программы, как это делает ManagedSpy. Напомним, что исходный код ManagedSpy доступен на веб-сайте, но я не могу его отладить, потому что он работает только от имени администратора и по какой-то причине не может его запустить. Мне просто нужно знать, как я могу из своей программы спровоцировать DataProgram для создания этой информации XML, чтобы я мог прочитать ее из памяти.

1 Ответ

0 голосов
/ 26 апреля 2010

Путем копирования функции RefreshWindows () и событий treeWindow_AfterSelect и treeWindow_BeforeExpand, добавления treeView и PropertyGrid, ссылки на ManagedSpyLib.dll, а затем написания некоторого кода для обхода treeView и выбора правильного узла, который я смог дублировать необходимая мне функциональность.

Очевидно, что работа ManagedSpyLib более сложна, чем я думал (в основном потому, что это в управляемом C ++, смеется), но в статье msdn говорится, что того же можно достичь, используя обычную DLL, кодированную в неуправляемом коде (например, x86asm) , Я попытаюсь сделать это позже, потому что в настоящее время эта библиотека работает намного больше, чем мне нужно (она отслеживает события и т. Д.).

...