PDA

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


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

Sanja Alone
30-07-2005, 04:07
bogomolv
С интересом познакомился с использованием функции StringSplit()Мне приятно, что мои 5 месяцев зканомства с AutoIt не прошли уж совсем зря...

пару десятков строк можно сэкономитьУгу, но я ведь делал установку НЕ с параметрами по умолчанию.

в одном случае из 10 введенный серийник оказывается невернымНи разу такого не было - FR7 за все время раз 20 ставил, а SoundForge6 (там вообще привязка ключа к аппаратной конфигурации) уже раз 40-50 (причем, с BatchConverter-ом и регистрацией MPEG1/2-плагина). Наверное, хорошие кейгены попадались :)

для настройки установленного FineRеaderЕсли не затруднит - пришли мне на мыло FineRеader.reg и Untitled.fbt и расшифруй смысл переменных $iDir и $pDir (у меня своего сканера нет, а последний FR, к-рый я юзал, был еще версии 4.х). Это не для себя делалось...

зачем обнулять переменные на выходе из скрипта?Обнуляются для освобождения памяти, хотя при нынешних объемах ОЗУ в типичных ПК это и не актуально... И изначально это был не выход - там еще путь в Path добавлялся :)

Отлаженный скрипт может быть неожиданно прерван на чужой машине выскочившим окошком какого-либо сообщения Windows об отсутствующих дровах и т.п. Что делать в этом случае?Ctrl+Alt+Del, открывается TaskManager и блокировка при этом снимается - не знал?

всегда включаю Opt('TrayIconDebug',1), чтобы можно было понять, чего ждет "зависший" скрипт.Может я так и сделаю, просто не люблю я лишних иконок в трее :) И для многократно проверенных скриптов это излишество.

bogomolv
30-07-2005, 16:24
Sanja Alone

Про установку не "по умолчанию".
А что не "по умолчанию" ты устанавливаешь? Как правило, все можно потом задействовать/отключить через реестр.
Например, новостной канал отключается удалением ключа "FineReader7NewsReaderPro" в ветке HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run.

Про FineRеader.reg и Untitled.fbt.
Эти файлы воспроизводят личные пользовательские настройки.
Настриваешь FR, сохраняешь через меню "Опции" в Untitled.fbt, копируешь.
Незапоминаемые Untitled.fbt настройки интерфейса находим в реестре (ветка HKCU\Software\ABBYY\FineReader\7.00) и сохраняем в FineRеader.reg.
Есть ли нужда пересылать их? Там все из разряда "мне так нравится".

Про переменные $iDir и $pDir.
Это имена папок "откуда и куда" идет установка. А ты что подумал?

Про серийник.
Иногда и 30 раз проходит с первого раза. А иногда через раз начинает ругаться, что неверный.
М.б. это проблема конкретной версии...

Про Ctrl+Alt+Del и BlockInput(0).
Я знаю. Знаю и то, что не надо трогать мышь и клавиатуру во время работы скрипта. Так от кого эта защита?
А вот людей, которые потом будут этим пользоваться, вряд ли стоит пугать зависшим компьютером.

Sanja Alone
31-07-2005, 02:46
bogomolv
Про не "по ум." - англ. язык интерфейса, я это написал в комментариях к скрипту. И я не думаю, что тут поможет реестр, т.к. отсутствующий компонент посредством реестра не включится :)

Есть ли нужда пересылать их? Там все из разряда "мне так нравится".Мне было бы интересно посмотреть пример, я же сказал, что последним активно используемым FR-ом для меня был еще 4.х.

Про переменные $iDir и $pDir - я понял что это, но не понял два момента:
- можно ведь просто написать FileCopy('Untitled.fbt', $pDir, 1), или у тебя скрипты лежат в каком-то отдельном каталоге?
- куда пихать тот самый Untitled.fbt. Это ведь может быть не только каталог проги, но и что-нить типа Doc&Set\Имя_юзера\AppData\Abbyyy_блаблабла или ты и это станешь оспаривать?

А вот людей, которые потом будут этим пользоваться, вряд ли стоит пугать зависшим компьютером.Есть 2 больших категории юзеров - первые вообще боятся нажать случайно какую-нибудь кнопку (эти устанавливать проги сами не будут), а остальные знают про "комбинацию из трех пальцев".

Так от кого эта защита?От тех, кто любит трогать :)

bogomolv
31-07-2005, 12:57
Sanja Alone

Про установку не "по умолчанию".
Такие вещи, на мой вгляд, лучше задавать непсредственно в установщике, либо отредактировав msi-файл, либо создав для него mst-файл дополнительных настроек установки.
Использую для этого Orca (MSI Table Editor). С его помощью записал то, что тебе нужно, в full.mst (запускается FineReader.msi /qb TRANSFORMS=full.mst).
Вышлю вместе с другими файлами, когда ответишь по мылу.

Про пути.
$pDir=@ProgramFilesDir&'\ABBYY FineReader 7.0 Professional Edition\'
$iDir=@ScriptDir&'\'. Но это сейчас, когда пакую все файлы дистрибутива и настроек в SFX RAR архив. Раньше было по-другому.

Про 2 больших категории юзеров.
Так к какой категории относятся те, кто любит трогать?:)

DenchikK
02-08-2005, 05:11
Наверное всё-таки напишу в эту тему, так как в теме об установке WinAmp обсуждается немного не то.

О наболевшем. Об установке WinAmp. Хочется сделать её универсальной - в том смысле, чтоб скрипт AutoIT срабатывал всегда, а не только в случае установки на чистую (или не чистую) систему. Загвоздка в том, что WinAmp при установке, в зависимости от системы, задаёт РАЗНЫЕ вопросы - и естественно скрипт может не сработать. Первая вещь, на которой иногда спотыкается установка - это вопрос о регистрации. Победилась просто - перед установкой reg файлом вносятся необходимые регистрационные данные. Но есть второй подводный камень - на чистой системе задаётся вопрос о перезапуске, на системе, в которой уже стоял WinAmp - этот вопрос не задётся. Как бы сделать обход этого - например оператором IF, чтоб скрипт, если не появилось окно с вопросом о регистрации, дальше продолжал свою работу, а если появится - отмнил бы перезагрузку ну и проч. по плану?

И ещё один вопрос, правда не очень в тему: на второй странице Sanja Alone сказал, что образы от Virtual CD монтируются Алкоголем. Я сам уже давно на Алкоголь перешёл, но есть куча образов от VCD. Обрадовался - попробовал - не вышло - Алкоголь правильно распознаёт размер, но не может считать информацию. Образы от VCD 4.5, Алкоголь: 3 последних.

Sanja Alone
03-08-2005, 02:51
DenchikK
Как бы сделать обход этого - например оператором IF
А какие проблемы?
If WinExists ( 'Имя', 'Текст' ) Then
;код, выполняемый если окно появилось
Else
;код, выполняемый если окна не было
EndIf(Тоже самое можно сделать и с пом. Select...Case...EndSelect)


По поводу регистрации - раз уж установка делается скриптом, то пусть и регистрация делается им же (и без "лишнего" reg-файла):
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regname", "REG_SZ", "xxxxxxxxxxxxx")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regkey", "REG_SZ", "xxxxxxxxxxxxxxxxxxxxxxxx")
Sanja Alone сказал, что образы от Virtual CD монтируются Алкоголем
Алкоголь у меня тогда был 1.4.8.1222, а более новые версии ведут себя так, как ты и описал. Выход есть - переконвертировать *.vcd/*.000-образы с пом. UltraISO во что-нибудь стандартное (например, iso). Но и здесь возможны проблемы. С былых времен у меня осталось только 3 образа VCD - два монтируются (но не дают считать содержимое) новым Алкоголем, при этом они не загружаются в UltraISO, но без лишних вопросов конвертируются последним в нормально читаемые iso. А третий образ vcd/000 вообще ничем кроме родного VirtualCD не монтируется и не конвертируется. Такие вот дела...

DenchikK
04-08-2005, 02:22
Никак не могу всё-таки справиться с winamp : установка происходит нормально, только не в первый раз. Вот привожу пример того, что наваял:

Run('setup.exe')

RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regname", "REG_SZ", "***")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regkey", "REG_SZ", "***")

WinWaitActive ('Winamp Setup','License Agreement')
ControlClick ('Winamp Setup','License Agreement','I &Agree')

WinWaitActive ('Winamp Setup','Choose Components')
ControlSend ('Winamp Setup','Choose Components','SysTreeView321','{End}{Up 2}{Space}{UP 5}{Space}{Enter}')

WinWaitActive ('Winamp Setup','Choose Install Location')
ControlClick ('Winamp Setup','Choose Install Location','&Next >')

WinWaitActive ('Winamp Setup','Choose Install Options')
ControlClick ('Winamp Setup','Choose Install Options','&Next >')

WinWaitActive ('Winamp Setup','Internet Connection and Language Settings')
Send ('{Down 2}{Tab 5}{Enter}')

WinWaitActive ('Winamp Setup','Interface and Skin Selection')
ControlClick ('Winamp Setup','Interface and Skin Selection','&Install')

; Вот здесь и наступает непонятка: после нажатия на кнопку инстал (строчка выше) открывается следующее окно, где и идёт процесс установки, не закрывается, выскакивает новое окно с вопросом о перезагрузке. После нажатия “нет” – всё закрывается, winamp даже не запускается. Так вот, при выскакивании этого окна с запросом, ничего не происходит. Я явно не понял, как этот оператор работает.

If WinExists ( 'Winamp Setup', 'A reboot is required to complete the installation' ) Then

WinWaitActive ('Winamp Setup','A reboot is required to complete the installation.')
ControlClick ('Winamp Setup','A reboot is required to complete the installation','Button2')

ProcessWaitClose("winamp.exe")

Run('ENHANCER.EXE')

WinWaitActive ('Enhancer 0.17')
ControlClick ('Enhancer 0.17','','Next >')

Sleep ( 1000 )

ProcessWaitClose("'ENHANCER.exe")

run ('rus.exe')

Else

sleep ( 3500 )

;WinWaitActive ('Player Window')
;sleep ( 1000 )

WinWaitActive ('Add Media to Library')
WinActivate ('Add Media to Library')
Send ('{Tab 2}{Enter}')
WinWaitClose("Add Media to Library", "", 5)

sleep ( 1000 )

run ('taskkill.exe /F /IM winamp.exe')

ProcessWaitClose("winamp.exe")

Run('ENHANCER.EXE')

WinWaitActive ('Enhancer 0.17')
ControlClick ('Enhancer 0.17','','Next >')

Sleep ( 1000 )

ProcessWaitClose("'ENHANCER.exe")

run ('rus.exe')

EndIf

Exit

VelDmi
04-08-2005, 07:13
DenchikK
А ты не пробовал версию winamp.msi? C ней таких проблем нет.

Madcap
04-08-2005, 08:32
2 DenchikK
На сколько я понял оператор WinExists проверяет наличее окна только 1 раз, в твоем случае сразу после нажатия клавиши
ControlClick ('Winamp Setup','Interface and Skin Selection','&Install') когда окно 'Winamp Setup' еще не появилось.
Внимательно почитай посты на 4 странице, там Sanja Alone растолковывал мне как определить какое именно окно открылось. Это должно подойти и тебе.

DenchikK
05-08-2005, 00:42
Слегка получилось со скриптом для winamp (и новый робоформ построил на его основе), только работает странно - скрипт не закрывается, приходится вызывать taskkill - что не есть гуд. И вторая неприятная вещь - я выставил таймаут для нормальной работы скрипта - боюсь что на других компах может и не сработать.

И заодно бы хотел спросить про функцию проверки отметки чекбокса. Примерно в половине программ она не срабатывает. Это нормально, или я что-то не так делаю? Там где не срабатывает, есть отличительная черта: не совпадение надписи на чекбоксе с тем, что выдаёт AutoIT

Пример: Offline Explorer 3.8, Recovery My Files 3.70.

А вот так например сработало для FastStone:

ControlCommand ( 'FastStone Image Viewer', 'Completing the FastStone Image', 'Button4', 'UnCheck', '' )

Sanja Alone
08-08-2005, 03:16
DenchikK
Примерно в половине программ она не срабатывает. Это нормально, или я что-то не так делаю?Почти со стопроцентной уверенностью могу сказать, что все несрабатывающие используют установщик Inno Setup. Ничего не поделаешь - подводи куда нужно курсор и Send('{SPACE}')

bogomolv
08-08-2005, 22:19
DenchikK

Начну с самоцитаты из своего первого поста:
"Мне обидно за любимый AutoIt, когда его используют исключительно в этих [автокликанье] целях".

На другом ресурсе (где мы с тобой уже встречались) был предложен достаточно простой и быстрый(!) способ автоустановки WinAmp путем копирования свежеустновленной программы и ее данных в реестре.
Установка WinAmp (и большинства других программ) автокликаньем имеет огромный недостаток - зависит от версии программы. В результате с выходом каждой новой версии любимой программы, как правило, приходится переписывать autoit-скрипты , что со временем изрядно надоедает. Поэтому советую обращаться к AutoIt лишь тогда, когда другие средства установки неприменимы.
Способ установки копированием реестра также зависит от версии. Но все отличия, скорее всего, будут локализованы в одной-двух отвечающих за настройки программы ветках реестра, которые можно элементарно скопировать целиком и заменить в соответствующем reg-файле.
К тому же при этом способе часто удается использовать "скрытые" возможности самой программы. Например, простое копирование mplayerc.exe можно сопроводить RunWait(@ProgramFilesDir&'\Media Player Classic\mplayerc.exe /regvid') и зарегистристрировать таким образоом на Media Player Classic расширения видеофайлов. Остается добавить в реестр некоторые свои любимые настройки программы и - ву-аля.
Интересная комбинация может получаться при синтезе нескольких способов установки. Например, в папку $oem$\$Progs\WinRAR можно положить не развернутую копию программыных файлов, а только два из них - Settings.reg (сохраненные из самого WinRAR настройки) и rarreg.key (лицензионный ключ). Тогда для автоустановки WinRAR достаточно будет двух команд
RunWait ('regedit /s "@ProgramFilesDir@\WinRAR\Settings.reg"') и RunWait ('@ScriptDir@\wrar35b7ru.exe /S') (именно в этой последовательности!).

Относительно же твоих вопросов о том, почему в кокретном случае не срабатывает та или иная команды или не закрывается то или иное окно, на них ответить трудно. Для этого под рукой нужно иметь твою программу в той версии, которую ты мучаешь и т.д. Да и обсуждение, вряд ли для кого-нибудь, кроме тебя лично, будет представлять интерес. А раз так, тебе самому и решать возникающие проблемы - перебирай по очереди различные способы слежения за окнами в AutoIt (только параметром Opt('WinTitleMatchMode', 1-4) можно задать 4 таких способа), пробуй все известные способы нажимания на кнопки (различные Control, Send (особенно Send('горячая клавиша'), MouseClick), читай и перечитывай AutoIt.chm...

Sanja Alone
Почти со стопроцентной уверенностью могу сказать, что все несрабатывающие используют установщик Inno Setup.А вот это уже значительно более интересный аспект темы, поднятой DenchikK.
В продолжение начатого с ним разговора могу напомнить, что у установщика INNO SETUP есть ключ /COMPONENTS="comma separated list of component names", так что можно вполне обойтись silent-установкой без чекбоксов.
При юзании устновщиков INNO SETUP можно также сохранить параметры ручной установки ключом /SAVEINF="filename", а потом воспроизводить их через /LOADINF="filename".

DenchikK
09-08-2005, 01:15
bogomolv


Начну с самоцитаты из своего первого поста:
"Мне обидно за любимый AutoIt, когда его используют исключительно в этих [автокликанье] целях".
Может, вы и правы, но для меня пока нет задачи, кроме автокликанья, для которой мне мог бы понадобиться AutiIT. Появятся такие задачи – более полно раскроется для меня и AutoIT. Специально то я не буду искать такие задачи. Так что с этим всё очень просто.


На другом ресурсе (где мы с тобой уже встречались) был предложен достаточно простой и быстрый(!) способ автоустановки WinAmp путем копирования свежеустновленной программы и ее данных в реестре.
Знаю, но меня пока ни один из известных способов не устраивает, и этот метод меня не устраивает в первую очередь. Если посмотреть программой, отслеживающий изменения в системе, то можно увидеть, что изменений, относящихся к winamp насчитывается почти 2 тысячи! И каждый раз, как выходит новая версия опять заниматься отловом записей реестра, файлов и проч. (WinAmp ещё и кодаки ставит – и отдельно их отыскивать и регистрировать) – это полный геморрой. Хотя бы попробуйте экспортировать из реестра ключи, отвечающие за регистрацию расширений – обещаю – надоест очень быстро! Так что это способ отвергается сразу.


Поэтому советую обращаться к AutoIt лишь тогда, когда другие средства установки неприменимы.
Вот потому и пользуюсь AutoIT только в крайних случаях, мои приоритеты просты:
1. Ключи
2. Rar SFX
3. AutoIT


Да и обсуждение, вряд ли для кого-нибудь, кроме тебя лично, будет представлять интерес

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



пробуй все известные способы нажимания на кнопки (различные Control, Send (особенно Send('горячая клавиша'), MouseClick), читай и перечитывай AutoIt.chm...
Что я и делаю, прежде чем обратиться на форум.


В продолжение начатого с ним разговора могу напомнить, что у установщика INNO SETUP есть ключ
Далеко не все программы работают с этими 2 способами.

Madcap
09-08-2005, 10:45
Многим пользователям будет очень полезно
прочитать, как можно решить анологичную проблему. Программы меняются - а принцип решения может быть одинаковым.Полностью согласен. ИМХО после прочитывания данной темы у многих начинающих "писателей" скриптов :) отпадет большая часть вопросов.

Такой вопрос. Как можно кликнуть на скрытую кнопку?

Control ID: 12325
ClassNameNN: Button7
Text: Готово
(Control is hidden)

send ("{enter}") нехочется, потому что долго подводить курсор, а можно ли ControlClick-ом?

bogomolv
09-08-2005, 14:13
DenchikK
Во-первых, в интернете, как и в бане, все равны. Так что, не "выкай" (и тем более не делай это с маленькой буквы - я один!).
Во-вторых, ну и зачем ты это написал? Не хочешь слушать - не слушай. Я ж все равно не проверю, как ты реализушь мои бесценные наставления! А по содержанию твой пост - сугубо личное послание-оправдание. Для этого есть почтовый ящик.:)

DenchikK & Madcap

Многим пользователям будет очень полезно прочитать, как можно решить анологичную проблему. Программы меняются - а принцип решения может быть одинаковым.
Полностью согласен. ИМХО после прочитывания данной темы у многих начинающих "писателей" скриптов отпадет большая часть вопросов.И я полностью согласен, что нужно обсуждать ПРИНЦИПЫ. Поэтому и пишу.
Вы же обсуждаете, "можно ли кликнуть на скрытую кнопку" или "как бы сделать обход этого - например оператором IF". Кто ж за вас это сделает? Вот и попробуйте кликнуть на скрытую кнопку или сделать обход оператором IF. А результаты доложите...:)

biork
13-08-2005, 12:42
Всем привет.
Аналогичная проблемка. Иногда выскакивает окошко, иногда нет. В случае, когда оно есть - скрипт удачно доходит до конца. В случае, когда окошка нет - не происходит отработки ветки "Else". Что не так?

Run("ezAntivirus.exe")

;BlockInput(1)

WinWaitActive("License Agreement", "")
ControlClick("License Agreement", "", "CUST:BUTTON2")

WinWaitActive("Installation Location", "")
ControlClick("Installation Location", "", "CUST:BUTTON2")

If WinExists ("Update Message", "") Then
WinWaitActive ("Update Message", "")
ControlClick("Update Message", "", "CUST:BUTTON2")

WinWaitActive ("Scan", "")
ControlClick("Scan", "", "CUST:BUTTON1")
ControlClick("Scan", "", "CUST:BUTTON1")

WinWaitActive("Restart Required", "")
WinClose("Restart Required", "")

Else

WinWaitActive ("Scan", "")
ControlClick("Scan", "", "CUST:BUTTON1")
ControlClick("Scan", "", "CUST:BUTTON1")

WinWaitActive("Restart Required", "")
WinClose("Restart Required", "")

EndIf

Exit

biork
13-08-2005, 13:05
Цитата:
Ничего не поделаешь - подводи куда нужно курсор и Send('{SPACE}')

Воспользовался этим нехитрым методом:

...
WinWaitActive("Drive Image 2002 Setup", "Select the features you want to install")
ControlFocus ( "Drive Image 2002 Setup", "", "SysTreeView321")
MouseClick( "left", 443, 471, 1)
ControlFocus ( "Drive Image 2002 Setup", "", "Button2")
Send("!n")
...

Работает! Но... только на моём компе, когда тестирую скрипт.
При запуске на виртуальной машине или другом компьютере стрелка уезжает совсем не в то место, где нужно кликнуть

bogomolv
14-08-2005, 01:56
biork

По MouseClick.
Вместо этой команды Tab'ом подведи к кусор к кнопке и кликни ее. Что-то вроде Send({Tab}{Enter}).

По неожиданным окошкам.
Не знаю конкретной проблемы, но в общем случае для неожиданных окон и любых других нежелательных оказий в AutiIt есть чудная процедура AdlibEnable('Имя функции').
Пример. На стадии cmdlines иногда выскакивает сообщение о заканчивающейся виртуальной памяти. Для его погашения в cmdlines.au3, отрабатывающем все действия на данной стадии, задаем функцию NonVMEM
AdlibEnable('NonVMEM')
...
обычные действия
...
Exit

Func NonVMEM()
If WinExists('Слишком мало виртуальной памяти') Then WinKill('Слишком мало виртуальной памяти')
EndFunc

Sanja Alone
14-08-2005, 03:01
biork
Если сильно хочется MouseClick-нуть, то сначала обрати внимание на опцию
Opt("MouseCoordMode", 1) ;1=absolute, 0=relative, 2=clientПо умолчанию, привязка идет к левому верхнему углу экрана (1), а тебе нужно привязаться к активному окну (0) или к клиентской части активного окна (2). В AutoIt Window Info эти режимы находятся здесь: Options - Coord Mode.

Sanja Alone
15-08-2005, 02:24
Я написал простенький конвертер для перевода reg-файлов в директивы AutoIt (RegWrite и RegDelete).
Конвертер понимает все типы параметров (известные AutoIt-у), поддерживает удаление веток/параметров.
Параметры типов REG_RESOURCE_LIST (hex(8)), REG_FULL_RESOURCE_DESCRIPTOR (hex(9)), REG_RESOURCE_REQUIREMENTS_LIST (hex(a)), REG_QWORD (hex(b)), а также неправильные параметры типа DWORD (hex(4)) пропускаются.

Ограничения: не понимает Unicode, т.е. исходные reg-файлы должны быть в DOS или Win кодировках (REGEDIT4).
Особенности: медленная работа с большими файлами (675Кб ветка HKLM\SYSTEM\CurrentControlSet\Services, выбранная для теста, обрабатывается 4,5 мин. на AXP-1500MHz). Я не считаю этот момент проблемой, т.к. конвертер предназначен не для преобразования реестра, а для дополнения AutoIt-скриптов установок прог их настройками из reg-файлов.

Кому нужен - прошу (http://sanjaalone.h15.ru/crta.php)
Если при использовании столкнетесь с какими-то недоработками - мыльните (sanjaalone@mail.ru).

Кроме того, скрипты установки н-рых программ находятся на этой (http://sanjaalone.h15.ru/au3.php) странице.

P.S. Исправил проблемы с \\, \", одинарными кавычками внутри параметров ('), двоеточиями в названиях параметров, параметрами по умолчанию (@), символами равно внутри строковых параметров.




© OSzone.net 2001-2012