Вопрос

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 в treeview ManagedSpy, я могу найти точный DataGridView, из которого мне нужна информация.Я знаю, что это правильный вариант, потому что я могу щелкнуть по нему правой кнопкой мыши и выбрать "Показать окно", и вокруг элемента управления отобразится прямоугольник.

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top