![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Взаимодействие с чужими окнами [D7, WinXP]
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 может быть несколько.