PDA

Показать полную графическую версию : [Архив - Часть 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 платформы, с другими может и не так все гладко. А у тебя создается некое подобие персонифицированного для конкретной машины набора дров, или как? Алгоритм? Ты бы статью написал на эту тему, что ли...

demo369
07-09-2005, 14:41
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

ANGRO
11-09-2005, 17:15
Господа помогите с 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 со словарями) мне на диалапе сложновато и оч-чень дороговато :(

SlavaS
14-09-2005, 06:42
EgOrus
Расскажи пожалуйста поподробнее про alc120.vbs, что и куда ложить надо и что за объект ActiveX? И про alc120.au3 что-то я пробовал и ни чего у меня не получилось, тут наверное я один такой одаренный :) что ни чего не понимаю, когда просто запускаю start C:\Test\AutoIt3.exe alc120.au3 в трэе появляется значок, а когда при установке даже в VmWare выскакивает ошибка чтения файла alc120.au3, а Alcohol продолжает устанавливаться и вылазиет мастер нового оборудования, и ничего не происходит :(, делаю все как написано в руководстве подскажи плиз что я ни так делаю.

EgOrus
15-09-2005, 10:13
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
16-09-2005, 09:23
У меня установка и регистрация проходит нормально, я не могу от мастера нового оборудования избавиться :(

EgOrus
16-09-2005, 10:37
SlavaS
Проверь чтобы заголовок первого окна мастера нового оборудования совпадал с первой строчкой winwait (...).
Проверять установку лучше не на виртуальной машине, а на своей, устанавливаешь если и что-то не так в процессе, удалаешь его. Правишь скрипт, потом опять запускаешь и смотришь как прошла установка, так до победного конца.

DenchikK
16-09-2005, 11:30
А можно ли с помощью AutoIT определить, какая винда (XP, ХP SP1, XP SP2) стоит на машине?
Идея вот в чём: в зависимости от того, какая винда стоит, подключать соответствующий BootScreen:
1. Переписать файл скрина на винт
2. Редактировать (добавить строчку) файл boot.ini (где-то я видел, как с помощью AutoIT можно редактировать файлы).

SlavaS
16-09-2005, 16:49
EgOrus
что-то я ни как не могу победить этот мастер нового оборудования, или скрипт не доделанный или у меня XP не тот, но в заголовке окна все совпадает.
Я вот думаю почему в твоем скрипте как только появляется мастер нового оборудования и нажимается ENTER?
'Ожидание окна установки SCSI адаптера
AutoIt.WinWait "Мастер нового оборудования", "", 0
AutoIt.Sleep 500
AutoIt.Send "{ENTER}"
Он ведь сначала спрашивает разрешить подключение к узлу Windows update для поиска програмного обеспечения и нужно выбрать Да, только в этот раз или Нет, не в этот раз, т.к. кнопка далее не активна, а вот потом уже нужно этот самый ENTER.

EgOrus
16-09-2005, 19:54
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