![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Доступ к компонентам другого приложения [D6, Win2k]
Alexey © (2004-03-05 10:51:00)Как считать данные из компонента Tree View другого приложения
Digitman (2004-03-05 14:04:00) [1]
> Alexey (05.03.04 13:50) [9]
то что ты получаешь 0 как рез-т вызова упомянутых макросов, говорит только об одном - хэндл целевого окна ты определил неверно
но даже если ты получишь не 0, прочитать данные об узлах непосредственно из своего процесса ты не сможешь - соотв-е макросы должны быть вызваны в ВАП того процесса, который создал и владеет интересующим тебя контролом
Alexey (2004-03-05 14:04:00) [2]To MBo:
Вот я и хочу для начала считать правильно хотя-бы число узлов.
To Digitman:
Спасибо. Я понял, что в дальнейшем чтобы получить структуру HTREEITEM (или другую если это не TreeView) мне придется внедрятся в адресное пространство целевого процесса, но пока эта задача еще не стоит.
Digitman (2004-03-05 13:56:00) [3]
> Alexey (05.03.04 13:50) [9]
ты в состоянии понять, что этот код д.б. выполнен в ВАП целевого, а не твоего собственного процесса ?
MBo (2004-03-05 13:54:00) [4]TreeView_GetCount (вызывающий TVM_GETCOUNT) вернет число узлов, поскольку для этого достаточно передать непосредственное значение в параметре сообщения, однако лишь некоторые свойства контрола можно так получить (cм. [4])
Alexey (2004-03-05 13:50:00) [5]В Windows SDK сказано:
UINT TreeView_GetCount(hwnd);
Parameters hwnd Handle to the tree-view control.
Return Values
Returns the count of items.
Может что не так, подскажите?
Alexey (2004-03-05 13:43:00) [6]Пробовал:
TreeView_GetCount("Handle программы написанной мной на Delphi содержащий компонент TTreeView") всё Ок.
Так что думаю Handle нахожу правильно. Не ясен тип контрола к которому обращаюсь.
Digitman (2004-03-05 13:41:00) [7]да, MBo прав : даже если хэндл контрола определен верно, упомянутый тобой код д.б. выполнен в ВАП целевого (а не твоего собственного) процесса
Digitman (2004-03-05 13:38:00) [8]
> нахожу следующие компоненты
судя по тому, что ты находишь, никакого отношения к компонентам делфи это не имеет
равно как и Делфи-формами там никакими не пахнет
иными словами, целевое приложение не является Делфи-приложением. а это значит, что ни о каких "формах" и "компонентах" (в привычном для Делфи-программинга смысле) речи быть не может
касаемо же "пробовал считывать" мысль одна - хэндл целевого контрола (не компонента !!!) тобой определен неверно
Alexey (2004-03-05 13:35:00) [9]У компонента TREELISTCONTROLCLASS есть в Child-ах SysHeader32
Может это чем-то поможет.
________________________________________
А насчет данных, пока нечего читать, но спасибо за совет, обязательно поищу.
MBo (2004-03-05 13:31:00) [10]Найди в кладовке пример доступа к ListView чужого процесса, и делай по аналогии, а также читай Рихтера о внедрении в другой процесс.
Причины: большинство сообщений, достающих информацию об этих контролах, требуют передачи адреса структуры данных, а адрес этот - в чужом адресном пространстве.
Alexey (2004-03-05 13:26:00) [11]Вообще на форме нахожу следующие компоненты:
CAPTION: no name
CLASS: TREELISTCONTROLCLASS
___________________________
CAPTION: Tree
CLASS: Afx:400000:8:10011:1100060:0
Пробовал считывать ListView_GetItemCount(Handle)
и TreeView_GetCount(Handle) для каждого дает ноль.
Есть мысли?
Digitman (2004-03-05 11:19:00) [12]
> Alexey (05.03.04 10:51)
именно из компонента TTreeView ? или из TreeView как общесистемного Win-контрола ? разные же вещи..
Cobalt (2004-03-05 11:03:00) [13]Может, если прога скомпилирована с BPL, будет проще.
А если нет - то придётся заморачиваться со свойсвами окон (GetWindowExtra, кажется...)
Проще считывать инфу не из компонентов, а из окон