![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прочитать информацию с чужй формы (Заголовок формы известен) [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[] для получения инф-ции об интересующем лейбл-объекте .