![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компоненты чужого окна [D6, Win95/98, Win2k]
hooky-mars © (2002-05-29 18:34:00)Saluer!
Люди я могу найти нужное мне окно и вывести его поверх других, но как получить список компонентов этого окна и как к ним обратиться?
Заранее благадарен!
hooky-mars (2002-06-09 13:37:00) [1]Ну так что никак?
hooky-mars (2002-06-09 12:21:00) [2]А как поменять атрибуты у ричедита? Черей обычные сообщения немогу
Song (2002-05-31 22:37:00) [3]>>Ну и как?
WM_CUT, WM_COPY, WM_PASTE
SergeySA (2002-05-31 18:55:00) [4]для hooky-mars
через WinAPI можно делать с визуальными классами, а
не компонентами (как правильно сказал Song)
чё захочешь (только не со SpeedButton у неё нет хэндла,
но и то можно в обход) (Хотя в описании API написано
что FindWindowsEx под NT не пойдёт - не знаю не пробывал)
Есть две основные ф-ции postmessageи sendmessage.
Например возмём строку из listbox (чужое окно)
procedure Tzzz.get(Sender: TObject);
var
hw, ch ,count, i : integer;
buf : array [1..10] of char;
begin
hw:=FindWindow(nil,"Поиск по категориям"); //ищем окно
if hw<>0 then
begin
ch:=FindWindowEx(hw,0,"TListBox",nil);//ищел там листбокс
if ch<>0 then
begin
count:= sendmessage(ch,LB_GETCOUNT,0,0);//сколько же там строк?
if count<>0 then
begin
for i:=0 to count-1 do
begin
sendmessage(ch,LB_GETTEXT,i,integer(@buf));
listbox2.Items.Add(buf);
end;
end else showmessage("Записи отсутствуют.");
end
else showmessage("listbox не найден.");
end
else showmessage("Окно - Поиск по категориям - не найдено.");
end;
Что такое LB_GETTEXT и т.д. и друрие подробности читай в описании API ф-ций.
hooky-mars (2002-05-31 18:39:00) [5]
> Song
Ну и как?
Song (2002-05-31 18:33:00) [6]Через буфер также делается обменом сообщений.
hooky-mars (2002-05-31 18:31:00) [7]
> Song ©
А через буфер?
Song (2002-05-31 17:12:00) [8]Понятие "компонент" есть только у Вашего приложения, которое Вы разарабатываете. У чужого приложения есть понятия "окна". При чём не только те окна что Вы подразумеваете в Вашем проекте под формами, а любые другие визуальные классы (combobox, listbox, button и т.д.) После того как Вы отощите их handle, обращаться к ним можно через SendMessage, PostMessage и некоторые дургие методы.
hooky-mars (2002-05-31 16:45:00) [9]Ну так что?
hooky-mars (2002-05-30 21:36:00) [10]Проблемс. А как по хэндлу обратиться к самой компаненте( пока только смог прочитать имя) , что-то поменянь на ней(к примеру каптион)?
hooky-mars (2002-05-30 20:49:00) [11]
> SergeySA
Спасибо! И всем кто ринимал участие в проблеме!
SergeySA (2002-05-30 18:25:00) [12]result:=
FindWindowEx(handle_main_window,chid,class,copmonent_name)
handle_main_window - хэндл окна
chid - хэндл компонента (для первого раза = 0, а потом result)
class - например "Tbutton" или NIL
copmonent_name - имя (что видишь) "Ok" - например или или NIL
Пример:
ch1:=FindWindowEx(hw,0,"TListBox",nil);
найдёт 1-й листбокс - вернёт его хэндл
ch2:=FindWindowEx(hw,ch1,"TListBox",nil);
найдёт 2-й листбокс
ну и т.д.
hooky-mars (2002-05-30 17:55:00) [13]
> Song © (30.05.02 17:53)
> >>Поясните пожалуйста, а то в хелпе на этот счет нет ни
> чего.
>
> Да ладно.... Нажмите-ка них Ctrl+F1
Да точно таже справка и вызывается!
Song (2002-05-30 17:53:00) [14]>>Поясните пожалуйста, а то в хелпе на этот счет нет ни чего.
Да ладно.... Нажмите-ка них Ctrl+F1
hooky-mars (2002-05-30 17:49:00) [15]
> Song © (29.05.02 23:40)
> FindWindowEx()
> GetWindow()
> Это вопрос из АПИ.
Поясните пожалуйста, а то в хелпе на этот счет нет ни чего.
Игорь Шевченко (2002-05-30 11:56:00) [16]Написать аналог FindControl, зная идентификатор потока чужого приложения и hWnd.
Song (2002-05-30 11:38:00) [17]2MaximatorVeter © (30.05.02 11:27
Вы бы тему ещё раз перечитали.
MaximatorVeter (2002-05-30 11:27:00) [18]
Form1.Components
Form1.ComponentCount
Form1.ComponentIndex
Song (2002-05-29 23:40:00) [19]FindWindowEx()
GetWindow()
Это вопрос из АПИ.
~Sergius (2002-05-29 22:58:00) [20]УППС.
Прошу извинить! Невнимательно прочитал вопрос