Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2007, 18:59   #1
ffo
 
Регистрация: 14.03.2007
Сообщений: 6
По умолчанию Как получить имя этого компонента?

Есть чужое окно (окно другой программы, запускаемой по команде из моей программы).
В этом чужом окне (тоже, кстати, когдато кем то сделанном в 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;
ffo вне форума Ответить с цитированием
Старый 26.04.2007, 20:12   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

имя компоненты ты врядли выдернешь
rpy3uH вне форума Ответить с цитированием
Старый 26.04.2007, 23:45   #3
ffo
 
Регистрация: 14.03.2007
Сообщений: 6
По умолчанию

Куча компонентов на этой чужой форме.
Мне надо среди них выбрать все Едиты (получить их хэндлы) и потом
по мере необходимости посылать в окна этих Едитов SetWindowText и считывать из них SetWindowText.

Я могу класс их определить (GetClassName), но у них там у всех класс TEdit.
Я могу текст из них считывать (GetWindowText), но у некоторых текст в окне одинаковый. Собственно проблема - то и состоит в том, что текст в онах у некоторых из них одинаковый. Ну вот к примеру я у десяти Едитов успешно определяю хендлы т.к. текст в их окнах разный, а у 11 и 12 определить не могу так как у них в окнах цифры 200 (у обоих). Короче вот кусок кода в котором надо определить Хендлы 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;
ffo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Респект и Уважение администрации этого форума!!! Air Свободное общение 9 28.08.2008 05:58
Получить имя и свойства компонента... prizrak1390 Общие вопросы Delphi 3 08.04.2008 12:13
не могу закачать файл из этого сайта Rahim1993 О форуме и сайтах клуба 4 03.01.2008 14:29
получить рисунок из компонента WebBrowser1 Scorpeon Компоненты Delphi 3 26.06.2007 14:34