Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Рекурсия в компилированном скрипте (http://forum.oszone.net/showthread.php?t=137988)

Cuba 17-04-2009 18:10 1096930

Рекурсия в компилированном скрипте
 
Написал скрипт установки Alcohol 120 %
Скрипт работает если запустить из контекстного меню (Run script)
Компилирую его, запускаю и он начинает запускаться бесконечно.
Т.е. открывается копия этого же компилированного скрипта бесконечно, комп тормозить начинает, спасает перезагрузка компа.
Это что за прикол такой ?
Вот скрипт:
PHP код:

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

 
AutoIt Version3.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 1097045

Цитата:

Цитата Cuba
Компилирую его, запускаю и он начинает запускаться бесконечно »

А имя скрипта не «ALCOHOL - 120% 5.0 BLU-RAY.au3» случайно? ;) После компилляции он становится точно таким же как и запускаемый софт, вот и получается что он запускает сам себя.

Cuba 18-04-2009 01:56 1097249

Нет конечно =)
Имя Alcohol.exe

Creat0R 18-04-2009 02:09 1097250

Цитата:

Цитата Cuba
Имя 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 1097290

Спасибо.
Проблема решена.
Но есть ещё вопрос.
Всё устанавливается нормально, только возникает трудность в закрытии самого алкоголя после установки.
Между этими строками
PHP код:

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 ничего не изменяется, хотя сначала

пустое, только через это неизвестное время появляется информация об устройствах.
Думаю вы меня поняли :lamer:

Creat0R 18-04-2009 13:31 1097466

Цитата:

Цитата Cuba
нужно подождать некоторое количество времени »

Подождать чего? Пока окно не закроется? Тогда WinWaitClose() :)

Cuba 18-04-2009 17:16 1097603


Creat0R 18-04-2009 22:52 1097824

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

amel27 19-04-2009 14:04 1098158

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 1098294

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 1098697

Цитата:

Цитата Cuba
наверно не видит, что то окошко закрылось »

по ходу там класс окна сменился в новых версиях:
Код:

; Ожидение появления окна обновления устройств
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)

Цитата:

Цитата Cuba
Никак не могу отловить его...

окошко вызывается по Shift+F5 ;)

Cuba 20-04-2009 13:43 1098956

О, супер, теперь всё работает как нужно =)
Спасибо большое, amel27 и Creat0R, за помощь.
PHP код:

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

 
AutoIt Version3.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 1099053

Тематика тут начинает “уезжать” в неверном направлении, проблема была в рекурсивном запуске скрипта (и она вроде решена), а не в установке Alcohol.

Cuba 21-04-2009 08:00 1099656

Тем не менее...
Желаю получить ответ на поставленный выше ответ.
Не создавать же отдельную тему если и тут можно разобраться.

Creat0R 21-04-2009 11:11 1099779

Цитата:

Цитата Cuba
Можно с помощью AutoIt скрыть окна установки, чтобы было типа тихой установки ? »

Скрыть можно, но не всегда будут реагировать на нажатие кнопок и т.п.
И подобный вопрос уже обсуждался.

Цитата:

Цитата Cuba
Не создавать же отдельную тему если и тут можно разобраться »

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

Cuba 21-04-2009 22:09 1100401

Понял, не дурак ;)


Время: 03:49.

Время: 03:49.
© OSzone.net 2001-