Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
ВнизКак получить имя этого компонента? Найти похожие ветки
← →
ffo_2 (2007-04-26 18:58) [0]Есть чужое окно (окно другой программы, запускаемой по команде из моей программы).
В этом чужом окне (тоже, кстати, когдато кем то сделанном в Delphi) один из многих
компонентов имеет тип TEdit (это знаю точно). Мне надо получить имя этого компонента.
С помощью GetClassName(ChidHWND, Klass, 80); я получил класс этого окна
С помощью GetWindowText(ChidHWND, Caption, 80);я получаю текст в окне этого компонента
А как мне получить имя этого Edit-а? т.е. как получить свойство Name компонента TEdit,
находящегося на чужой форме.
Вот как я нахожу класс и текст:
function ffoEnumChildProc(ChidHWND: hWnd; List: TStrings): Bool; stdcall;
var
Klass : array [0..80] of char;
Caption : array [0..80] of char;
ss:String;
begin
//перебрать все компоненты и записать их типы и текст (в их окнах) в Мемо
Result := True;
GetClassName(ChidHWND, Klass, 80);
Id := GetDlgCtrlId(ChidHWND);
GetWindowText(ChidHWND, Caption, 80);
Form5.Memo1.Lines.Add(Format("Класс: %s, Текст: %s", [Klass, Caption]));
end;
procedure TForm5.Button1Click(Sender: TObject);
begin
Form5.Memo1.Lines.Clear;
EnumChildWindows( Wnd1,@ffoEnumChildProc,1);
end;
← →
Leonid Troyanovsky © (2007-04-26 19:15) [1]
> ffo_2 (26.04.07 18:58)
> А как мне получить имя этого Edit-а? т.е. как получить свойство
> Name компонента TEdit,
Что в имени тебе его?
--
Regards, LVT.
← →
ffo_2 (2007-04-26 23:39) [2]Куча компонентов на этой чужой форме.
Мне надо среди них выбрать все Едиты (получить их хэндлы) и потом
по мере необходимости посылать в окна этих Едитов SetWindowText и считывать из них SetWindowText.
Я могу класс их определить (GetClassName), но у них там у всех класс TEdit.
Я могу текст из них считывать (GetWindowText), но у некоторых текст в окне одинаковый. Собственно проблема - то и состоит в том, что текст в онах у некоторых из них одинаковый. Ну вот к примеру я у десяти Едитов успешно определяю хендлы т.к. текст в их окнах разный, а у 11 и 12 определить не могу так как у них в окнах цифры восемь (у обоих). Короче вот кусок кода в котором надо определить Хендлы 11 и 12 Едитов. Решение гдето близко, да череп уже варить отказывается...
var
EditHandle1,
EditHandle2,
EditHandle3,
EditHandle4,
EditHandle5,
EditHandle6,
EditHandle7,
EditHandle8,
EditHandle9,
EditHandle10,
EditHandle11,
EditHandle12 : Longint;
...
function ffoEnumChildProc(ChidHWND: hWnd; List: TStrings): Bool; stdcall;
var
Klass : array [0..80] of char;
Caption : array [0..80] of char;
ss:String;
begin
//перебрать все компоненты и записать их типы и текст (в их окнах) в Мемо
Result := True;
GetClassName(ChidHWND, Klass, 80);
Id := GetDlgCtrlId(ChidHWND);
GetWindowText(ChidHWND, Caption, 80);
//Определяем Хэндлы дочерних окон
if(StrComp("TEdit",Klass) = 0 )and ((StrComp("8",Caption) = 0)) then EditHandle1 := ChidHWND //lx
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("5",Caption) = 0)) then EditHandle2 := ChidHWND //lz
// else if(StrComp("TEdit", Klass) = 0)and ((StrComp(" ",Caption) = 0)) then EditHandle3 := ChidHWND // нет такого
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("3",Caption) = 0)) then EditHandle4 := ChidHWND //Ez
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("6",Caption) = 0)) then EditHandle5 := ChidHWND //Ex
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("10",Caption) = 0)) then EditHandle6 := ChidHWND //Ez_г
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("18",Caption) = 0)) then EditHandle7 := ChidHWND //Ex_г
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("0",Caption) = 0)) then EditHandle8 := ChidHWND //LzT
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("50",Caption) = 0)) then EditHandle9 := ChidHWND //LxT
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("12",Caption) = 0)) then EditHandle10 := ChidHWND //Nц
//Вот тут геморой, так как в окнах у этих двух Едитов вписано 200
//поэтому я не могу выцепить их Хэндлы
else if(StrComp("TEdit", Klass) = 0)and ((StrComp("200",Caption)= 0)) then EditHandle11 := ChidHWND //Цx ???
// else if(StrComp("TEdit", Klass) = 0)and ((StrComp("200",Caption)= 0)) then EditHandle12 := ChidHWND //Цz ???
Form5.Memo1.Lines.Add(Format("Класс: %s, Текст: %s", [Klass, Caption]));
end;
procedure TForm5.Button1Click(Sender: TObject);
begin
Form5.Memo1.Lines.Clear;
EnumChildWindows( Wnd1,@ffoEnumChildProc,1);
end;
← →
имя (2007-04-27 00:02) [3]Удалено модератором
← →
Rouse_ © (2007-04-27 00:03) [4]И раздвинулись перед Моисеем и паствой его воды, и сказал Моисей - аххренеть....
GetWindowText применяется к хэндлу - что ты хочешь еще найти, если хэндл тебе уже известен?
← →
Leonid Troyanovsky © (2007-04-27 01:12) [5]
> ffo_2 (26.04.07 23:39) [2]
> Куча компонентов на этой чужой форме.
Для идентификации edit может пригодится его z-order и/или
положение в окне парента.
А имен у него может и не быть, это допустимо.
Да, и не GetWindowText, а WM_GETTEXT.
--
Regards, LVT.
← →
Германн © (2007-04-27 02:01) [6]
> ffo_2 (26.04.07 18:58)
Суть вопроса уловил. Суть задачи, которую надо решить - нет.
Читай http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Кстати. McSimm, может пора перестать издеваться над усопшим Р.Шэкли, давая уже много лет неработающую ссылку на его рассказ?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c