Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Взаимодействие с чужими окнами [D7, WinXP]


Страницы:   1 2

lis1985 ©   (2006-03-03 20:04:00) 

Как поставить флажок в CheckBox чужого окна?


n0name   (2006-03-13 09:51:00) [1]


h1 := FindWindow(nil,'Вход');
h2 := FindWindowEx(h1, 0, 'Edit', nil);
h2 := GetNextWindow(h2, GW_HWNDNEXT);
SendMessage(h2, WM_SETTEXT, 0, Integer(PChar('ТЕКСТ')));


Handle   (2006-03-13 07:45:00) [2]

procedure TForm1.Button1Click(Sender: TObject);
var
 h1, h2: hwnd;
begin
h1 := FindWindow(nil,'Form2');
h2 := FindWindowEx(h1, 0, 'TEdit', nil); // Текст появится в Edit2
//h2 := GetWindow(h2, GW_HWNDNEXT);  // <- Если добавишь эту строчку, то в Edit1
SendMessage(h2, WM_SETTEXT, 0, Integer(PChar('ТЕКСТ')));
end;


Если у тебя три и больше TEdit, то текст добавляется в последний созданный


Lis1985   (2006-03-12 22:26:00) [3]

В окне имеется два одинаковых "Edit".
Таким образом я нахожу и изменяю содержимое 1ого "Edit":
h1 := FindWindow(nil,'Вход');
h2 := FindWindowEx(h1, 0, 'Edit', nil);
SendMessage(h2, WM_SETTEXT, 0, Integer(PChar('ТЕКСТ')));

Как мне изменить содержимое 2ого "Edit"?


Lis1985   (2006-03-12 22:02:00) [4]

Что не понятно-то?


Handle   (2006-03-12 15:09:00) [5]

Кто нибудь отведите меня в поле и пристрелите.


Lis1985   (2006-03-12 14:42:00) [6]

Значит, нашёл главное окно:
h1 := FindWindow(nil,'Вход');

Окно "Вход" имеет два "Edit".

Нахожу "Edit":
h2 := FindWindowEx(h1, 0, 'Edit', '  ');
но находится не тот "Edit", который мне нужен. Внимание вопрос! Как найти "Edit", который мне нужен?


Handle   (2006-03-12 14:29:00) [7]


> Lis1985   (12.03.06 14:23) [15]
> Что-то не получается! У меня есть два Edit на чужом окне.
>  Мне необходимо заполнить 2ой Edit, а заполняется первый.
>


Сосредаточься, внимательно посмотри на экран компьютера и мысленно передай мне код своей программы, частота передачи 123456789 Гц.


Lis1985   (2006-03-12 14:23:00) [8]

Что-то не получается! У меня есть два Edit на чужом окне. Мне необходимо заполнить 2ой Edit, а заполняется первый.


Handle   (2006-03-12 13:59:00) [9]

var
 Form1: TForm1;
 h1, h2: hwnd;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
h1 := FindWindow(nil,'Form2');
if h1 = 0 then
begin
ShowMessage('Окно не найдено !!');
Exit;
end
else
begin
h2 := FindWindowEx(h1, 0, 'TEdit', nil);
if h2 <> 0 then
begin
SendMessage(h2, WM_SETTEXT, 0, Integer(PChar('ТЕКСТ')));
end
else
begin
ShowMessage('TEdit не найден !!');
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
Form2.FormStyle:= fsStayOnTop;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
h2 := GetWindow(h2, GW_HWNDNEXT);
SendMessage(h2, WM_SETTEXT, 0, Integer(PChar('ТЕКСТ')));
end;


Lis1985   (2006-03-12 13:52:00) [10]

Если у меня два "Edit"? и как пользоваться GetNextWindow?


Lis1985   (2006-03-12 12:35:00) [11]

Ок. Спасибо.


Handle   (2006-03-12 10:54:00) [12]

procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
Form2.FormStyle:= fsStayOnTop;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
h1, h2: hwnd;
begin
h1 := FindWindow(nil,'Form2');
if h1 = 0 then
begin
ShowMessage('Окно не найдено !!');
Exit;
end
else
begin
h2 := FindWindowEx(h1, 0, 'TEdit', nil);
if h2 <> 0 then
begin
SendMessage(h2, WM_SETTEXT, 0, Integer(PChar('ТЕКСТ')));
end
else
begin
ShowMessage('TEdit не найден!!');
end;
end;
end;


lis1985   (2006-03-12 10:18:00) [13]

И ещё вот такой вопрос. Как заполнить Edit чужого окна?


n0name   (2006-03-05 07:36:00) [14]

Находишь первый checkbox потом GetNextWindow.


Handle   (2006-03-04 20:24:00) [15]


> Найди в инете и скачай программу Greatis WinDowse, определи
> класс и(или) имя.


А лучше сделай так.
procedure TForm1.Timer1Timer(Sender: TObject);
var
s: string;
h: HWND;
buf: array [0..127] of Char ;
begin
Timer1.Interval:= 1 ;
h := WindowFromPoint(Mouse.CursorPos);
SetLength(s, SendMessage(h, WM_GETTEXTLENGTH, 0, 0)+1);
SendMessage(h, WM_GETTEXT, length(s), Integer(PChar(s)));
SetLength(s, lStrLen(PChar(s)));
GetClassName(h,buf,127);
Label1.Caption := 'Имя окна - ' + s;
Label2.Caption:= 'Имя класса - ' + buf ;
end;


Handle   (2006-03-04 20:12:00) [16]

procedure TForm1.Button1Click(Sender: TObject);
var
h1, h2: hwnd;
begin
h1 := FindWindow(nil,'окно');
if h1 = 0 then
begin
ShowMessage('Окно не найдено !!');
Exit;
end
else
begin
h2 := FindWindowEx(h1, 0, nil, 'надпись на checkbox'е');
if h2 <> 0 then
begin
SendMessage(h2, BM_SetCheck, 1, 0);
end
else
begin
ShowMessage('CheckBox не найден!!');
end;
end;
end;


Найди в инете и скачай программу Greatis WinDowse, определи класс и(или) имя.


lis1985   (2006-03-04 19:17:00) [17]

У меня там 2 CheckBox


lis1985   (2006-03-04 19:11:00) [18]

Окно-то я нашёл, а вот CheckBox не определяет


Handle   (2006-03-04 16:10:00) [19]


> GanibalLector ©   (04.03.06 13:30) [3]
> Поможет тебе сканер окон,который покажет названия и классы
> форм


Например Greatis WinDowse.


> lis1985   (04.03.06 06:22) [2]
> Что-то не хочет работать. Вот такой вопрос возник,  вот
> в этих кавычках 'Флажок' что указывается?.


Имя искомого окна указывается, если у тебя CheckBox один но ты не знаешь как его зовут можно по классу.

FindWindowEx(h1, 0, 'TCheckBox', nil);


GanibalLector   (2006-03-04 13:30:00) [20]

2 lis1985   (04.03.06 06:22) [2]
И не будет,пока ты не найдешь имена и классы окон. Поможет тебе сканер окон,который покажет названия и классы форм.Кстати, FindWindowEx может быть несколько.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо