Показать полную графическую версию : [Архив - Часть 1.1] AutoIt скрипты
Страниц :
1
2
3
4
5
6
[
7]
8
9
10
11
12
13
14
15
16
17
bogomolv
07-09-2005, 00:46
Продолжим разговор об интересных функциях?
Очень понравилась функция StringSplit. Особенно одно ее практическое применение, которое подсмотрел в предлагаемом для include файле File.au3. Теперь одной строчкой считываю содержимое текстового файла в массив $list=StringSplit(FileRead($f,FileGetSize($f)),@CRLF) и делаю с ним, что хочу!
В частности, функция очень пригодилась для считывания структуры каталогов драйверов OEM-установки Windows (папка $oem$\$1\drivers). Раньше приходилось следить и жестко прописывать все пути к драйверам для их автоустановки на стадии CMDLINES (CMDLINES.TXT у меня запускает CMDLINES.AU3, в котором расписан сценарий установки дров и инициализации настроек системы).
Теперь в CMDLINES.AU3 вместо многостраничного перечня действий со всеми своими и чужими драйверами (с которыми когда-либо встречался и могу встретиться еще) у меня стоит красивая конструкция:
;Установка драйверов устройств
$f= '%temp%\1.txt'
RunWait ('%Comspec% /c dir /ad /s "c:\drivers" | find "c:\drivers\" > $f$','',0)
$dr= StringSplit(StringReplace(FileRead($f,FileGetSize($f)),' ‘®¤Ґа¦Ё¬®Ґ Ї ЇЄЁ ',''),@CRLF)
For $i=1 To $dr[0]
$drr= $dr[$i]
$srch= FileFindFirstFile('$drr$\*_1.au3')
If $srch=0 Then RunWait('AutoIt3.exe "$drr$\'&FileFindNextFile($srch)&'"')
FileClose($srch)
Next
Данной процедурой считывается дерево каталога "c:\drivers" (куда копируются в процессе установки драйвера из $oem$\$1\drivers) и проверяется наличие скриптов с именем *_1.au3 с последующим их запуском. Файлы скриптов *_1.au3 - это мои автоустановщики дров и их настроек, которые я теперь храню вместе с дровами (а не в CMDLINES.AU3, как раньше). Не все дрова требуют наличия таких установщиков. И прекрасно! FileFindNextFile() не найдет *_1.au3 и перейдет к следующему каталогу. Есть и такие дрова, которые вообще не любят ставиться в процессе установки Windows (например, IAAraid). Обзываем скрипт их установки *_2.au3 и включаем те же девять строк в начало STARTUP.AU3, который стартует из Автозапуска при первом запуске свежеустановленной Windows (в этом файле у меня расписан сценарий автустановки программного обеспечения).
Теперь подготовка дистрибутива для установки системы на чужой машине сводится к простому копированию из архива заготовок драйверов для $oem$\$1\drivers и небольшой правке unattended.txt. Счастливому же владельцу машины достается комплект автопереустановки системы, похожий на те, что идут с ноутбуками…
Sanja Alone
07-09-2005, 02:54
1. Подправил скрипт для Pragma 4.x (http://sanjaalone.h15.ru/files/autoit-pragma.zip): теперь можно посмотреть на применение функции AdlibEnable(), а также опции OnExitFunc - здесь она необязательна, но уместна в кач-ве демонстрации.
2. Переписал скрипт для ABBYY FineReader 7.0 (http://sanjaalone.h15.ru/files/autoit-fr.zip): теперь 3 варианта установки, две страны (Украина, Россия), зациклен ввод серийника (действительно иногда первый сгенерированный серийник не подходит).
bogomolv
Очень понравилась функция StringSplitА ты думаешь какой функцией я воспользовался при чтении файла в массив в своем конвертере crta (http://sanjaalone.h15.ru/files/crta.zip) :)
Но тут есть заковырка: если массив у тебя уже объявлен, например как $Array[1], то элемент $Array[0] - это не длина массива, а всего лишь первое внесенное значение (у меня была необходимость в предопределенном массиве в кач-ве временного хранилища многострочных hex-параметров). Для дополнения такого массива новым элементом его нужно ресайзнуть ReDim $Array[UBound($Array) + 1],а в циклах вместо For $i=1 To $Array[0] писать For $i=1 To UBound( $Array, 1 )-1.
И еще одна особенность AutoIt-а в плане работы с массивами: когда я переписал конвертер так, чтобы он использовал 2 массива (вх. и рез.), а не добавлял построчно данные в файл, он (конвертер) стал работать более чем в 3 раза медленнее (~16 мин.). Вот тебе и ОЗУ :( Самое забавное, что я еще пробовал третий вариант: построчное чтение вх. файла с такой же построчной записью результирующих строк в вых. файл - выполняется 6 с небольшим минут (против 4,5 в исх. вар-те), правда исп-ся минимум памяти. (это время конвертации моего тестового 675Кб reg-файла - ветка HKLM\SYSTEM\CurrentControlSet\Services)
Пришлось оставить исходный вариант алгоритма: читаем все в массив - определяем тип строки - составляем выходную строку - пишем в файл - повторяем до конца массива (для многострочных параметров, как я уже сказал, исп-ем доп. динамический временный массив). Ух, удалился я от темы, ну да ладно...
К вопросу о драйверах: я использую метод установки с CD (http://oszone.net/display.php?id=2780). Вполне себе нормально все ставится... и без скриптов. Правда, пока приходилось ставить Винду только на VIA и nForce2-based платформы, с другими может и не так все гладко. А у тебя создается некое подобие персонифицированного для конкретной машины набора дров, или как? Алгоритм? Ты бы статью написал на эту тему, что ли...
Sanja Alone
Добрый день.
Не очень тут удобно редактировать письма, да не суть.
Спасибо за подсказку с функцией Opt() При ее помощи удалось найти проблему. Все дело оказалось в кодировке файла скрипта :( Русский язык не правильно воспринимался, поэтому дальше скрипт и не шел.
Прошу прощения, что отнял столько времени из-за такой глупости.
demo369
Очень неудобно читать твои посты - pls, пользуйся тэгами цитат quote.
Цитата:
Просто выдает что скрипт остановлен (paused) lingvo.exe
Не просто... Наведи мышку на иконку и не нажимай клавиш, появится всплывающая подсказка на 2 строки - в первой будет имя скрипта, а во второй строка на к-рой он застопорился (что-то вроде Line 5: WinWait("Name","Text")) Причем лучше запускать au3-файл, т.к. в случае с exe не будет показан номер строки скрипта.
Цитата:
Даже пробовал, добавить button и clicks. Рез-тов не дало.
Все, что в квадратных скобках - необязательные параметры.
Что я могу еще придумать:
1. Можно заменить
Код:
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
; на
WinWait ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinActivate ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
2. Заменить
Код:
ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор', 'Button3' )
Send ( '{ENTER}' )
; на
Send ( '{UP}' )
Send ( '{ENTER}' )
3. Мешать скрипту могут различные перехватывающие нажатия клавиш проги: автопереключатели раскладки, счетчики нажатий клавиш и т.п. Тут нужно или отказаться от BlockInput(1), или убивать процесс такого приложения в памяти, например, убийство Punto Switcher-а будет выглядеть так (поместить этот код нужно в начало скрипта):
Код:
If ProcessExists ( "ps.exe" )<>0 Then
ProcessClose ( "ps.exe" )
ProcessWaitClose ( "ps.exe" )
EndIf
Господа помогите с InputBox, если жмут Cancel или закрывают окно на выходе должен быть путь установки проги по умолчанию, как написать?
Всё разобрался
$answer = InputBox("Путь установки", "Куда исталлировать программу?", @ProgramFilesDir & "\PRMT6\", "", -1, -1,400,300)
If @error=1 Then
$answer =@ProgramFilesDir & "\PRMT6\"
EndIf
FileWrite("Answer.txt",$answer)
Sanja Alone
13-09-2005, 06:03
1. Переписал скрипт для Winamp 5.xx (http://sanjaalone.h15.ru/files/autoit-winamp.zip): теперь с исп-ем идентификатора окна и внесением н-рых настроек в winamp.ini
2. Добавил скрипты для Everest 2.xx (Ultimate/Corporate/Home) (http://sanjaalone.h15.ru/files/autoit-everest.zip) и DVD Identifier 3.x (4.x) (http://sanjaalone.h15.ru/files/autoit-dvdidentifier.zip)
P.S. Таблица выбора скриптов на сайте теперь содержит инф. о версии скрипта, а также имеет возможность сортировки (применены xml+xsl+javascript). Если у кого-то не будет работать - напишите мне (sanjaalone@mail.ru) (указав свой браузер и его версию), т.к. тестировалось все это дело только на IE 6.0.
P.P.S. Если у Вас будет желание, то могу разместить эдесь (http://sanjaalone.h15.ru/au3.php) и Ваши скрипты. Ес-но, добавив в таблицу ссылку на автора (пока в этом нет нужды, т.к. автор один - я :) )
Softwarez777
13-09-2005, 15:41
А для Promt 7 Expert можно сделать ?
Sanja Alone
14-09-2005, 02:04
Softwarez777
А для Promt 7 Expert можно сделать ?Конечно, но у меня его нет, а качать с "двухбаксов" пролеченную версию на двух CD (прога + CD со словарями) мне на диалапе сложновато и оч-чень дороговато :(
EgOrus
Расскажи пожалуйста поподробнее про alc120.vbs, что и куда ложить надо и что за объект ActiveX? И про alc120.au3 что-то я пробовал и ни чего у меня не получилось, тут наверное я один такой одаренный :) что ни чего не понимаю, когда просто запускаю start C:\Test\AutoIt3.exe alc120.au3 в трэе появляется значок, а когда при установке даже в VmWare выскакивает ошибка чтения файла alc120.au3, а Alcohol продолжает устанавливаться и вылазиет мастер нового оборудования, и ничего не происходит :(, делаю все как написано в руководстве подскажи плиз что я ни так делаю.
SlavaS
во1ых, start C:\Test\AutoIt3.exe C:\Test\alc120.au3 (нужно указать путь к скрипту, иначе система ищет его в системных папках)
во2ых, какой язык системы у тебя? скрипт au3 дан для русской винды, для англ. нужно переписывать заголовки окон.
в3их, добавь в начало скрипта строку AutoItSetOption ("TrayIconDebug", 1) и если при появлении мастера нового оборудования ничего не происходит, наведи на значок "A" в трэе, он тебе покажет на какой строчке скрипт остановился, напиши эту информацию здесь, будем дальше думать (возможно что ты используешь последнюю версию Алкоголика и в нем что-то изменилось, хотя наврятли, пот. мастер нового оборудования это не алкоголиковское окно)
Кстати как ты запускаешь установку? Так:
msiexec.exe /passive /norestart /i c:\Test\setup.msi
По поводу vbs:
Сперва чтобы пользовать этим самым объектом ActiveX, нужно зарегить в системе библиотеку AutoItX.dll (есть в дистрибутиве AutoIt)
regsvr32 /s c:\Test\AutoItx.dll (предположим что ты dll'ку положил в С:\Test а вообще правильнее ложить ее в папку windows или windows\system32 - $OEM$\$$\system32)
после этого положить vbs данный на 1ой странице рядом с распакованным дистром (должен присутствовать файл setup.msi) и запустить его.
Sanja Alone
16-09-2005, 03:02
SlavaS
Скрипт установки Alcohol 120% 1.9.5.3105 (http://sanjaalone.h15.ru/files/autoit-alcohol.zip) (установка/регистрация/настройки). Комментарии смотри внутри au3-файла (скрипт подходит для любых Алкоголиков, т.к. исп-ся тихая установка).
У меня установка и регистрация проходит нормально, я не могу от мастера нового оборудования избавиться :(
SlavaS
Проверь чтобы заголовок первого окна мастера нового оборудования совпадал с первой строчкой winwait (...).
Проверять установку лучше не на виртуальной машине, а на своей, устанавливаешь если и что-то не так в процессе, удалаешь его. Правишь скрипт, потом опять запускаешь и смотришь как прошла установка, так до победного конца.
DenchikK
16-09-2005, 11:30
А можно ли с помощью AutoIT определить, какая винда (XP, ХP SP1, XP SP2) стоит на машине?
Идея вот в чём: в зависимости от того, какая винда стоит, подключать соответствующий BootScreen:
1. Переписать файл скрина на винт
2. Редактировать (добавить строчку) файл boot.ini (где-то я видел, как с помощью AutoIT можно редактировать файлы).
EgOrus
что-то я ни как не могу победить этот мастер нового оборудования, или скрипт не доделанный или у меня XP не тот, но в заголовке окна все совпадает.
Я вот думаю почему в твоем скрипте как только появляется мастер нового оборудования и нажимается ENTER?
'Ожидание окна установки SCSI адаптера
AutoIt.WinWait "Мастер нового оборудования", "", 0
AutoIt.Sleep 500
AutoIt.Send "{ENTER}"
Он ведь сначала спрашивает разрешить подключение к узлу Windows update для поиска програмного обеспечения и нужно выбрать Да, только в этот раз или Нет, не в этот раз, т.к. кнопка далее не активна, а вот потом уже нужно этот самый ENTER.
SlavaS
Понятно, у меня до устаноки софта применяются твики, в данном случае за НЕпоявление указанного тобой окна отвечает этот твик:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DriverSearching]
"DontSearchWindowsUpdate"=dword:00000001
"DontPromptForWindowsUpdate"=dword:00000001
Поэтому у тебя и не выходит каменный цветок...
Можешь либо применить твик, либо просто добавить в скрипт действия по закрытию этого окна. С помощью AU3Info.exe узнать название класса кнопки "нет" и использовать конструкицю типа
WinWait ("нужное окно","", 0)
Sleep(500)
'Послать в указанное окно ControlClick для кнопки НЕТ (название класса этой кнопки например Button2)
ControlClick ("Нужное окно","", "Button2")
Sanja Alone
17-09-2005, 03:07
DenchikK
А можно ли с помощью AutoIT определить, какая винда (XP, ХP SP1, XP SP2) стоит на машине?
@OSLang - Returns code denoting OS Language. See Appendix for possible values.
@OSType - Returns "WIN32_NT" for NT/2000/XP/2003 and returns "WIN32_WINDOWS" for 95/98/Me
@OSVersion - Returns one of the following: "WIN_2003", "WIN_XP", "WIN_2000", "WIN_NT4", "WIN_ME", "WIN_98", "WIN_95"
@OSBuild - Returns the OS build number. For example, Windows 2003 Server returns 3790
@OSServicePack - Service pack info in the form of "Service Pack 3" or, for Windows 95, it may return "B"
...файл boot.ini (где-то я видел, как с помощью AutoIT можно редактировать файлы).Для ini-файлов в AutoIt-е предусмотрены спец. функции:IniDelete ( "filename", "section" [, "key"] ) - Deletes a value from a standard format .ini file.
IniRead ( "filename", "section", "key", "default" ) - Reads a value from a standard format .ini file.
IniReadSection ( "filename", "section" ) - Reads all key/value pairs from a section in a standard format .ini file.
IniReadSectionNames ( "filename" ) - Reads all sections in a standard format .ini file.
IniWrite ( "filename", "section", "key", "value" ) - Writes a value to a standard format .ini file.
Все вышеперечисленное можно найти просто почитав оригинальный файл AutoIt.chm (а не переведенный хелп к одной из старых версий AutoIt-а).
DenchikK
17-09-2005, 06:56
Спасибо огромное! Просто с английским у меня дико плохо - вот и юзаю перевод, а он оказывается не полный.
Sanja Alone
18-09-2005, 01:29
Добавил скрипты:
Adobe Photoshop CS (Photoshop 8.0) (http://sanjaalone.h15.ru/files/autoit-pscs.zip)
BetterJPEG 1.4.1.2 (http://sanjaalone.h15.ru/files/autoit-bjpeg.zip)
DivX Pro 5.1.1 GAIN Bundle Codec (http://sanjaalone.h15.ru/files/autoit-divx5.zip)
Foxit PDF Reader 1.3 (Build 0708) (http://sanjaalone.h15.ru/files/autoit-foxitpdf.zip)
Get File Size 2.2 (http://sanjaalone.h15.ru/files/autoit-gfs.zip)
Mozilla Thunderbird 1.0.6 (http://sanjaalone.h15.ru/files/autoit-moztb.zip)
Поправил/дописал:
DivX Pro 6.0 Bundle Codec (Create) (http://sanjaalone.h15.ru/files/autoit-divx6.zip)
Image Dupeless 1.6.1 (ru/en) (http://sanjaalone.h15.ru/files/autoit-imagedupeless.zip)
bogomolv
19-09-2005, 00:07
Sanja Alone
Ты памятник себе воздвигаешь себе нерукотворный?
К нему не зарастет народная тропа!
Маладес!
Хотел бы подмазаться. Но, блин, как же это тяжело думать о других...
Ну и типа - by the way!
Други, впервые встретился с проблемой, что НЕ МОГУ ввести латинскую "D"!
Всегда решал эту проблему "русского языка" Autoit (под WinXP Rus) с помощью ClipPut('D')... Send('+{INS}') или ControlSetText(''...','...','...','D'). Но DSKPROBE.EXE (этот Василий Алибабаевич!) не воспринимает ничего, прямого direct push!
bogomolv
19-09-2005, 00:23
Sanja Alone
Сань, признавая и уважая... Но как же мы по-разному думаем!
Вместо autoit-foxitpdf.au3 у меня в ...\$oem$\$Progs\FoxitReader лежат FoxitReader.exe и foxitpdfreader.reg. В CmdLines.au3 при этом есть запись RunWait ('regedit /s "@ProgramFilesDir@\FoxitReader\foxitpdfreader.reg"')
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC