Что нового

[Мышь, клавиатура] Взаимодействие скрипта AutoIT с exe-файлом, созданным в с++ билдере

Wolfik_s_b

Новичок
Сообщения
7
Репутация
0
Подскажите, уважаемые форумчане - есть файл программки, созданной в билдере, в формате *.exe При запуске появляется форма, в которой расположены: надпись, объект Edit1, две кнопки. При запуске программы курсор в окне ввода Edit1. В скрипте прописываю запуск программы - запускает, далее необходимо ввести несколько символов в Edit1 и нажать Enter или кнопку1 на форме. Ввод символов не работает. Как ни бьюсь - не получается. пытаюсь с перехватом окна через Window Info отработать - не идет. При этом, если вместо билдерной проги прописать блокнот - работает.
Код:
Run("d:\Ftemp\bat\Rabota_Beta.exe")
$hWnd = WinWait("[CLASS:TForm1]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
ControlSend($hWnd, "", "Edit1", "10")
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Wolfik_s_b
через Window Info отработать - не идет
Если Window Info не определяет данный элемент, откуда вам известно, что класс элемента Edit ?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
A

Alofa

Гость
Wolfik_s_b
[list type=decimal]
[*]Первым делом вам нужно посмотреть что возвращают функции входящие в ваш скрипт
Код:
Run("d:\Ftemp\bat\Rabota_Beta.exe")
$hWnd = WinWait("[CLASS:TForm1]", "", 5)
MsgBox(0, '1', '$hWnd = ' & $hWnd) ; Проверка
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
MsgBox(0, '2', ControlSend($hWnd, "", "Edit1", "10")) ; Проверка
[*]
Wolfik_s_b сказал(а):
Код:
$hWnd = WinWait("[CLASS:TForm1]", "", 5)
Я думаю для корректного поиска нужного окна параметра "CLASS" будет маловато, нужно хотя бы "TITLE" добавить.
Пример: "[TITLE:MyTitleScript; CLASS:TForm1]". Подробнее.
[*]
Wolfik_s_b сказал(а):
Код:
ControlSend($hWnd, "", "Edit1", "10")
А это что за безобразие. Разве теперь параметр "controlID" модно именно так записывать?
[*] Функция "ControlSend" сработает только в том Edit, который доступен для редактирования. Иначе пользуйте "ControlSetText".
[/list]
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Alofa
Разве теперь параметр "controlID" модно именно так записывать?
Подобная запись является умолчанием. Так было всегда.
Если специальный формат не используется, то параметр считается как идентификатор ID (если число) или ClassnameNN/текст элемента управления (если строка).
 
Автор
W

Wolfik_s_b

Новичок
Сообщения
7
Репутация
0
Medic84 сказал(а):
Wolfik_s_b [?]
созданной в билдере

InnI [?]
Если Window Info не определяет данный элемент, откуда вам известно, что класс элемента Edit ?
Я думаю - это его программа) И он знает какие поля добавлял.

Да, все верно, на билдере - моя программа. А на счет "Window Info - не определяет" - дело обстоит так: в окне запущеной проги билдера курсор сразу установлен в объект Edit1. Window Info при наведении на него определяет его как объект ComboBox2 (который по размерам такой же, как Edit1, находится в том же месте, но скрыт. После ввода значения в поле Edit1 и нажатии Enter или клику по кнопку Button1, объект Edit1 скрывается Visible=false, а ComboBox2 открывается для выбора из списка. Почему-то Windows Info видит именно ComboBox2 в этом месте.

InnI сказал(а):
Medic84
он знает какие поля добавлял
Только AutoIt об этом не знает :smile:
Borland, насколько я помню, классы начинает с T (TEdit).

Ваш вариант помог :smile: Спасибо всем за советы! Ошибка была именно в том, что прописан в скрипте Edit1, а нужно было TEdit1.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Модератор.
 
Автор
W

Wolfik_s_b

Новичок
Сообщения
7
Репутация
0
Спасибо всем. Вопрос решен, ответ указал.
 
Верх