Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как прочитать информацию с чужй формы (Заголовок формы известен) [D6, Win95/98, Win2k]


Tracer ©   (2003-11-12 12:29:00) 

На чужой форме лежит несколько контролов типа Tedit
и Tlabel как мне прочитать из них информацию в свою программу?


Digitman   (2003-11-12 18:26:00) [1]


> чужая форма то = const


ну это еще, положим, бабушка надвое сказала)

не исключена ситуация, что класс окна контрола фиксирован, а имя окна того же контрола может динамически меняться в ходе работы процесса


Tracer   (2003-11-12 18:18:00) [2]

точно! блин, чужая форма то = const. и имена всех контролов останутся постоянными.
спасибо.


Digitman   (2003-11-12 18:13:00) [3]


> имя которого я не знаю ?


а утилиты на что ? WinSight (Борланд) ? SpyXX (MS) ?

они дадут тебе детальную инф-цию об атрибутах искомого окна и дереве окон, по которому ты должен пробежать программно в поисках искомого окна контрола


Tracer   (2003-11-12 17:59:00) [4]

Оно понятно,
для начала нужно найти окно через FindWindow > вернет handle окна
Затем через FindWindowEx найти нужный эдит > вернет handle эдита
Для этого нужно знать хотя-бы имя искомого контрола.
После этого можно делать с эдитом все, что угодно с помощью
ф-ции SendMessage
например взять текст
SendMessage(EditHandle, WM_GETTEXT, 0, 0)
А как взять handle того едита имя которого я не знаю ?
и даже не точно знаю данные этого контрола? знаю только, что это TEdit?


Digitman   (2003-11-12 17:13:00) [5]

надо знать, кто их parent ... а для каждого parent"а - кто, соответственно, его parent .. и так до окна, не имеющего parent"а (точнее сказать - parent"ом окна верхнего уровня будет дисктоп)

рекурсивно перечисляешь все окна верхнего уровня, для каждого найденного окна - его детей, для каждого найденнного "дитяти" - его "дитятей" ... выход из рекурсивного цикла - при нахождении окна, чей класс и имя совпадают с искомым окном edit"а


Tracer   (2003-11-12 16:42:00) [6]

а как сделать это для всех контролов (TEdit-ов)
те. как получить список всех контролов окна?


Digitman   (2003-11-12 13:14:00) [7]

var
s: String;

SetString(s, GetWindowTextLength(hEditWnd));
GetWindowText(hEditWnd, PChar(s), Length(s));


Tracer   (2003-11-12 13:05:00) [8]

Спасибо.
Можно примерчик для ТEdit?


Digitman   (2003-11-12 12:47:00) [9]

c TEdit все просто : компонент инкапсулирует работу со стандартным виндовым классом "EDIT", достаточно по имени класса и имени окна класса найти его хэндл и запросить для найденного хэндла текст окна с пом. GetWindowText()

с TLabel все сложнее : нужно внедрять код в "чужой" процесс, ибо TLabel как потомок TGraphicControl не имеет своего окна и отрисовывается оконными процедурами формы, которой этот лейбл принадлежит. Т.е. нужно внедрить код, который, зная адрес объекта-формы в чужом ВАП, обратится к этому объекту-форме через св-во Controls[] для получения инф-ции об интересующем лейбл-объекте .


Наверх

Титульная страница Поиск, карта сайта Написать письмо