Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 745

/ вопрос открыт /

Доброго вам здравия, уважаемые эксперты!
Помогите, плиз...
Есть в Windowсе (XP) приложение, в нём 4 поля ввода, две кнопки...
Мне нужно в 2 поля ввести информацию, из третьего занести в переменную, и нажать на кнопку... И всё сделать программно...
Фуфф... Вроде всё...
За раннее благодарен...

padonak Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 17 ноября 2024, 01:40
Выполнено за 0.03 сек.