|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.1] AutoIt скрипты |
|
[Архив - Часть 1.1] AutoIt скрипты
|
Ветеран Сообщения: 628 |
Профиль | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. Ну во превых, к моему удивлению, утилита (и компонента activeX) уже успела обновиться до версии 3.1.0 (7 фев 2005) и заполучить множество дополнительных функций (появилась возможность создавать граф. интерфейс к своим скриптам . К сожалению русскоязычной справки пока нет. Скачать можно здесь Почему лишь руководство? Потомучто к программе прилагается обширная справка с описанием самой программы и команд, в т.ч. и на русском языке. Основные команды используемые в нашем случае в новой версии не поменялись. Я рассмотрю лишь самые азы, кот. необходимы для создания самого простого скрипта, в принципе этого достаточно для установки практически любой программы, просто знание дополнительных команд позволят сделать скрипт более компактным и красивым. На сегоднящний день имеется 2 распространненых способа по автоматизации установки 1. Использование утилиты AutoIt и файлов скриптов au3, кот. в последствии можно компилировать в исполнимые файлы exe, не требующие утилиты AutoIt.exe 2. Использование VBS и JS скриптов, этот способ можно расширить за счет использования activeX компоненты - autoitX (к слову сказать - я пользуюсь именно этим методом). Для примера создадим скрипт по установки Alcohol120%. Самое неприятное в его установки это окно с подтверждением установки SCSI драйвера. Это мы и поправим. Цитата Скрипт alc120.au3:
Создадим файл с названием alc120.au3 в win1251 кодировке Теперь нужно заблокировать клавиатуру и мышь чтобы наглый пользователь не нажал что-нибудь или не сменил случайно фокус с активного окна во время работы скрипта. 'Блокировка клавы и мышки (многие команды предназначены для посыла в активное окно) BlockInput(1) Скрипт запустился и теперь ожидает запуска инсталяра и появление сигнального окна, кот. сообщит скрипту что программа запущена и можно продолжать выполнение скрипта. Для того чтобы узнать название окна нужно использовать спец. утилитку AU3Info.exe, кот. входит в комплект дистрибутива autoit. Запускаем ее, после чего запускаем дистрибутив Alcohol120% и доходим до того места где вылазит окно Мастер нового оборудования с вопросом об установке SCSI адаптера. Активируем его кликнув по заголовку мышкой и жмем CTRL+ALT+F, в результате в окне AU3Info информация о текущем окне зафиксируется: Цитата:
копируем название этого заголовка, там же можно посмотреть текст наличествующий в этом окне, если необходимо. Цитата:
'Ожидание окна установки SCSI адаптера (в зависимости от языка винды заголовок будет разным) WinWait ("Мастер нового оборудования","", 0) WinWait ( "title" [, "text" [, timeout]] ) title - название окна кот. ожидает скрипт для продолжения работы, text - любой текст в этом окне, нужен если последующее окно после нажатия кнопки, имеет такой же заголовок timeout - таймаут, время через кот. ожидание прекратиться, 0 - никогда 'Пауза на 500 мс на всякий случай, для слабых машин, чтобы окно успело обновиться Sleep (500) После того как окно с нужнымм заголовком появилось, скрипт должен послать активному окну клавишу ENTER, в результате будет нажата кнопка по умолчанию (в нашем случае "далее"). Список клавиатурных нажатий см. в справке. 'Послать в активное окно нажатие клавиши ENTER Send ("{ENTER}") Далее продолжится устанока SCSI адаптера вплоть до появление последнего окна с предложением закрыть мастер. 'Ожидание окна окончания установки SCSI адаптера WinWait ("Мастер нового оборудования","Для закрытия мастера", 0) 'Ждем 600 мс. для того чтобы окно успело обновиться Sleep (600) Теперь нам нужно нажать клавишу готово, можно воспользоваться тем же методом что и выше Send ("{ENTER}"), но для разнообразия воспользуемся другим, не всегда ведь нам нужна будет кнопка по умолчанию кот. нажимается клавшей ввод. Используем метод ControlClick, кот. позволяет кликнуть по определенному объекту в окне исходя из его идентификатора (Control ID) или Названия Класса (ClassName). Чтобы узнать то или другое используем вышеупомянутую утилитку AU3Info, только теперь подводим курсор на нужную кнопку и смотрим на параметр "ClassNameNN", копируем значение Button9, и используем в скрипте. Цитата:
'Послать в указанное окно ControlClick для кнопки с назв. класса Button9 ControlClick ("Мастер нового оборудования","Для закрытия мастера", "Button9") ControlClick ( "title", "text", controlID [, button] [, clicks]] ) title - название окна кот. ожидает скрипт для продолжения работы, text - любой текст в этом окне, нужен если последующее окно после нажатия кнопки, имеет такой же заголовок controlID - собственно идентификатор button - какую кнопку использовать "left", "right" или "middle clicks - количество кликов Последнее что нужно сделать - снять блокировку с клавы и мышки. 'Снятие блокировка клавы и мышки BlockInput(0) После этого скрипт завершается, а алкоголик заканчивает установку. Теперь нужно проверить работу скрипта. Cоздаем бат-файл: Цитата alc.bat:
Если скрипт отлажен и проблем не возникает, для удобства можно скомпилировать его в .exe файл (содержит в себе утилиту autoit3.exe и скрипт .au3, кот. исполняется). Для этого можно воспользоваться утлитой Aut2Exe.exe (входит в комплект с дистрибутивом autoit3). Если нужно будет в последствии что-то изменить в скрипте, то полученный .exe файл можно будет конвертнуть назад в .au3 с помощью другой утилиты Exe2Aut.exe Что касается 2го способа установки, то просто приведу пример, установки Alcohol120%, кот. использую я Цитата alc120.vbs:
--------------------------------------------------------------------------------------------------- Разобранный здесь скрипт тестировался в vmware 4.5 на WinXP.rus SP2 |
|||||||
Отправлено: 02:12, 21-03-2005 |
Пользователь Сообщения: 125
|
Профиль | Отправить PM | Цитировать kovdaev
Выходит, я зря ехидничал? Тогда в порядке извинения: $hkey='HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' If RegRead($hkey,"NoNetCrawling")='0' Then msgbox(0,'','Задан "Автоматический поиск сетевых папок и принтеров"') Else msgbox(0,'','"Автоматический поиск сетевых папок и принтеров" не задан') EndIf Exit #cs [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Автоматический поиск сетевых папок и принтеров "NoNetCrawling"=dword:00000001 ;НЕ Автоматический поиск сетевых папок и принтеров "NoNetCrawling"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Восстанавливать прежние окна папок при входе в систему "PersistBrowsers"=dword:00000001 ;НЕ Восстанавливать прежние окна папок при входе в систему "PersistBrowsers"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState] ;Выводить полный путь в панели адреса "FullPathAddress"=dword:00000001 ;НЕ Выводить полный путь в панели адреса "FullPathAddress"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState] ;Выводить полный путь в строке заголовка "FullPath"=dword:00000001 ;НЕ Выводить полный путь в строке заголовка "FullPath"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] ;Использовать простой общий доступ к Файлам (рекомендуется) "forceguest"=dword:00000001 ;НЕ Использовать простой общий доступ к Файлам (рекомендуется) "forceguest"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Не кзшировать эскизы "DisableThumbnailCache"=dword:00000001 ;НЕ "Не кзшировать эскизы" "DisableThumbnailCache"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Открывать каждую папку в отдельном окне "SeparateProcess"=dword:00000001 ;НЕ Открывать каждую папку в отдельном окне "SeparateProcess"=dword:00000000 [HKСU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideMyComputerIcons] ;Отображать "Панель управления" в папке "Мой компьютер" "{21EC2020-3AEA-1069-A2DD-08002B30309D}"=dword:00000000 ;НЕ Отображать "Панель управления" в папке "Мой компьютер" "{21EC2020-3AEA-1069-A2DD-08002B30309D}"=dword:00000001 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Отображать описание для папок и элементов рабочего стола "ShowInfoTip"=dword:00000001 ;НЕ Отображать описание для папок и элементов рабочего стола "ShowInfoTip"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Отображать простой вид папок в списке папок "Проводника" "FriendlyTree"=dword:00000001 ;НЕ Отображать простой вид папок в списке папок "Проводника" "FriendlyTree"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Отображать сведения о размере Файлов в подсказках папок "FolderContentsInfoTip"=dword:00000001 ;НЕ Отображать сведения о размере Файлов в подсказках папок "FolderContentsInfoTip"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Отображать сжатые или зашифрованные Файлы NTF5 другим цветом "ShowCompColor"=dword:00000001 ;НЕ Отображать сжатые или зашифрованные Файлы NTF5 другим цветом "ShowCompColor"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Отображать содержимое системных папок "WebViewBarricade"=dword:00000001 ;НЕ Отображать содержимое системных папок "WebViewBarricade"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Помнить параметры отображения каждой папки "ClassicViewState"=dword:00000000 ;НЕ Помнить параметры отображения каждой папки "ClassicViewState"=dword:00000001 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Скрывать защищенные системные Файлы (рекомендуется) "ShowSuperHidden"=dword:00000000 ;НЕ Скрывать защищенные системные Файлы (рекомендуется) "ShowSuperHidden"=dword:00000001 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Скрывать расширения для зарегистрированных типов Файлов "HideFileExt"=dword:00000001 ;НЕ Скрывать расширения для зарегистрированных типов Файлов "HideFileExt"=dword:00000000 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] ;Не показывать скрытые Файлы и папки "Hidden"=dword:00000002 ;Показывать скрытые Файлы и папки "Hidden"=dword:00000001 [HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer] ;Показывать и обрабатывать пару как единый файл "NoFileFolderConnection"=dword:00000000 ;Показывать обе части и обрабатывать их отдельно "NoFileFolderConnection"=dword:00000001 ;Показывать обе части, но обрабатывать их как единый Файл "NoFileFolderConnection"=dword:00000002 #ce |
Отправлено: 19:20, 18-01-2006 | #301 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Сегодня вечером попробовал все работает.
Можно еще один вопрос по скрипту drweb? Сам вопрос: Если разрешение экрана самое низкое 800х640, стандартный драйвер windows, часть кнопок за пределами экрана и скрипт не работает, не приятно однако: сам скрипт: #cs ---------------------- Приложение: Dr.Web На какой(их) версии(ях) тестировалось: 4.33 Автор скрипта: Sanja Alone (http://forum.oszone.net/member.php?userid=28800) ---------------------- #ce ;предотвращение возможности множественного запуска скрипта If WinExists(@ScriptName) Then Exit AutoItWinSetTitle(@ScriptName) ;скрыть в системной панели индикатор AutoIt ;AutoItSetOption("TrayIconHide",1) ;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки. AutoItSetOption("TrayIconDebug", 1) If ProcessExists ( "ps.exe" )<>0 Then ProcessClose ( "ps.exe" ) ProcessWaitClose ( "ps.exe" ) EndIf ;нельзя блокировать при находящемся в памяти Punto Switcher-е - не будет работать установка ;блокируем мышь и клаву ;If @OSType="WIN32_NT" Then BlockInput ( 1 ) #cs ---------------------- объявление переменных ---------------------- $Title - заголовок окна установки $file - установочный файл $programgroup - в какую программную группу положить ярлыки программы $validkey - Легальный ключевой файл (положите его в любой подкаталог текущего, по ум это validkey) Для регистрации программы нужно положить файл drweb32.key в каталог из к-рого запускается установка, тогда файл-ключ будет скопирован в каталог DrWeb-а и программа будет зарегистрирована (если ключ подойдет). Это в идеале, но т.к. тихая установка в версии 4.33 не работает, и при обычной установке с правильным key-файлой запускается антивирусная проверка (к-рую нельзя отменить), то лучше положить в установочный каталог невалидный ключ, а "правильный" скопировать в каталог установленного DRWeb-а уже после завершения инсталляции. Файл setup.iss внутри этого архива - для версии 4.32b. Я дополнительно вложил в архив еще и setup.iss для 4.33 - может у кого-то, как-то получится заставить заработать тихую установку и для этой версии. ---------------------- #ce Global $Title='Установка Dr.Web', $file='drweb-433-win-ru.exe', $programgroup='Антивирусы\Dr.Web', $validkey=@ScriptDir & '\validkey\drweb32.key' Run ( @ScriptDir&'\'&$file ) WinWaitActive ( 'Dr.Web - InstallShield Wizard' ) Send("{ENTER}") WinWait ( $Title, 'Вас приветствует программа' ) WinActivate ( $Title, 'Вас приветствует программа' ) WinWaitActive ( $Title, 'Вас приветствует программа' ) Send("{ENTER}") WinWaitActive ( 'Внимание!!!' ) ;поставить галку "Да, на компьютере не установлено других антивирусных продуктов." ControlClick ( 'Внимание!!!', '', 'Button4' ) Send("{ENTER}") WinWaitActive ( $Title, 'Лицензионное соглашение' ) ;выбрать "Я &принимаю условия лицензионного соглашения" ControlClick ( $Title, 'Лицензионное соглашение', 'Button3' ) Send("{ENTER}") WinWaitActive ( $Title, 'Выбор папки назначения' ) ;по ум. C:\Program Files\DrWeb $InstPath = ControlGetText ( $Title, 'Выбор папки назначения', 'Static4' ) Send("{ENTER}") WinWaitActive ( $Title, 'Вид установки' ) ;Обычная Send("{ENTER}") WinWaitActive ( $Title, 'Выбор папки' ) ControlSetText ( $Title, 'Выбор папки', 'Edit1', $programgroup ) Send("{ENTER}") WinWaitActive ( $Title, 'Начало копирования файлов' ) Send("{ENTER}") AutoItSetOption("MouseCoordMode",2) WinWaitActive ( $Title, 'Настройки прокси сервера' ) MouseClick("left", 639, 472, 1, 0) ;это окно появляется только в сл. неподходящего key-файла WinWaitActive ( 'Вопрос', 'Не обнаружено коммерческого или демонстрационного ключевого файла' ) ControlClick ( 'Вопрос', 'Не обнаружено коммерческого или демонстрационного ключевого файла', 'Button2' ) ;и сразу идет переход к завершению установки WinWaitActive ( $Title, 'Программа InstallShield Wizard завершена' ) ;выбрать "Нет, перезагрузить компьютер позже." ControlClick ( $Title, 'Программа InstallShield Wizard завершена', 'Button2' ) Send("{ENTER}") Sleep ( 50 ) RunWait ( @Comspec & ' /C taskkill.exe /F /IM notepad.exe /IM spidernt.exe', '', @SW_HIDE ) ;копирование рабочего ключевого файла в каталог антивируса (если файл существует) If FileExists ( $validkey ) Then FileCopy ( $validkey, $InstPath & '\', 1 ) ;копирование дополнений к базе вирусов в каталог DrWeb-а (если они есть) If FileExists ( @ScriptDir & '\drw?????.vdb' ) Then FileCopy ( @ScriptDir & '\drw?????.vdb', $InstPath & '\drw?????.vdb', 1 ) FileCopy ( @ScriptDir & '\drw?????.txt', $InstPath & '\drw?????.txt', 1 ) EndIf ;удаление ярлыка с рабочего стола FileDelete ( @DesktopCommonDir & '\Сканер Dr.Web.lnk' ) ProcessWaitClose ( $file ) ;BlockInput ( 0 ) Может автор поправит, Это я к чему, может еще кому пригодиться. Заранее спасибо. |
Отправлено: 20:58, 18-01-2006 | #302 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать bogomolv
Цитата:
Я его попросту перепаковал InnoSetupом вместе со всеми ключами реестра и файлами, а установщик InnoSetup отлично поддерживает "тихие" ключи при инсталляции. В порядке "освоения" AutoIt хотелось понять из-за чего не работает вроде бы нормальный скрипт. А за ключи благодарствую - я оказывается "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\Punto Switcher 2.8" не включил в установщик, сейчас перекомпилирую. Спасибо, также Sanja Alone. То-то мне показалось, что батоны меняют номера. Значит такое действительно может быть. И за поправку "If WinExists(@ScriptName) Then Exit". |
|
Отправлено: 03:21, 19-01-2006 | #303 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать kovdaev
Цитата:
Цитата:
Цитата:
Цитата:
|
||||
------- Отправлено: 03:37, 19-01-2006 | #304 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать Предлогаю вот такое решение вопроса переключения языка клавиатуры.Основанное на функциях WinAPI.
Работать должно начиная с Win98. Opt("WinTitleMatchMode", 4) Run("notepad.exe") Sleep(500) $hWnd = WinGetHandle("classname=Notepad") _SetKeyboardLayout("00000409", $hWnd) Func _SetKeyboardLayout($sLayoutID, $hWnd) Local $WM_INPUTLANGCHANGEREQUEST = 0x50 Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0) DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, _ "int", $WM_INPUTLANGCHANGEREQUEST, _ "int", 1, _ "int", $ret[0]) EndFunc Exit |
Последний раз редактировалось ANGRO, 21-01-2006 в 12:57. Отправлено: 20:00, 19-01-2006 | #305 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Внес существенные изменения в свой конвертер crta (ConvRegToAu3)
2006-01-31
история изменений |
------- Последний раз редактировалось Sanja Alone, 01-02-2006 в 23:00. Отправлено: 01:10, 24-01-2006 | #306 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Добрый день ! У меня такая задача:
Есть несколько программ для загрузки прайс-листов разных поставщиков товара. Необходимо последовательно: запустить каждую из них, получить прайс-лист, закрыть программу, запустить следующую. Как я понял, с помощью AutoIt это сделать вполне реально. Теперь ВОПРОС: можно ли выполнить перечисленные действия так, что бы программы для загрузки прайс-листов запускались НЕВИДИМЫМИ, при условии, что все программы ведут диалог с пользователем (задаются вопросы с вариантами выбора типа "Обновить / Отмена" ??? Если можно, то начну разбираться с AutoIt. Напишите, пожалуйста, в общих чертах как это сделать, или посоветуйте - где об этом можно почитать. Спасибо. |
Отправлено: 08:09, 26-01-2006 | #307 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Добрый день!
Нужна помощь профи. Есть программа, управление которой я хочу автоматизировать при помощи AutoIt. Суть проблемы в том, чтобы узнать какого цвета пиксел в данной точке экрана, черный или белый? Есть ли в AutoIt методы "считывания" цвета пиксела в заданной точке? Заранее спасибо! |
Отправлено: 14:52, 26-01-2006 | #308 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать elakt
Цитата:
Цитата:
Цитата:
lemon76 Цитата:
|
||||
------- Отправлено: 05:43, 27-01-2006 | #309 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Спасибо за ответ! Теперь появились новые вопросы.
1. Запускаем блокнот в невидимом окне: Run("notepad.exe", "", @SW_HIDE) 2. Далее мне нужно дождаться, когда это окно появится. Среди стандартных команд не нашёл ту, которая дожидалась бы появления НЕВИДИМОГО окна, поэтому использовал команду задержки Sleep, что бы дождаться загрузки блокнота. ВОПРОС: можно ли решить эту задачу иначе? 3. После того, как блокнот загрузился, посылаю ему строку текста: ControlSend("Безымянный - Блокнот", "", "Edit1", "Send text to notepad") 4. Затем посылаю команду, которая в меню блокнота выбирает пункт "Выход": WinMenuSelectItem("Безымянный - Блокнот", "", "&Файл", "В&ыход") 5. После этого на экране появляется окно с вопросом "Сохранить изменения? Да/Нет/Отмена" - не смотря на то, что основное окно блокнота невидимо! Ответить на этот вопрос проблем не составляет, но... ВОПРОС: как избежать появления окна с вопросом на экране? То есть что бы оно, как и основное окно, было невидимым? Можно дождаться его появления и "спрятать" командой WinSetState, но в этом случае окно всё равно мелькнет на экране. Как быть? |
Отправлено: 09:12, 27-01-2006 | #310 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 |
|