Войти

Показать полную графическую версию : [решено] Рекурсия в компилированном скрипте


Cuba
17-04-2009, 18:10
Написал скрипт установки Alcohol 120 %
Скрипт работает если запустить из контекстного меню (Run script)
Компилирую его, запускаю и он начинает запускаться бесконечно.
Т.е. открывается копия этого же компилированного скрипта бесконечно, комп тормозить начинает, спасает перезагрузка компа.
Это что за прикол такой ?
Вот скрипт:
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.0.0
Author: JoKeR

Script Function:
Alcohol setup

#ce ----------------------------------------------------------------------------

Run("ALCOHOL - 120% 5.0 BLU-RAY.exe")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]","Alcohol 120% wurde auf Ihrem Computer installiert")
ControlClick("[CLASS:#32770]","","Button4")
ControlClick("[CLASS:#32770]","","Button5")
ControlClick("[CLASS:#32770]","","Button2")

Run("C:\Program Files\Alcohol Soft\Alcohol 120\Alcohol.exe")

WinWait("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")
ControlClick("[CLASS:TAboutDlg]","","TButton2")
Send("+a+d+e-+y798-O+c3+b-+f834-17+d0")

WinWait("[CLASS:TForm;TITLE:Регистрация]")
ControlClick("[CLASS:TForm]","","TButton1")

WinWait("[CLASS:#32770;TITLE:Регистрация]","Серийный номер принят")
ControlClick("[CLASS:#32770]","","Button1")

WinWait("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")
WinClose("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")

WinWait("[CLASS:TMainFrame;TITLE:Alcohol 120%]")
WinClose("[CLASS:TMainFrame;TITLE:Alcohol 120%]")

Creat0R
17-04-2009, 20:24
Компилирую его, запускаю и он начинает запускаться бесконечно »
А имя скрипта не «ALCOHOL - 120% 5.0 BLU-RAY.au3» случайно? ;) После компилляции он становится точно таким же как и запускаемый софт, вот и получается что он запускает сам себя.

Cuba
18-04-2009, 01:56
Нет конечно =)
Имя Alcohol.exe

Creat0R
18-04-2009, 02:09
Имя Alcohol.exe »
Ясно, ну тогда это очевидно, что Run() определяет первую часть (до пробела) как имя файла (в нашем случае это ALCOHOL, т.е имя скрипта), а остальное как параметры ком. строки, можно попробовать так решить проблему:

#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.0.0
Author: JoKeR

Script Function:
Alcohol setup

#ce ----------------------------------------------------------------------------

Run('"ALCOHOL - 120% 5.0 BLU-RAY.exe"')


.....

Тогда будет запускать как целое имя файла.

Хотя я бы не стал вовсе называть так свой скрипт, можно просто Installer_For_Alcohol.exe :)

Cuba
18-04-2009, 08:05
Спасибо.
Проблема решена.
Но есть ещё вопрос.
Всё устанавливается нормально, только возникает трудность в закрытии самого алкоголя после установки.
Между этими строками
WinWait("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")
WinClose("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")

WinWait("[CLASS:TMainFrame;TITLE:Alcohol 120%]")
WinClose("[CLASS:TMainFrame;TITLE:Alcohol 120%]")
нужно подождать некоторое количество времени, но время не думаю что у всех будет одинаковое, думаю зависит от процессора.
Как можно отловить когда уже можно закрывать окно, если в AutoIt Window Info ничего не изменяется, хотя сначала
http://s53.radikal.ru/i142/0904/45/23a0fb2c42c5.jpg
пустое, только через это неизвестное время появляется информация об устройствах.
Думаю вы меня поняли :lamer:

Creat0R
18-04-2009, 13:31
нужно подождать некоторое количество времени »
Подождать чего? Пока окно не закроется? Тогда WinWaitClose() :)

Cuba
18-04-2009, 17:16
http://s55.radikal.ru/i150/0904/eb/4f982dc883d2.jpg

Creat0R
18-04-2009, 22:52
Cuba, Ну тогда нужно отслеживать закрытие этого Popup-окна, что Au3 Info Tool показывает на нём, есть класс/заголовок у него?

amel27
19-04-2009, 14:04
Cuba, под рукой оказалась только v.1.4.8 (Build 1222), получилось где-то так:
; Ожидение появления окна обновления устройств
Do
Sleep(100)
Until ControlCommand("[CLASS:TForm]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")

; Ожидение закрытия окна обновления устройств
While ControlCommand("[CLASS:TForm]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")
Sleep(100)
WEnd

Cuba
19-04-2009, 18:02
amel27, ждёт...
Но потом не закрывается.
наверно не видит, что то окошко закрылось.
WinWait("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")
WinClose("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")

Do
Sleep(100)
Until ControlCommand("[CLASS:TForm]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")

While ControlCommand("[CLASS:TForm]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")
Sleep(100)
WEnd

WinWait("[CLASS:TMainFrame;TITLE:Alcohol 120%]","Готов")
WinClose("[CLASS:TMainFrame;TITLE:Alcohol 120%]")
Creat0R, ничё не показывает.
Никак не могу отловить его...
И класс и заголовок как у главного окна и текст не показывает.

amel27
20-04-2009, 08:27
наверно не видит, что то окошко закрылось »
по ходу там класс окна сменился в новых версиях:; Ожидение появления окна обновления устройств
Do
Until ControlCommand("[CLASS:TWaitForSomethingDialog]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")
; Ожидение закрытия окна обновления устройств
While ControlCommand("[CLASS:TWaitForSomethingDialog]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")
Sleep(100)
WEnd
на всякий случай отладочный вариант:
$WinTitle="[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]"

WinWait($WinTitle)
ConsoleWrite('Window activated: "'& $WinTitle &'"' &@CRLF)
WinClose($WinTitle)
ConsoleWrite('Window closed: "'& $WinTitle &'"' &@CRLF)

$WinTitle="[CLASS:TWaitForSomethingDialog]"
$WinCntrl="[CLASS:TPanel; INSTANCE:1]"
; Ожидение появления окна обновления устройств
Do
$IsVisible = ControlCommand($WinTitle, "", $WinCntrl, "IsVisible")
ConsoleWrite('Window control visible:'& $IsVisible &@CRLF)
Until $IsVisible
; Ожидение закрытия окна обновления устройств
While $IsVisible
Sleep(50)
$IsVisible = ControlCommand($WinTitle, "", $WinCntrl, "IsVisible")
ConsoleWrite('Window control visible:'& $IsVisible &@CRLF)
WEnd

$WinTitle="[CLASS:TMainFrame;TITLE:Alcohol 120%]"
$WinText ="Готов"

WinWait($WinTitle,$WinText)
ConsoleWrite('Window activated: "'& $WinTitle &'"' &@CRLF)
WinClose($WinTitle)
ConsoleWrite('Window closed: "'& $WinTitle &'"' &@CRLF)

Никак не могу отловить его...окошко вызывается по Shift+F5 ;)

Cuba
20-04-2009, 13:43
О, супер, теперь всё работает как нужно =)
Спасибо большое, amel27 и Creat0R, за помощь.
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.0.0
Author: JoKeR

Script Function:
Alcohol setup

#ce ----------------------------------------------------------------------------

Run("ALCOHOL - 120% 5.0 BLU-RAY.exe")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]")
ControlClick("[CLASS:#32770]","","Button2")

WinWait("[CLASS:#32770;TITLE:Alcohol 120% Version 5.0]","Alcohol 120% wurde auf Ihrem Computer installiert")
ControlClick("[CLASS:#32770]","","Button4")
ControlClick("[CLASS:#32770]","","Button5")
ControlClick("[CLASS:#32770]","","Button2")

Run("C:\Program Files\Alcohol Soft\Alcohol 120\Alcohol.exe")

WinWait("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")
ControlClick("[CLASS:TAboutDlg]","","TButton2")
Send("+a+d+e-+y798-O+c3+b-+f834-17+d0")

WinWait("[CLASS:TForm;TITLE:Регистрация]")
ControlClick("[CLASS:TForm]","","TButton1")

WinWait("[CLASS:#32770;TITLE:Регистрация]","Серийный номер принят")
ControlClick("[CLASS:#32770]","","Button1")

WinWait("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")
WinClose("[CLASS:TAboutDlg;TITLE:О программе - Alcohol 120%]")

Do
Until ControlCommand("[CLASS:TWaitForSomethingDialog]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")

While ControlCommand("[CLASS:TWaitForSomethingDialog]", "", "[CLASS:TPanel; INSTANCE:1]", "IsVisible")
Sleep(100)
WEnd

WinWait("[CLASS:TMainFrame;TITLE:Alcohol 120%]","Готов")
WinClose("[CLASS:TMainFrame;TITLE:Alcohol 120%]")
И вопрос на засыпку))
Можно с помощью AutoIt скрыть окна установки, чтобы было типа тихой установки ?
За пример можно данный скрипт взять.

Creat0R
20-04-2009, 15:45
Тематика тут начинает “уезжать” в неверном направлении, проблема была в рекурсивном запуске скрипта (и она вроде решена), а не в установке Alcohol.

Cuba
21-04-2009, 08:00
Тем не менее...
Желаю получить ответ на поставленный выше ответ.
Не создавать же отдельную тему если и тут можно разобраться.

Creat0R
21-04-2009, 11:11
Можно с помощью AutoIt скрыть окна установки, чтобы было типа тихой установки ? »
Скрыть можно, но не всегда будут реагировать на нажатие кнопок и т.п.
И подобный вопрос уже обсуждался.

Не создавать же отдельную тему если и тут можно разобраться »
Для этого и был отведён отдельный форум по AutoIt, чтобы не скапливать всё в кучу в одной теме.

Cuba
21-04-2009, 22:09
Понял, не дурак ;)




© OSzone.net 2001-2012