Форум: "WinAPI";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
Вниз
Как прочитать информацию с чужй формы (Заголовок формы известен) Найти похожие ветки
← →
Tracer (2003-11-12 12:29) [0]На чужой форме лежит несколько контролов типа Tedit
и Tlabel как мне прочитать из них информацию в свою программу?
← →
Digitman (2003-11-12 12:47) [1]c TEdit все просто : компонент инкапсулирует работу со стандартным виндовым классом "EDIT", достаточно по имени класса и имени окна класса найти его хэндл и запросить для найденного хэндла текст окна с пом. GetWindowText()
с TLabel все сложнее : нужно внедрять код в "чужой" процесс, ибо TLabel как потомок TGraphicControl не имеет своего окна и отрисовывается оконными процедурами формы, которой этот лейбл принадлежит. Т.е. нужно внедрить код, который, зная адрес объекта-формы в чужом ВАП, обратится к этому объекту-форме через св-во Controls[] для получения инф-ции об интересующем лейбл-объекте .
← →
Tracer (2003-11-12 13:05) [2]Спасибо.
Можно примерчик для ТEdit?
← →
Digitman (2003-11-12 13:14) [3]var
s: String;
SetString(s, GetWindowTextLength(hEditWnd));
GetWindowText(hEditWnd, PChar(s), Length(s));
← →
Tracer (2003-11-12 16:42) [4]а как сделать это для всех контролов (TEdit-ов)
те. как получить список всех контролов окна?
← →
Digitman (2003-11-12 17:13) [5]надо знать, кто их parent ... а для каждого parent"а - кто, соответственно, его parent .. и так до окна, не имеющего parent"а (точнее сказать - parent"ом окна верхнего уровня будет дисктоп)
рекурсивно перечисляешь все окна верхнего уровня, для каждого найденного окна - его детей, для каждого найденнного "дитяти" - его "дитятей" ... выход из рекурсивного цикла - при нахождении окна, чей класс и имя совпадают с искомым окном edit"а
← →
Tracer (2003-11-12 17:59) [6]Оно понятно,
для начала нужно найти окно через FindWindow > вернет handle окна
Затем через FindWindowEx найти нужный эдит > вернет handle эдита
Для этого нужно знать хотя-бы имя искомого контрола.
После этого можно делать с эдитом все, что угодно с помощью
ф-ции SendMessage
например взять текст
SendMessage(EditHandle, WM_GETTEXT, 0, 0)
А как взять handle того едита имя которого я не знаю ?
и даже не точно знаю данные этого контрола? знаю только, что это TEdit?
← →
Digitman (2003-11-12 18:13) [7]
> имя которого я не знаю ?
а утилиты на что ? WinSight (Борланд) ? SpyXX (MS) ?
они дадут тебе детальную инф-цию об атрибутах искомого окна и дереве окон, по которому ты должен пробежать программно в поисках искомого окна контрола
← →
Tracer (2003-11-12 18:18) [8]точно! блин, чужая форма то = const. и имена всех контролов останутся постоянными.
спасибо.
← →
Digitman (2003-11-12 18:26) [9]
> чужая форма то = const
ну это еще, положим, бабушка надвое сказала)
не исключена ситуация, что класс окна контрола фиксирован, а имя окна того же контрола может динамически меняться в ходе работы процесса
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c