Что нового

Ожидание разных окон (с условием)

forbrock

Новичок
Сообщения
43
Репутация
0
Привет всем!
Есть скрипт:
Код:
Opt("TrayIconDebug",1)

$sTitle = "Агент администрирования"
$sTextNew = "Добро пожаловать в мастер установки"
$sTextRenew = "Возобновление работы мастера установки"
$sTextSource = "Папка назначения"
$sTextServer = "Выбор Сервера администрирования."
$sTextProxi = "Конфигурация прокси-сервера"
$sTextSertifikat = "Сертификат Сервера администрирования"
$sTextAgent = "Запустить Агент администрирования"
$sTextInstall = "Программа готова к началу установки."
$sTextDone = "Программа установки завершена"

Run ("c:\temp\NetAgent\setup.exe") ; Запуск установки агента касперского

; Проверка ожидаемого окна
WinWait ($sTitle)
if WinExists ($sTitle, $sTextNew) Then
   WinActivate ($sTitle, $sTextNew)
   ControlClick ($sTitle, $sTextNew, "Button1")
   WinWait ($sTitle, $sTextSource)
   WinActivate ($sTitle, $sTextSource)
   ControlClick ($sTitle, $sTextSource, "Button1")
ElseIf WinExists ($sTitle, $sTextRenew) Then
   WinActivate ($sTitle, $sTextRenew)
   ControlClick ($sTitle, $sTextRenew, "Button1")
EndIf

; Ход установки программы
WinWait ($sTitle, $sTextServer)
WinActivate ($sTitle, $sTextServer)
ControlSend ($sTitle, $sTextServer, "RichEdit20W1", "172.189.4.12")

Скрипт автоматизирует установку программы.
Проблема в части, где идет проверка ожидаемого окна. Если программа уже была установлена на ПК, то открывается окно с именем $sTitle и текстом в окне $sTextNew, а если производится новая установка, то имя окна - $sTitle, текст в окне - $sTextRenew. Так вот, скрипт почему то не ждет появления окна и пропускает проверку, идет сразу к ожиданию окна $sTitle, $sTextServer
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
пробуй использовать дескриптор ожидаемого окна.
смотри справку по
Код:
WinWait

я делал автоматизацию управления программатором. не все идеально, но вобщем работает http://autoit-script.ru/index.php/topic,8921.msg59973.html#msg59973
использовал класс окна вместо заголовка
 
Автор
F

forbrock

Новичок
Сообщения
43
Репутация
0
Елки-палки, спасибо! А то уже голова кругом идет :stars:
Я думал как то сделать определение окна через класс, но не мог найти алгоритм записи, находил только title и text.

Код:
Opt("TrayIconDebug",1)

$sTitle = "Агент администрирования"
$sTextNew = "Добро пожаловать в мастер установки"
$sTextRenew = "Возобновление работы мастера установки"
$sTextSource = "Папка назначения"
$sTextServer = "Выбор Сервера администрирования."
$sTextProxi = "Конфигурация прокси-сервера"
$sTextSertifikat = "Сертификат Сервера администрирования"
$sTextAgent = "Запустить Агент администрирования"
$sTextInstall = "Программа готова к началу установки."
$sTextDone = "Программа установки завершена"

Run ("c:\temp\NetAgent\setup.exe") ; Запуск установки агента касперского

; Проверка ожидаемого окна
WinWait ("[class:MsiDialogCloseClass]")
WinActivate ("[class:MsiDialogCloseClass]")
if WinExists ($sTitle, $sTextNew) Then
   WinActivate ($sTitle, $sTextNew)
   ControlClick ($sTitle, $sTextNew, "Button1")
   WinWait ($sTitle, $sTextSource)
   WinActivate ($sTitle, $sTextSource)
   ControlClick ($sTitle, $sTextSource, "Button1")
ElseIf WinExists ($sTitle, $sTextRenew) Then
   WinActivate ($sTitle, $sTextRenew)
   ControlClick ($sTitle, $sTextRenew, "Button1")
EndIf

; Ход установки программы
WinWait ($sTitle, $sTextServer)
WinActivate ($sTitle, $sTextServer)
ControlSend ($sTitle, $sTextServer, "RichEdit20W1", "172.189.4.12")
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
а так:

Код:
Opt("TrayIconDebug", 1)

$sTitle = "Агент администрирования"
$sTextNew = "Добро пожаловать в мастер установки"
$sTextRenew = "Возобновление работы мастера установки"
$sTextSource = "Папка назначения"
$sTextServer = "Выбор Сервера администрирования."
$sTextProxi = "Конфигурация прокси-сервера"
$sTextSertifikat = "Сертификат Сервера администрирования"
$sTextAgent = "Запустить Агент администрирования"
$sTextInstall = "Программа готова к началу установки."
$sTextDone = "Программа установки завершена"

Run("c:\temp\NetAgent\setup.exe") ; Запуск установки агента касперского

; Ожидание окна
$hWnd = WinWait("[class:MsiDialogCloseClass]", "", 5) ; ждём окно 5 секунд и получаем дескриптор или 0
If $hWnd And WinActivate($hWnd) Then ; если дескриптор и удалось активировать, то
	If ControlClick($hWnd, "", "Button1") ; первый клик независимо от текста окна
		Sleep(30) ; даём время на перерисовку окна
		If WinExists ($hWnd, $sTextSource) Then ControlClick($hWnd, $sTextSource, "Button1")
	EndIf
EndIf

; Ход установки программы... (если окна нет то хода установки не должно быть)
WinWait($hWnd, $sTextServer)
WinActivate($hWnd, $sTextServer)
ControlSend($hWnd, $sTextServer, "RichEdit20W1", "172.189.4.12")


Использовать дескриптор более надёжно, если окно меняет только содержимое и не является новым окном.
 
Верх