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, чтобы я мог прочитать ее из памяти.