Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Ожидание появления Next скриптом. Как?

Ответить
Настройки темы
[решено] Ожидание появления Next скриптом. Как?

Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Есть такой кусок скрипта который тискает по кнопкам для установки программы:

Код: Выделить весь код
WinWait				('Установка ...','','')
ControlClick			('Установка ...','',101)
Проблема в том, что когда появляется окно 'Установка ...' то кнопка под номером 101 не активна, но скрипт все равно ее нажимает и работает дальше. А кнопка 101 становится активна через несколько секунд. Как записать этот скрипт чтобы он ждал когда кнопка 101 станет активной и лишь тогда ее нажал???
Какой либо таймер ожидания не подходит, так как время появления кнопки рандомное...

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 16:54, 06-02-2011

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Pozia,
А так:
Код: Выделить весь код
$sTitle = 'SolidWorks 2011'

$iButton = 10 ;кол-во кнопок у Вас их явно меньше.
$sButtonText = 'Next'
$sID = ''
$fYes = False

$hWin = WinWait($sTitle, '', 5)
If Not $hWin Then
    MsgBox(16, 'Error', 'Нет окна ' & $sTitle)
    Exit
EndIf
$iStart = TimerInit()
While 1
    If TimerDiff($iStart) > 30000 Then ExitLoop
    For $i = 1 To $iButton
        $sID = 'Button' & $i
        If StringInStr(ControlGetText($hWin, '', $sID), $sButtonText) And _
                ControlCommand($hWin, '', $sID, 'IsEnabled', '') Then
            $fYes = True
            ExitLoop 2
        EndIf
        Sleep(100)
    Next
WEnd
If $fYes Then
    ControlClick($hWin, '', $sID)
Else
    MsgBox(16, 'Error', 'Время вышло, кнопку не нашли.')
    Exit
EndIf

Отправлено: 21:28, 06-02-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


madmasles, говорит время вышло, кнопку не нашли (

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 21:42, 06-02-2011 | #12


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Pozia,
Дайте, пожалуйста, ссылку на SolidWorks 2011 SP02.

Отправлено: 22:21, 06-02-2011 | #13


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


madmasles, в личку отправил

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 22:33, 06-02-2011 | #14


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


madmasles, вот сумел так кнопку нажать:
Код: Выделить весь код
WinWait				('SolidWorks 2011 SP02 Setup','','')
ControlSend			('SolidWorks 2011 SP02 Setup','','[CLASS:Button; INSTANCE:1]','{Enter}')
Но так не интересно, ведь если окно по какой то причине будет неактивно (задел что то мышкой), то Enter будет нажат в пустоту. Если не ошибаюсь. Но если других вариантов не найдете, может хоть это приделайте к вашему последнему варианту?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 07:42, 07-02-2011 | #15


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Pozia, ControlSend не требует активного окна. а вообще, если код
Код: Выделить весь код
ControlSend			('SolidWorks 2011 SP02 Setup','','[CLASS:Button; INSTANCE:1]','{Enter}')
срабатывает, то можно долбится по нему в цикле через
Код: Выделить весь код
$ret = ControlClick($hWin, '', '[CLASS:Button; INSTANCE:1]')
пока $ret не вернет 1. хотя, возможно, что отправка нажатия в неактивную кнопку считается успехом. надо проверять

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 08:31, 07-02-2011 | #16


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


kaster, а точный код можете написать? А то я не силен как. А методом тыка много времени уходит... И вечером попробую.

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 08:59, 07-02-2011 | #17


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


в силу ОС, сам проверить не могу. пишу по памяти
Код: Выделить весь код
Do
    $ret = ControlClick($hWin, '', '[CLASS:Button; INSTANCE:1]')
    Sleep(100)
Until $ret
надо проверить что возвращает ControlClick по неактивной кнопке. Если 1, то не сработает. Но, могу посоветовать в коде от madmasles вместо поиска кнопки сразу использовать нужный.
Код: Выделить весь код
$sTitle = 'SolidWorks 2011'
$sID = '[CLASS:Button; INSTANCE:1]'
$hWin = WinWait($sTitle, '', 5)
$fYes = 0
If Not $hWin Then
    MsgBox(16, 'Error', 'Нет окна ' & $sTitle)
    Exit
EndIf
$iStart = TimerInit()
While TimerDiff($iStart) < 30000
    If ControlCommand($hWin, '',  $sID, 'IsEnabled', '') Then
        $fYes = 1
        ExitLoop
    EndIf
    Sleep(100)
WEnd
If $fYes Then
    ControlClick($hWin, '', $sID)
Else
    MsgBox(16, 'Error', 'Время вышло, кнопку не нашли.')
    Exit
EndIf

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Последний раз редактировалось kaster, 07-02-2011 в 20:58.


Отправлено: 10:21, 07-02-2011 | #18


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


kaster, вот такие ошибки выскакивают

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Последний раз редактировалось Pozia, 11-02-2011 в 22:12.


Отправлено: 19:10, 07-02-2011 | #19


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Pozia, по поводу первой ошибки, это была конструкция, не готовый код. но пока оставим его.
а вот по второму, в спешке удалил лишнюю строку. поправил код. попробуй проверить теперь.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 20:57, 07-02-2011 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Ожидание появления Next скриптом. Как?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как дождаться РЕАЛЬНОГО появления окна NewOLDi AutoIt 12 03-11-2019 12:13
[решено] Как скриптом проиграть видеофайл. Vagac AutoIt 18 27-11-2010 14:06
.NET - Ожидание завершения процесса Efsey Программирование и базы данных 11 24-11-2010 19:16
ожидание 3-5 минут перед тем как начать загружаться с CD/HDD Intergo Непонятные проблемы с Железом 10 19-02-2010 15:19
Как запретить RRAS ожидание входящих звонков? abode Microsoft Windows NT/2000/2003 0 01-07-2006 22:10




 
Переход