// Там не листбокс, а EDIT, но суть точно та же. Чтобы получить текст, а не// записать его, надо просто использовать Get вместо Set. Судя по тому, что// программа уже 2 года работает без малейших проблем, Z-порядок при каждом// показе диалога один и тот же.program Project1;
uses
Windows, Messages;
const
Title1 = 'Установка связи';
Title2 = 'Удаленное соединение';
Login = '...';
Password = '...';
var
Wnd: HWND;
Control: array [0..127] of char;
procedure TypeTextIntoNextEdit(AText:string);
beginrepeat// Ищем следующее в Z-порядке окно класса EDIT
Wnd := GetWindow(Wnd, GW_HWNDNEXT);
GetClassName(Wnd, Control, SizeOf(Control))
until Control = 'Edit';
SendMessage(Wnd, WM_SETTEXT, 0, Integer(PChar(AText))) // Вводим текстend;
begin
Wnd := FindWindow(nil, Title1); // Это окно самого диалогаif Wnd = 0 then// Если не найдено, ищем другой диалог begin
Wnd := FindWindow(nil, Title2);
if Wnd = 0 then Exit;
end;
Wnd := GetWindow(Wnd, GW_CHILD); // Это верхний комбобокс
TypeTextIntoNextEdit(Login); // Вводим логин
TypeTextIntoNextEdit(Password) // Вводим парольend.
Программа на Delphi, которая автоматизирует процесс заполнения полей ввода логина и пароля в диалоговом окне с двумя заголовками: "Установка связи" (Installation connection) и "Удаленное соединение" (Remote connection). Программа использует функции Windows API для достижения этого.
Разбивка кода:
Клауза uses импортирует необходимые библиотеки, включая Windows и Messages.
Секция const определяет несколько констант: Title1, Title2, Login и Password. Эти константы используются позднее в программе.
Секция var объявляет два переменных: Wnd (handle окна) и Control (массив символов).
Процедура TypeTextIntoNextEdit принимает строковый параметр AText и использует его для заполнения следующего редактируемого контрола, который он находит в порядке Z-отображения. Она делает это следующим образом:
Найдет следующее окно в порядке Z-отображения с помощью GetWindow с флагом GW_HWNDNEXT.
Получит имя класса найденного окна с помощью GetClassName.
Проверит, является ли имя класса "Edit", и если да, отправит сообщение WM_SETTEXT, чтобы установить текст редактируемого контрола.
Основной блок программы:
Найдет диалоговое окно с заголовком Title1 или Title2 с помощью FindWindow.
Если диалоговое окно не найдено, программа выйдет из себя.
Получит первое дочернее окно диалогового окна с помощью GetWindow с флагом GW_CHILD.
Вызовет процедуру TypeTextIntoNextEdit два раза для заполнения полей ввода логина и пароля.
Обратите внимание, что код предполагает конкретную структуру диалоговых окон, где редактируемые контролы для логина и пароля находятся в порядке Z-отображения друг за другом. Если это предположение не верно, программа может работать неправильно.
Альтернативное решение могло бы быть использованием встроенных функций GUI-автоматизации Delphi, таких как TAutomation или TUI Automation, которые предоставляют более надежный и гибкий способ взаимодействия с элементами пользовательского интерфейса. Однако это требовало бы значительных изменений кода и может потребовать дополнительных зависимостей или настройки.
Предложение: Каждый раз при показе диалога программа ищет следующее окно класса EDIT в Z-порядке, вводит текст логина и пароля с помощью процедуры TypeTextIntoNextEdit.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.