Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Z-порядок при каждом показе диалога

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Z-порядок при каждом показе диалога


// Там не листбокс, а 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);
begin
 repeat // Ищем следующее в 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 для достижения этого.

Разбивка кода:

  1. Клауза uses импортирует необходимые библиотеки, включая Windows и Messages.
  2. Секция const определяет несколько констант: Title1, Title2, Login и Password. Эти константы используются позднее в программе.
  3. Секция var объявляет два переменных: Wnd (handle окна) и Control (массив символов).
  4. Процедура TypeTextIntoNextEdit принимает строковый параметр AText и использует его для заполнения следующего редактируемого контрола, который он находит в порядке Z-отображения. Она делает это следующим образом:
    • Найдет следующее окно в порядке Z-отображения с помощью GetWindow с флагом GW_HWNDNEXT.
    • Получит имя класса найденного окна с помощью GetClassName.
    • Проверит, является ли имя класса "Edit", и если да, отправит сообщение WM_SETTEXT, чтобы установить текст редактируемого контрола.
  5. Основной блок программы:
    • Найдет диалоговое окно с заголовком 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диалоги и Фреймы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-29 05:34:59/0.0081169605255127/1