Как получить контент элемента GUI
От: konst-in Россия  
Дата: 02.08.02 03:39
Оценка:
Здравствуйте!
Есть необходимость получения контента элемента GUI программы в другой программе (для целей тестирования) — пример, в исследуемой программе есть tree контрол, нужно из другой программы считать все дерево этого контрола и произвести анализ содержимого. Средствами WIN API нет проблем получить дескриптор контрола, послать message для получения дескрипторов узлов дерева HTREEITEM, но далее начинаются проблемы.
Для получения содержимого узла (текста, например) я в message должен поместить адрес структуры, которая должна быть заполнена при отработке сообщения — есть подозрение, что так делать нельзя если работаешь с другим приложением — проблема доступа к памяти — памяти,то, двух программ — разные!
Кто знает, как тут быть? Необходима технология решения подобных задач.

Заранее благодарен, Константин.
С уважением, Константин.
Re: Как получить контент элемента GUI
От: vladsm Россия  
Дата: 02.08.02 05:47
Оценка:
Здравствуйте konst-in, Вы писали:

KI>Здравствуйте!

KI> Есть необходимость получения контента элемента GUI программы в другой программе (для целей тестирования) — пример, в исследуемой программе есть tree контрол, нужно из другой программы считать все дерево этого контрола и произвести анализ содержимого. Средствами WIN API нет проблем получить дескриптор контрола, послать message для получения дескрипторов узлов дерева HTREEITEM, но далее начинаются проблемы.
KI> Для получения содержимого узла (текста, например) я в message должен поместить адрес структуры, которая должна быть заполнена при отработке сообщения — есть подозрение, что так делать нельзя если работаешь с другим приложением — проблема доступа к памяти — памяти,то, двух программ — разные!
KI> Кто знает, как тут быть? Необходима технология решения подобных задач.

KI>Заранее благодарен, Константин.


Посмотри на WM_COPYDATA или файлы, проецируемые в память.
Re: Как получить контент элемента GUI
От: vladsm Россия  
Дата: 02.08.02 05:50
Оценка:
Здравствуйте konst-in, Вы писали:

И еще посмотри вот сюда: IPC
Автор(ы): Алекс Jenter
Дата: 10.03.2001
Обзор основных технологий IPC: Очень многим приложениям, если не большей части, требуется
информация от других приложений, либо они должны эту информацию сообщать.
Именно поэтому в операционную систему встраивается множество механизмов,
которые обеспечивают т.н. Interproccess Communication (IPC) — то есть
межпроцессное взаимодействие...
Re[2]: Как получить контент элемента GUI
От: konst-in Россия  
Дата: 02.08.02 06:05
Оценка:
Здравствуйте vladsm, Вы писали:


V>Посмотри на WM_COPYDATA или файлы, проецируемые в память.


Дело в том, что я не имею возможности лезть в исследуемое приложение, а при использовании всяких механизмов организации shared memory (в dll или проецуруемых файлов), я должен получить адрес памяти изнутри исследуемого приложения. По крайней мере пробовал и WM_COPYDATA и отображение файлов — не получилось. Где-то есть изюминка...
С уважением, Константин.
Re: Как получить контент элемента GUI
От: Ибрагим Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.08.02 08:12
Оценка:
Здравствуйте konst-in, Вы писали:

Надо внедряться в адресное пространство того процесса, который юзает дерово. У Рихтера подробно описано, что как и почему. И пример программы, которую можнобудет адаптировать для твоего случаю. Программа внедряется в эксплорер и грабит иконки.


KI>Здравствуйте!

KI> Есть необходимость получения контента элемента GUI программы в другой программе (для целей тестирования) — пример, в исследуемой программе есть tree контрол, нужно из другой программы считать все дерево этого контрола и произвести анализ содержимого. Средствами WIN API нет проблем получить дескриптор контрола, послать message для получения дескрипторов узлов дерева HTREEITEM, но далее начинаются проблемы.
KI> Для получения содержимого узла (текста, например) я в message должен поместить адрес структуры, которая должна быть заполнена при отработке сообщения — есть подозрение, что так делать нельзя если работаешь с другим приложением — проблема доступа к памяти — памяти,то, двух программ — разные!
KI> Кто знает, как тут быть? Необходима технология решения подобных задач.

KI>Заранее благодарен, Константин.
Re[3]: Как получить контент элемента GUI
От: Vis Украина  
Дата: 02.08.02 09:04
Оценка:
Здравствуйте konst-in, Вы писали:

KI>Здравствуйте vladsm, Вы писали:



V>>Посмотри на WM_COPYDATA или файлы, проецируемые в память.


KI>Дело в том, что я не имею возможности лезть в исследуемое приложение, а при использовании всяких механизмов организации shared memory (в dll или проецуруемых файлов), я должен получить адрес памяти изнутри исследуемого приложения. По крайней мере пробовал и WM_COPYDATA и отображение файлов — не получилось. Где-то есть изюминка...



Изюминка есть...
Например вот такая...
Toolhelp32ReadProcessMemory(...)
Параметры описаны в MSDN...

По моему это то, что тебе надо...
Re[2]: Как получить контент элемента GUI
От: migel  
Дата: 02.08.02 09:06
Оценка: 18 (1)
Здравствуйте Ибрагим, Вы писали:

И>Здравствуйте konst-in, Вы писали:


И>Надо внедряться в адресное пространство того процесса, который юзает дерово. У Рихтера подробно описано, что как и почему. И пример программы, которую можнобудет адаптировать для твоего случаю. Программа внедряется в эксплорер и грабит иконки.


Можно и не внедряясь — использовать выделение памяти в нужном процессе и передавать в сообщении указатель на выделенный блок посмотри в MSDN
строка поиска:
Lv2Clip
Re[3]: Как получить контент элемента GUI
От: konst-in Россия  
Дата: 05.08.02 02:39
Оценка:
Здравствуйте migel, Вы писали:


M>Можно и не внедряясь — использовать выделение памяти в нужном процессе и передавать в сообщении указатель на выделенный блок посмотри в MSDN

M>строка поиска:
M>Lv2Clip


<Большое спасибо, все получилось. Ключевой момент — VirtualAllocEx — выделение памяти в процессе, содержащем исследуемый элемент GUI.

Большое спасибо всем участникам обсуждения!

С уважением, Колесников Константин.
С уважением, Константин.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.