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

Показать сообщение отдельно

Googler


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

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


Цитата semiono:
Ведь окно Install не висит в ожидании, поэтому чекать его нет смысла,
а если добавить WinWaitActive("Install") тоже неизвестно что из этого выйдет,
так как окно не всегда актуально... »
если есть возможность уникально идентифицировать ВСЕ окна мастера установки, то можно организовать выбор обработчика в одном рабочем цикле, вот два варианта, у каждого свои плюсы и минусы:

Вариант 1. (предпочтительный)
Идентифицируем текущее активное окно и запускаем нужный обработчик, порядок следования не важен, но пользователь или другой процесс не должны в процессе установки менять активное окно:
Код: Выделить весь код
While 1
    $sWinTitle = WinGetTitle("[active]")   ; Заголовок активного окна
    $sWinText  = WinGetText("[active]")    ; Текст активного окна

    Select
        Case $sWinTitle = "Select Destination Directory"
        ; код обработки окна 1
        Case $sWinTitle = "Install"
        ; код обработки окна 2
        Case $sWinTitle = "Choose Destination Location"
        ; код обработки окна 3
        Case Else
            ExitLoop
    EndSelect

    Sleep(500)
WEnd
Вариант 2.
Для каждого окна проверяем его наличие в системе, и при нахождении запускаем нужный обработчик. Порядок перебора обработчиков должен быть от дочерних - к родительским (родительские для дочерних существуют всегда). Необходимо обеспечить уникальность окон во всей системе, а не только среди окон мастера.
Код: Выделить весь код
While 1
    Select
        Case WinExists("Choose Destination Location")
        ; код обработки окна 1
        Case WinExists("Select Destination Directory")
        ; код обработки окна 2
        Case WinExists("Install")
        ; код обработки окна 3
        Case Else
            ExitLoop
    EndSelect

    Sleep(500)
WEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:26, 24-02-2009 | #3