Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)

Модерирует : gyra, Maz

Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

   

AddXL

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

AutoIt3

 
Домашняя страница: http://www.autoitscript.com
Страница загрузки: http://www.autoitscript.com/autoit3/downloads.php
 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя - симуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши и управления окнами и его визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Справочник по командам rundll32
  • Русский справочник по API-функциям
  • Помощь по Регулярным выражениям
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf)
     
    Инструметы для AutoIt:
  • AutoIt3Wrapper [Страница закачки] - Программа для компилляции скрипта с дополнительными возможностями (добавление иконки, описании и т.п).
  • Koda (724 Kb) - Визуализация работы с GUI - аналог Visual Basic.
  • CodeWizard (400 Kb) - нечто простенькое на вариант Koda.
  • AutoItMacroGenerator (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt код.
  • ScriptWriter (78 Kb) - Аналог AutoItMacroGenerator.
  • API Constants (1042 Kb) - Утилита для просмотра всех констант API-Функции и не только.
  • Страница закачки утилит которые идут в отдельной поставке редактора SciTE.
  • AutoIt меню для браузера Opera
     
    Готовые скрипты и программы с открытым кодом на AutoIt:
  • Коллекция AutoIt скриптов от Sanja Alone
  • Коллекция скриптов на http://msfn.org
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Desktop Icons Restorator - Скрипт-Программа для сохранения/восстановления позиции иконок р.стола.
  • CaptureIt - Утилита предназначена для захвата изображений с вашего экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста
  • Скрипт расскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger)
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значёк в области уведомления)
  • Пример создания своего мастера (Wizard)
  • Метод позволяющий запускать код VBS не создавая временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за б.обмена с заменой неподдерживаемых в имени файла символов
  • Пример использования меню с иконками (ModernMenu.au3) -> Список программ в меню значка в системном трее
     
  • Как по PID процесса вычислить путь запускаемого файла
  • Получение IP по подключенному сокету
     
    Отдельные функции (UDF):
  • Функции Отключения/Подключения к Интернету
  • Функция проверки подключения к Интернету
  • Функция для получения структуры директории включая подкаталоги
  • Функция для поиска в файлах
  • Функция для смены разрешения экрана
  • Функция для смены раскладки клавиатуры в определённом окне
  • Функция для получения списка процессов с допол. инфой (путь к исполняемому файлу и др.)
  • Функции и пример для отображения детального процесса закачки файла
  • Функция (и пример использования) для отображения стильного диалога “О Программе” - [Усовершенствованная версия]
  • Функция возвращает пронумерованный список всех классов определённого окна + функция получения хендлов для этих классов
  • Функция для получения заголовка окна (или его идентификатора) по ID процесса (PID)
  • Функция _StringIsUTF8Format() + _StringToUTF() - Первая проверяет если строка содержится в UTF-8 формате, вторая преобразовывает строку в UTF-8 формат
  • Функция _FileOpenDialogEx - Возвращает массив (или строку) с полными путями к выбранным файлам
  • _AU3_Lib* Функции - Предназначены для обработки подключаемых библиотек через #include
  • Функция транслитерации строки
  • Расширенная библиотека для работы с реестром
     
    За шапкой следит ViSiToR  

  • Всего записей: 6 | Зарегистр. 24-11-2005 | Отправлено: 13:20 24-11-2005 | Исправлено: Maz, 11:50 17-04-2017
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо, что нашёл время просмотреть мой скрипт.  
       
        Ошибку свою понял:
    Цитата:
    Если выражение справедливо, то выполняются все следующие за ним команды вплоть до следующего выражения Case или EndSelect. Если окажутся справедливыми несколько выражений Case, то будут выполнены команды только первого из них.

       Просто хотелось без If...Then..., что бы код покрасивее был.Подробнее...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:20 21-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    Я не понимаю зачем ты настаиваешь проверять нажатие чекбоксов в реалдьном времени?
     
    Это замедляет работу скрипта раз, нагружает память два, не даёт никакого эффекта три, и лишний код в скрипте четыре
     
    У тебя также проверяется на выход с цикла, можно и покороче...
     

    Код:
    Case $msg = $cancel  
              ExitLoop  
    Case $msg = $Gui_Event_Close  
            ExitLoop

     
    Это можно проверить в одном Case...
     

    Код:
    Case $msg = $cancel Or $msg = $Gui_Event_Close
              ExitLoop

     
    Лишний код, это лишняя работа для интерпритатора, и для всей программы в случае компиляции скрипта.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 11:36 21-07-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR

    Цитата:
    Я не понимаю зачем ты настраиваешь проверять нажатие чекбоксов в реальном времени?

     
    Да, знаю, что неудачно организована проверка, просто не знаю, как проверять нажатие чекбоксов, если например пользователь отметил чекбокс, а потом снял отметку с этого чекбокса, вот и проверяется нажатие чекбокса в момент нажатия элемента "OK"
       Подкинь идею, как можно реализовать всё это красиво.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:03 21-07-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka

    Цитата:
    Подкинь идею, как можно реализовать всё это красиво.

    А почему-бы просто не использовать режим OnEvent ?
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:38 21-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka

    Цитата:
     Подкинь идею

    Это шутка? - Ты видмо мой пример не смотрел?
     
    Я там сократил твой код почти вдвое, и всё попрежнему функционирует как ты это задумал ...
     
    Чекбоксы проверяем ТОЛЬКО после нажатии кнопки $Ok, т.е нет необходимости проверять их налету (в данном случае), просто по нажатию ОК проверяем значение (состояние) чекбоксов (If GuiCtrRead($CheckBoxID) = $GUI_CHECKED Then ...).
     
     
    И как посоветовал NIKZZZZ, ещё более удобнее использовать OnEvent метод (смотри в справке Opt("GuiSetOnEventMode", 1), хотя в данном случае можно и без него.


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:31 21-07-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR

    Цитата:
    Ты видимо мой пример не смотрел?

     
    Спасибо, теперь понял, что в моём примере происходит постоянный опрос чекбоксов, что не есть хорошо для производительности, а в твоём опрос происходит только один раз, во время нажатия элемента "OK", я поначалу просто не вкурил твой пример, думал, что там тоже происходит постоянный опрос чекбоксов, как видно ошибся из-за невнимательности.
     
    NIKZZZZ

    Цитата:
    А почему-бы просто не использовать режим OnEvent ?

    Да, попробую, о результатах отпишусь.
     
    Добавлено:

    Цитата:
    У тебя также проверяется на выход с цикла, можно и покороче...  
     
    Код:Case $msg = $cancel  
              ExitLoop  
    Case $msg = $Gui_Event_Close  
            ExitLoop  
     
    Это можно проверить в одном Case...  
     
    Код:Case $msg = $cancel Or $msg = $Gui_Event_Close  
              ExitLoop

     
    Интересно, а почему такая конструкция не работает при использовании "Switch"

    Код:
     
    Case $cancel Or $Gui_Event_Close
    ExitLoop
     

    Заработало только так:

    Код:
     
    Case $cancel, $Gui_Event_Close
    ExitLoop
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:18 21-07-2007 | Исправлено: Maza Faka, 18:30 21-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka

    Цитата:
    почему такая конструкция не работает при использовании "Switch"

    Потому что так задуманно разработчиками
    Switch нужен когда используется одна и таже переменная для сравнения, а обычный Select когда нужно выбрать одно действие из многих условии.
     


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:19 22-07-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR

    Цитата:
    И как посоветовал NIKZZZZ, ещё более удобнее использовать OnEvent метод

    Накарябал с использованием GuiOnEventMode, посмотри плз, так сойдёт?
       Сокращённый вариант кода Подробнее...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:08 22-07-2007
    Koppew



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вобщем ничего не понимаю нужна помощь...
     
    хотел через AutoIt распаковывать rar-архивы, используя unrar.dll... залез на оф.форум, нашел ветку
    там не было предложено решения для AutoIt...
     
    я бы хотел попросить местных мудрецов посмотреть скрипт для AutoIt и описание unrar.dll
     
     
    описание unrar.dll
     
    скрипт AutoIt
     
    в скрипте проблема с вызовом RARReadHeader()
     
    просто интересно, с чем может быть связана ошибка? и как все же сделать нормальный вызов unrar.dll из скрипта AutoIt
     
    ЗЫ на OsZone неподъемная ветка про AutoIt у меня даж поиск отказывался искать...

    Всего записей: 36 | Зарегистр. 14-09-2005 | Отправлено: 14:02 23-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka

    Цитата:
    так сойдёт?

    Конечно, лучше не может и быть    
     
     
    Koppew

    Цитата:
    хотел через AutoIt распаковывать rar-архивы, используя unrar.dll

    Так критично используя unrar.dll? есть и другие, более надёжные средства распаковки и упаковки архивов, например, консольная утилита 7z.exe не требующая никаких установленных приложении в системе

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:09 23-07-2007
    Koppew



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    дык и винрар можно из консоли пользовать но тут уже просто азарт а потом мне для задачи нужна только распаковака... и возможно у меня кривые руки, но мне показалось, что рар сжимает лучше 7зип... но опять-таки с настройкой 7зип не разбирался... а у рара просто указал - максимальное сжатие сжимал *.mdb...
     
    так значит пациент скорее мертв?

    Всего записей: 36 | Зарегистр. 14-09-2005 | Отправлено: 18:34 23-07-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Koppew
    Ну , одна ошибка видна - значение функции возвращается в нулевом элементе масива. Например:

    Код:
    $rar_handle = DllCall("E:\progz\Unrar\unrar.dll","int","RAROpenArchive","ptr",DllStructGetPtr($rar_open_str))
    $rar_header = DllCall("E:\progz\Unrar\unrar.dll","int", "RARReadHeader", "int", $rar_handle[0], "ptr", DllStructGetPtr($rar_header_str))  

     
    Дальше пока не разбирался.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:34 23-07-2007
    Koppew



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    не... не хочет

    Всего записей: 36 | Зарегистр. 14-09-2005 | Отправлено: 19:52 23-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Koppew

    Цитата:
    мне показалось, что рар сжимает лучше 7зип

    Неа
     

    Цитата:
    мне для задачи нужна только распаковака

    Тогда зачем тебе максимальное сжатие?
     
    Скачай консольную утилиту 7za.exe, и запусти этот скрипт (положив его в папку с 7za.exe):
     

    Код:
     
    $ExtractPath = @ScriptDir & "\Test_Extract"
    $ArchivePath =  @ScriptDir & "\MyArchive.zip"
     
    Run('7za.exe x "' & $ArchivePath & '" -aoa -y -o"' & $ExtractPath & '"', @ScriptDir, @SW_HIDE)
     

     
    Добавлено:
    Koppew

    Цитата:
    и винрар можно из консоли пользовать

    Да, но 7zip свободен для распостранения - а у Rar строгая лицензия.

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 21:06 23-07-2007 | Исправлено: ViSiToR, 21:08 23-07-2007
    Koppew



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    хорошо пока я еще не так далеко зашел с накоплением своей базы я могу еще перейти на 7зип... но все же хотелось бы видеть, что он сжимает лучше рара ведь для того, чтоб распаковывать я сначала архивирую просто архивирую я по одному файлу в день (практически вручную), а распаковывать для обработки мне нужно много файлов
     
    поэтому наверно оффтоп, где посмотреть про настройки (параметры) 7зипа для сжатия не менее эффективно, чем винрар на уровне максимального сжатия?
     
    по теме - предложенный скрипт отлично работает но с зипом

    Всего записей: 36 | Зарегистр. 14-09-2005 | Отправлено: 21:30 23-07-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Koppew

    Цитата:
    где посмотреть про настройки (параметры) 7зипа для сжатия  

    Настройки - в хелпе 7z, сравнение с другими здесь.
     
    По поводу rar.dll  

    Код:
    $dll=DllOpen("unrar.dll")
    $rar_handle = DllCall($dll,"int","RAROpenArchive","int",DllStructGetPtr($rar_open_str))
    do
      $rar_header = DllCall($dll,"int", "RARReadHeader", "ptr", $rar_handle[0], "ptr", DllStructGetPtr($rar_header_str))
      $rar_ext = DllCall($dll, "int", "RARProcessFile", "ptr", $rar_handle[0], "int_ptr", $RAR_EXTRACT,"ptr","", "ptr", "")
    until $rar_header[0] <> 0
    $rar_close = DllCall($dll, "int", "RARCloseArchive", "ptr", $rar_handle[0])
    DllClose($dll)

    Ошибок не выдает, но и результата тоже.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:48 23-07-2007 | Исправлено: NIKZZZZ, 22:06 23-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Koppew

    Цитата:
    где посмотреть про настройки (параметры) 7зипа для сжатия

    В справке как ни странно (в архиве по ссылке что я тебе дал)...
     
    Кстати, через 7zip можно архивировать по списку..
     
    Вот пример архивирования с максимальной степенью сжатия:
     

    Код:
     
    $ListFile = "List.tmp"
    $ArchivePath =  @ScriptDir & "\MyArchive.zip"
     
    $OpenListFile = FileOpen($ListFile, 2)
     
    FileWriteLine($OpenListFile, @WindowsDir & "\Notepad.exe")
    FileWriteLine($OpenListFile, @ScriptDir & "\7za.exe")
    FileClose($OpenListFile)
     
    Run('7za.exe a -mx=9 -t7z -scsWIN  -m0=BCJ -m1=LZMA:d=21 -ms -mmt -- "' & $ArchivePath & '" @' & $ListFile, @ScriptDir, @SW_HIDE)
     

     
    Эти же файлы паковал через Winrar, при использовании Rar (по максимому) получаю 231 kb, при использовании Zip 260, а вот используя метод в скрипте, получаю 206 kb
     
    Добавлено:
    P.S
    почти в 3 раза ужал оригинальный размер

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:02 23-07-2007 | Исправлено: ViSiToR, 22:03 23-07-2007
    Koppew



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    ГЫ получилось но только после того, как сложил все в одну директорию
     
    ViSiToR
    буду вкуривать в 7зип
     
    NIKZZZZ
    ViSiToR
    спасибо огромное за поддержку
     
    ну вобщем вот, что получилось в конце концов со скриптом для unrar.dll (хотя наверно моего вклада тут особо и нет )
     
    скрипт
     
    вобщем к структуре хедера обращается нормально, так что скрипт можно расширять и дальше для работы
     
    Добавлено:
    провел независимое расследование... архивировал 20тиметровый mdb-файл (21 467 136 байт)... 7зип с параметрами, предложенными ViSiToR, проиграл винрару около 200 кб (7зип - 2 234 976 байт, рар - 2 049 374 байта)
     
    ну и чтоб это совсем не было оффтопом архивировал 7зип с помощью скрипта ViSiToR

    Всего записей: 36 | Зарегистр. 14-09-2005 | Отправлено: 23:48 23-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    пример архивирования с максимальной степенью сжатия

    Возможно я ошибся, возможно это не максимальная степень - но если честно нет особо времени вникать в эти детали
     
    Так что пусть винрар будет лидером!

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:28 24-07-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Koppew
    Там в конце скрипта желательно dll закрыть -  DllClose($dll).

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 02:47 24-07-2007
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)
    Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru