|
Вопрос # 3 745/ вопрос открыт / |
|
Доброго вам здравия, уважаемые эксперты!
Помогите, плиз...
Есть в Windowсе (XP) приложение, в нём 4 поля ввода, две кнопки...
Мне нужно в 2 поля ввести информацию, из третьего занести в переменную, и нажать на кнопку... И всё сделать программно...
Фуфф... Вроде всё...
За раннее благодарен...
|
Вопрос задал: padonak (статус: Посетитель)
Вопрос отправлен: 7 февраля 2010, 15:18
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Паровоз
Здравствуйте, padonak!
Сначала с помощью FindWindow и FindWindowEx нужно найти дескрипторы всех элементов, с которыми нужно работать. Классы окон и их заголовки, которые нужно передавать в эти функции, можно найти с помощью Spy или WinSight.
Нажатие кнопки осуществляется посылкой пары сообщений:
SendMessage(wnd,WM_LBUTTONDOWN,0,0);
SendMessage(wnd,WM_LBUTTONUP,0,0);
//wnd - дескриптор кнопки
Изменение текста в элементе редактирования:
SendMessage(wnd,WM_SETTEXT,0,Integer(s));
//wnd - дескриптор элемента редактирования
// s - переменная типа string, содержащая текст
Получение текста из элемента редактирования:
var
s:String;
len:Integer;
begin
len:=SendMessage(wnd4,WM_GETTEXTLENGTH,0,0);//длина текста
SetLength(s,len+1);//плюс 1 байт на завершающий ноль
SendMessage(wnd4,WM_GETTEXT,len+1,Integer(s));
// переменная s содержит текст, который можно передать в нужную переменную, например
// x:=StrToInt(s);
end;
|
Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 7 февраля 2010, 16:15
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 7 февраля 2010, 18:50; участников в обсуждении: 1.
|
Паровоз (статус: 10-ый класс), 7 февраля 2010, 18:50 [#1]:
Пример:
'Чужое' приложение имеет заголовок 'MainForm', а оконный класс главной формы 'TForm1'. Приложение имеет две TButton и четыре TEdit.
var
wnd:HWND;
wnd1,wnd2,wnd3,wnd4,wnd5,wnd6:HWND;
s:String;
len:Integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
//находим дескриптор wnd главной формы:
wnd:=FindWindow('TForm1','MainForm');
//находим дескриптор wnd1 первой кнопки в z-порядке:
wnd1:=FindWindowEx(wnd,0,'TButton',nil);
//находим дескриптор wnd2 второй кнопки в z-порядке:
wnd2:=FindWindowEx(wnd,wnd1,'TButton',nil);
//находим дескриптор wnd3 первого TEdit в z-порядке:
wnd3:=FindWindowEx(wnd,0,'TEdit',nil);
//находим дескриптор wnd4 второго TEdit в z-порядке:
wnd4:=FindWindowEx(wnd,wnd3,'TEdit',nil);
//находим дескриптор wnd5 третьго TEdit в z-порядке:
wnd5:=FindWindowEx(wnd,wnd4,'TEdit',nil);
//находим дескриптор wnd6 четвертого TEdit в z-порядке:
wnd6:=FindWindowEx(wnd,wnd5,'TEdit',nil);
//Пример берется из приложения Delphi. В нем "сверху"
//располагается элемент, брошенный на форму последним.
//Поэтому первая кнопка имеет дескриптор wnd2,
//а вторая - wnd1
//Нажимаем первую кнопку:
SendMessage(wnd2,WM_LBUTTONDOWN,0,0);
SendMessage(wnd2,WM_LBUTTONUP,0,0);
//Нажимаем вторую кнопку:
SendMessage(wnd1,WM_LBUTTONDOWN,0,0);
SendMessage(wnd1,WM_LBUTTONUP,0,0);
//устанавливаем текст в первом Edit:
s:='Новый текст первого Edit';
SendMessage(wnd6,WM_SETTEXT,0,Integer(s);
//устанавливаем текст во втором Edit:
s:='Новый текст второго Edit';
SendMessage(wnd5,WM_SETTEXT,0,Integer(s));
//получаем текст из третьего Edit:
len:=SendMessage(wnd4,WM_GETTEXTLENGTH,0,0);
SetLength(s,len+1);
SendMessage(wnd4,WM_GETTEXT,len+1,Integer(s));
// в s - текст из третьего Edit
end;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|