Здравствуйте!
Есть необходимость получения контента элемента GUI программы в другой программе (для целей тестирования) — пример, в исследуемой программе есть tree контрол, нужно из другой программы считать все дерево этого контрола и произвести анализ содержимого. Средствами WIN API нет проблем получить дескриптор контрола, послать message для получения дескрипторов узлов дерева HTREEITEM, но далее начинаются проблемы.
Для получения содержимого узла (текста, например) я в message должен поместить адрес структуры, которая должна быть заполнена при отработке сообщения — есть подозрение, что так делать нельзя если работаешь с другим приложением — проблема доступа к памяти — памяти,то, двух программ — разные!
Кто знает, как тут быть? Необходима технология решения подобных задач.
Здравствуйте konst-in, Вы писали:
KI>Здравствуйте! KI> Есть необходимость получения контента элемента GUI программы в другой программе (для целей тестирования) — пример, в исследуемой программе есть tree контрол, нужно из другой программы считать все дерево этого контрола и произвести анализ содержимого. Средствами WIN API нет проблем получить дескриптор контрола, послать message для получения дескрипторов узлов дерева HTREEITEM, но далее начинаются проблемы. KI> Для получения содержимого узла (текста, например) я в message должен поместить адрес структуры, которая должна быть заполнена при отработке сообщения — есть подозрение, что так делать нельзя если работаешь с другим приложением — проблема доступа к памяти — памяти,то, двух программ — разные! KI> Кто знает, как тут быть? Необходима технология решения подобных задач.
KI>Заранее благодарен, Константин.
Посмотри на WM_COPYDATA или файлы, проецируемые в память.
V>Посмотри на WM_COPYDATA или файлы, проецируемые в память.
Дело в том, что я не имею возможности лезть в исследуемое приложение, а при использовании всяких механизмов организации shared memory (в dll или проецуруемых файлов), я должен получить адрес памяти изнутри исследуемого приложения. По крайней мере пробовал и WM_COPYDATA и отображение файлов — не получилось. Где-то есть изюминка...
Надо внедряться в адресное пространство того процесса, который юзает дерово. У Рихтера подробно описано, что как и почему. И пример программы, которую можнобудет адаптировать для твоего случаю. Программа внедряется в эксплорер и грабит иконки.
KI>Здравствуйте! KI> Есть необходимость получения контента элемента GUI программы в другой программе (для целей тестирования) — пример, в исследуемой программе есть tree контрол, нужно из другой программы считать все дерево этого контрола и произвести анализ содержимого. Средствами WIN API нет проблем получить дескриптор контрола, послать message для получения дескрипторов узлов дерева HTREEITEM, но далее начинаются проблемы. KI> Для получения содержимого узла (текста, например) я в message должен поместить адрес структуры, которая должна быть заполнена при отработке сообщения — есть подозрение, что так делать нельзя если работаешь с другим приложением — проблема доступа к памяти — памяти,то, двух программ — разные! KI> Кто знает, как тут быть? Необходима технология решения подобных задач.
KI>Заранее благодарен, Константин.
Здравствуйте konst-in, Вы писали:
KI>Здравствуйте vladsm, Вы писали:
V>>Посмотри на WM_COPYDATA или файлы, проецируемые в память.
KI>Дело в том, что я не имею возможности лезть в исследуемое приложение, а при использовании всяких механизмов организации shared memory (в dll или проецуруемых файлов), я должен получить адрес памяти изнутри исследуемого приложения. По крайней мере пробовал и WM_COPYDATA и отображение файлов — не получилось. Где-то есть изюминка...
Изюминка есть...
Например вот такая...
Toolhelp32ReadProcessMemory(...)
Параметры описаны в MSDN...
Здравствуйте Ибрагим, Вы писали:
И>Здравствуйте konst-in, Вы писали:
И>Надо внедряться в адресное пространство того процесса, который юзает дерово. У Рихтера подробно описано, что как и почему. И пример программы, которую можнобудет адаптировать для твоего случаю. Программа внедряется в эксплорер и грабит иконки.
Можно и не внедряясь — использовать выделение памяти в нужном процессе и передавать в сообщении указатель на выделенный блок посмотри в MSDN
строка поиска:
Lv2Clip
M>Можно и не внедряясь — использовать выделение памяти в нужном процессе и передавать в сообщении указатель на выделенный блок посмотри в MSDN M>строка поиска: M>Lv2Clip
<Большое спасибо, все получилось. Ключевой момент — VirtualAllocEx — выделение памяти в процессе, содержащем исследуемый элемент GUI.