Показать полную графическую версию : [решено] Рекурсия в компилированном скрипте
Написал скрипт установки 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%]")
Компилирую его, запускаю и он начинает запускаться бесконечно »
А имя скрипта не «ALCOHOL - 120% 5.0 BLU-RAY.au3» случайно? ;) После компилляции он становится точно таким же как и запускаемый софт, вот и получается что он запускает сам себя.
Нет конечно =)
Имя Alcohol.exe
Имя 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 :)
Спасибо.
Проблема решена.
Но есть ещё вопрос.
Всё устанавливается нормально, только возникает трудность в закрытии самого алкоголя после установки.
Между этими строками
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:
нужно подождать некоторое количество времени »
Подождать чего? Пока окно не закроется? Тогда WinWaitClose() :)
http://s55.radikal.ru/i150/0904/eb/4f982dc883d2.jpg
Cuba, Ну тогда нужно отслеживать закрытие этого Popup-окна, что Au3 Info Tool показывает на нём, есть класс/заголовок у него?
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
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, ничё не показывает.
Никак не могу отловить его...
И класс и заголовок как у главного окна и текст не показывает.
наверно не видит, что то окошко закрылось »
по ходу там класс окна сменился в новых версиях:; Ожидение появления окна обновления устройств
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 ;)
О, супер, теперь всё работает как нужно =)
Спасибо большое, 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 скрыть окна установки, чтобы было типа тихой установки ?
За пример можно данный скрипт взять.
Тематика тут начинает “уезжать” в неверном направлении, проблема была в рекурсивном запуске скрипта (и она вроде решена), а не в установке Alcohol.
Тем не менее...
Желаю получить ответ на поставленный выше ответ.
Не создавать же отдельную тему если и тут можно разобраться.
Можно с помощью AutoIt скрыть окна установки, чтобы было типа тихой установки ? »
Скрыть можно, но не всегда будут реагировать на нажатие кнопок и т.п.
И подобный вопрос уже обсуждался.
Не создавать же отдельную тему если и тут можно разобраться »
Для этого и был отведён отдельный форум по AutoIt, чтобы не скапливать всё в кучу в одной теме.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.