PDA

Показать полную графическую версию : [Архив - Часть 1.1] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17

EgOrus
26-09-2005, 18:20
biork
Правильно в примере, кот. предложил я, если ни одно из условий неверно, то продолжаем работу скрипта дальше. В твоем же как ты правильно сказал, если первое условие неправильно, то в любом случае ждем активное окно ("Заголовок окна", "текст2"), если оно по каким-то причинам не появляется, то придется прерывать скрипт вручную.
Приведи полный пример своего скрипта.

biork
28-09-2005, 01:01
Вот весь скрипт с изменениями, как ты и рекомендовал в своём примере.
Часть, которая не хочет работать выделена курсивом

Opt("TrayIconDebug",1)
Run("3dmark03_v360_setup.exe")
WinWaitActive("3DMark03 - InstallShield Wizard", "Welcome to the InstallShield Wizard")
ControlClick("3DMark03 - InstallShield Wizard", "Welcome to the InstallShield Wizard", "Button1")
WinWaitActive("3DMark03 - InstallShield Wizard", "License Agreement")
ControlClick("3DMark03 - InstallShield Wizard", "License Agreement", "Button5")
ControlClick("3DMark03 - InstallShield Wizard", "License Agreement", "Button2")
WinWaitActive("3DMark03 - InstallShield Wizard", "Destination Folder")
ControlClick("3DMark03 - InstallShield Wizard", "Destination Folder", "Button1")
WinWaitActive("3DMark03 - InstallShield Wizard", "Click Install to begin")
ControlClick("3DMark03 - InstallShield Wizard", "Click Install to begin", "Button1")
;здесь может появиться окно ввода серийного номера, если программа ставится впервые
IF WinExists ("3DMark03 - InstallShield Wizard", "Futuremark Registration") then
WinActivate("3DMark03 - InstallShield Wizard", "Futuremark Registration")
ControlSetText("3DMark03 - InstallShield Wizard", "Futuremark Registration", "Edit1", "18P2M-MY24M-39UK6-QAX2N")
Sleep (1000)
ControlClick("3DMark03 - InstallShield Wizard", "Futuremark Registration", "Button2")
WinWaitActive("Congratulations!", "")
ControlClick("Congratulations!", "", "Button1")
WinWaitActive("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button1", "UnCheck", "")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button2", "UnCheck", "")
ControlClick("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button4")
ElseIf WinExists ("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete") then
WinActivate("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button1", "UnCheck", "")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button2", "UnCheck", "")
ControlClick("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button4")
EndIf
Exit

Насчёт логики. Дело то в том, что он почему то это первое окно не видит, хотя оно есть, ждёт и свиду вполне активно :). По мне, так условие выполнено, а вот с точки зрения AutoIt - почему то - нет :(
И что толку от продолжения работы скрипта, если дальнейшие действия связаны с кликаньями по окнам которые не появятся, пока не уйдёт текущее?

Я понимаю, что проблема выеденного яйца не стоит - можно сделать тихую инсталяшку или ввести серийный номер перед запуском установки с помощью рег-файла и исключить появление этого окна - дело в другом - хочу выяснить можно ли вообще бороться таким образом с "иногда появляющимися" окнами. У меня уже не первый случай когда нужно использовать функцию условного выполнения и всегда с этим проблемы. Что-то я тут не вкуриваю...

EgOrus
28-09-2005, 09:59
biork
Чтобы понять почему не работает пришлось поставить 3DMark2001, ставится он почти также как 2003, так вот дело в том что, твое условие If WinExists проверяется на стадии копирования файлов и декомпрессии текстур, естественно такого окна нет, и переходим к следующему условию ElseIf WinExists такого окна тоже нет и завершаем скрипт.
Нужно добавить перед проверкой условий, ожидание завершения процесса копирования, чтобы в момент проверки условий либо то либо то окно успело появиться, сделать можно по разному например вот так:ControlClick("InstallShield Wizard", "Start Copying Files", "Button1")
;здесь может появиться окно ввода серийного номера, если программа ставится впервые
WinWait("Texture Conversion", "Setup Status")
WinWaitClose("Texture Conversion", "Setup Status" , 180)
sleep (1000)
IF WinExists ("InstallShield Wizard", "MadOnion.com Registration") then
WinActivate("InstallShield Wizard", "MadOnion.com Registration")

skylego
28-09-2005, 17:01
Вот скрипт для Windows XP Manader

;Видим скрытый текст
Opt("WinTitleMatchMode",2)
Opt("WinDetectHiddenText",1)
;Уберем все с окна
WinMinimizeAll()
Sleep(1000)

$SF_1 = @ScriptDir & "\xpmanager.exe"

$SF_2 = StringLeft(@ProgramFilesDir,2) & '\PROGRA~1\YANICS~1\WinXPM~1\WinXPM~1.exe'

Run(@ComSpec & " /c " & "start " & $SF_1 , "", @SW_HIDE)

$Title_1 = "WinXP Manager Setup"
$Title_2 = "WinXP Manager"

WinWaitActive($Title_1)
sleep(1000)
SEND("{ENTER}")

WinWaitActive($Title_2,'The installer will guide you through the steps required to install WinXP Manager on your computer.')
sleep(1000)
SEND("{ENTER}")

WinWaitActive($Title_2,'Select Installation Folder')
sleep(1000)
controlclick('','','Button5')
SEND("{ENTER}")

WinWaitActive($Title_2,'Confirm Installation')
sleep(1000)
SEND("{ENTER}")

WinWaitActive($Title_2,'Installation Complete')
sleep(1000)
SEND("{ENTER}")


Run( @ComSpec & " /c " & "start " & $SF_2 , "", @SW_HIDE)
sleep(1000)

WinActivate("WinXP Manager V4.92.3")

;WinWaitActive('WinXP Manager V4.92.3','UnRegistered...')
WinWaitActive('WinXP Manager V4.92.3','Try It')
sleep(1000)
controlclick('WinXP Manager V4.92.3','','WindowsForms10.BUTTON.app31')

WinWaitActive('Purchase and Register WinXP Manager V4.92.3')
sleep(1000)
ControlSetText( "" , "", 'WindowsForms10.EDIT.app35','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app34','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app33','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app32','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app31','XXXX')
controlclick('','','WindowsForms10.BUTTON.app32')

WinWaitActive('Finis','Please restart this software')
sleep(1000)
SEND("{ENTER}")

EXIT

biork
29-09-2005, 01:18
EgOrus
Ну ты монстр! :)
Всё заработало как часики. Оживил несколько заброшенных по подобной причине скриптов. Большущее тебе спасибо!
Вопрос на засыпку: зачем таймаут 3 минуты? А вдруг, диск плохо читается или комп 386-ой... я бы убрал этот параметр - пусть ждёт сколько ему надо.

EgOrus
29-09-2005, 09:26
biork
по поводу 3х минут, вопрос спорный, теоретически это на тот как раз случай если диск нечитается вообще, на разных приводах может быть по разному, где-то начинает читать до посинения бывает и по 10-20 минут и все равно потом сбоит, бывает ошибку выдает, в любом случае скрипт встанет (скорей всего появится окно инстоляра об ошибке установки) и нужно будет вмешиваться. А так он на автомате через 3 минуты пойдет дальше. Вместо 3х можно побольше конечно поставить.

Sanja Alone
30-09-2005, 04:47
Добавил скрипты:
Ad-Aware SE Personal 1.06r1 (http://sanjaalone.h15.ru/files/autoit-aaw.zip)
ListTV 3.8.6.1 (http://sanjaalone.h15.ru/files/autoit-listtv.zip)
MuxaSoft Dialer 4.1 (http://sanjaalone.h15.ru/files/autoit-mdialer.zip)
O&O Defrag v8.0 (http://sanjaalone.h15.ru/files/autoit-oodefrag.zip)
RivaTuner v2.0 RC 15.x (http://sanjaalone.h15.ru/files/autoit-rt.zip)

Eralex
30-09-2005, 22:48
Кто-нибудь помогите заавтоитить Outpost 3.0
Раньше (v. 2.0-2.7) скрипт прекрасно отрабатывался в том месте,
где идёт сбор об установленных программах и создаются для них правило.
Скрипт корректно дожидался, пока кнопка "Далее" не станет доступной
для нажатия. Вот это место

WinWaitActive("Мастер конфигурации")
$e = ControlCommand("Мастер конфигурации", "Мастер конфигурации производит настройку Outpost Firewall Pro", "Button4", "IsEnabled", "")
While $e=0
$e= ControlCommand("Мастер конфигурации", "Мастер конфигурации производит настройку Outpost Firewall Pro", "Button4", "IsEnabled", "")
WEnd
Send("{ENTER}")

Но почему-то в версии 3.0 этот трюк не срабатывает. Сразу появляется окошко о конце установки,
т.е. получается, что недоступная копка каким-то образом нажалась.

Sanja Alone
01-10-2005, 02:17
Eralex
3.0 попробовать не довелось, но в 2.7 нормально работает такая конструкция:
...
WinWaitActive ( 'Мастер конфигурации' )
While ControlCommand ( 'Мастер конфигурации', '', 'Button6', 'IsEnabled', '')=0
Sleep ( 1000 )
WEnd
;Далее
ControlClick( 'Мастер конфигурации', '', 'Button6' )
...

Eralex
01-10-2005, 22:42
3.0 попробовать не довелось, но в 2.7 нормально работает такая конструкция:

Код:

...
WinWaitActive ( 'Мастер конфигурации' )
While ControlCommand ( 'Мастер конфигурации', '', 'Button6', 'IsEnabled', '')=0
Sleep ( 1000 )
WEnd
;Далее
ControlClick( 'Мастер конфигурации', '', 'Button6' )
...

Не помогло!!!

biork
07-10-2005, 02:03
Вот маленький скриптик. Работает.
Opt("TrayIconDebug",1)
if FileExists("C:\Windows\System32\drivers\ati2mtag.sys") Then
RunWait("Cpanel\Setup.exe /S")
Else
EndIf
Exit

а так - нет. Почему?
Opt("TrayIconDebug",1)
if FileExists("@SystemDir\drivers\ati2mtag.sys") Then
RunWait("Setup.exe /S", "@ScriptDir\Cpanel")
Else
EndIf
Exit

bogomolv
07-10-2005, 08:25
biork
Патаму чта синтаксис :)
Opt('ExpandEnvStrings', 1); default = 0
Opt('ExpandVarStrings', 1); default = 0
if FileExists("@SystemDir@\drivers\ati2mtag.sys") Then
RunWait("Setup.exe /S", "@ScriptDir@\Cpanel")
Else
EndIf
Exit
И будь осторожен с RunWait ( "filename" [, "workingdir" [, flag]] ).
Чтобы задать рабочий каталог, лучше использовать FileChangeDir ( "path" )
FileChangeDir("@ScriptDir@\Cpanel")
RunWait("Setup.exe /S")

All
Новый DrWeb433.
Установщик остался прежним. И также по-прежнему блокирует silent-установку. :(
Зато установщик разукрасили всеми цветами радуги. В результате, он перестал "понимать" ControlClick(...), ControlCommand(...,'Check') и т.д.!
Теперь приходится накручивать ControlSend('Внимание!!!',,'Button4','{+}{Enter}').

DenchikK
07-10-2005, 20:59
А у меня во в новом инсталяторе DrWeb 2 раза заедало:
1. В месте "Выберите вид установки" (причём иногда только).
2. В месте "Настройки прокси сервера" - при их отсутствии. Нажатие на кнопку отмены мышкой, приводит к продолжени. установки DrWeb, нажатие на неё AutoIT'ом приводит к завершению инсталяции.
И там и там вывернулся использованием эмуляции нажатия мышки.

Ещё в догонку такая придумка. В установке Dr.Divx, вернее при работе keygen, надо вызывать из каталога с установленной программы регистрационный файл. А вдруг у пользователя прога стоит не на диске C и даже не в Program Files? Как это узнать? И вот что я придумал (главное - работает!).
Вкратце так: берём из реестра информацию об установленной программе, и вот мы уже имеем всегда правильный путь. В Dr.Divx чуть сложнее - пути как такого нет, есть путь вместе с .exe файлом. Этот самый .exe файл то мы и отрезаем (функция отрезать строку с конца).
Так что можно сделать инсталяторы чуточку более универсальными.

biork
08-10-2005, 05:21
bogomolv
Мдя... Не очевидно (в справке, в описаниях макро об этом - ни слова...), но факт!
А зачем символ @ в конце каждого макро? Опять "синтаксис патаму чта"?
И почему осторожней с RunWait? Может надёжнее сам скрипт в нужную папку засунуть и вообще не указывать рабочий каталог?

VelDmi
14-10-2005, 07:51
Есть прекрасные макро @ComputerName и @IPAddress1 чтобы узнать имя компьютера и его адрес.
А как можно изменить их? Мне нужно задать их не ползая по вкладкам свойств.

Sanja Alone
25-10-2005, 05:09
bogomolv
Новый DrWeb433Не качал - не скажу.
Установщик остался прежним. И также по-прежнему блокирует silent-установку
Как это блокирует? Вот у меня на автоустановочном диске лежит файлик drweb-432b-win-ru.exe. Ставится этим (http://sanjaalone.h15.ru/files/autoit-drweb.zip) скриптом без всяких блокировок... Ес-но, для silent-установки нужно предварительно получить еще и файлик setup.iss (см. в том же архиве) установив один раз прогу командой drweb-432b-win-ru.exe -R.

VelDmi
Мне нужно задать их не ползая по вкладкам свойств.Тогда придется поползать по реестру :)

CTEPBA
25-10-2005, 23:43
Люди подскажите как мне с помощью AuotIt поставить Dr.Web 4.33 ( не ставиться командой setup.exe /s) только если по шагово.

EgOrus
26-10-2005, 00:45
2Sanja Alone
Скачал у тебя скрипт на установку FoxitReader, к сожалению к новой версии он не подошел, посмотрев скрипт не понял зачем нужны условия на проверку Активности каждого окна? Практически во всех скриптовых языках условия несколько тормозят выполнение кода, легче сразу активировать окно без проверки его активности.
WinWait($Title,"Вас приветствует Мас")
If Not WinActive($Title,"Вас приветствует Мас") Then WinActivate($Title,"Вас приветствует Мас")
WinWaitActive($Title,"Вас приветствует Мас")
Send("{ENTER}")
;Установщик FoxitReader v1.3.909.exe
#cs
----------------------
$Title - заголовок окна установки
$file - установочный файл
$programgroup - в какую программную группу положить ярлыки программы
$rusfile - русифицированный исполнимы файл программы
----------------------
#ce
Global $Title='Foxit Reader Install Wizard', $file='foxitreader.1_3_909.exe', $rusfile='rus\Foxit Reader.exe';, $programgroup='Офис\Foxit PDF Reader'
Run($file)
WinWait($Title,"Setup will install")
WinActivate($Title,"Setup will install")
Send("{ENTER}")
WinWait($Title,"Please read the license")
WinActivate($Title,"Please read the license")
Send("{ENTER}")
WinWait($Title,"Please select an installation type")
WinActivate($Title,"Please select an installation type")
ControlClick ($Title, '', 'Button2' )
WinWait($Title,"Please Choose the folder")
WinActivate($Title,"Please Choose the folder")
ControlSetText($Title, "", 'Edit1', @ProgramFilesDir & '\Foxit Reader\' )
Send("{ENTER}")
WinWait($Title,"Desktop Settings")
WinActivate($Title,"Desktop Settings")
ControlClick ($Title, '', 'Button3')
ControlClick ($Title, '', 'Button7')
Send("{ENTER}")
WinWait($Title,"Click Install to continue")
WinActivate($Title,"Click Install to continue")
Send("{ENTER}")
WinWait($Title,"Setup has successfully")
WinActivate($Title,"Setup has successfully")
ControlClick ($Title, '', 'Button2')
Send("{ENTER}")

;если есть FoxitRus, то заменяем им оригинальный англ. исполнительный файл
If FileExists ( $rusfile ) Then
FileCopy ( @ScriptDir & '\' & $rusfile, @ProgramFilesDir & '\Foxit Reader\', 1 )
EndIf

biork
26-10-2005, 01:56
Всем привет. Вопрос на засыпку. Нужон такой скрипт:

- проверяем является ли диск D: разделом жёсткого диска (существует ли вообще и не является ли сменным или сетевым)
- если да, то копируем на него файл
- если нет, то - нет.

Есть идеи?

Sanja Alone
26-10-2005, 02:20
Добавил скрипты:
ICE ECC 2.1 (http://sanjaalone.h15.ru/files/autoit-iceecc.zip)
Sateira CD&DVD Burner 2.xx (http://sanjaalone.h15.ru/files/autoit-scdb.zip)
WinImage 8.0 (и 7.0) (http://sanjaalone.h15.ru/files/autoit-winimage.zip)


EgOrus
зачем нужны условия на проверку Активности каждого окна1. Я мог бы придумать умный ответ, но скажу прямо - эти условия являются результатом использования ScriptWriter-а, входящего в состав редактора SciTE. Но ты конечно прав, условия спокойно можно убрать (оставив в соотв. стороках только функцию WinActivate).
2. Ты используешь странное сочетание функций при ожидании окон:
WinWait("Окно","Текст")
WinWaitActive("Окно","Текст")Функция WinWait здесь лишняя, т.к. для нажатия ENTER-а функцией Send окно должно быть активным. Я же всегда юзаю вот такую связку:
WinWait("Окно","Текст")
WinActivate("Окно","Текст")
WinWaitActive("Окно","Текст")(здесь можно опустить WinWaitActive, т.к. активация проходит очень быстро и эта функция является всего лишь дополнительным гарантом). А можно вообще использовать одну функцию WinWaitActive("Окно","Текст"), если есть уверенность, что окно при любом раскладе будет активировано.


CTEPBA
Скрипт для DrWeb 4.32b (http://sanjaalone.h15.ru/files/autoit-drweb.zip) - попробуй, может и для 4.33 подойдет.


biork
Есть идеи?Всего одна строка:
If DriveGetType ('d:\')='Fixed' Then FileCopy ( 'Откуда\файл', 'd:\' )




© OSzone.net 2001-2012