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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    4kusnik



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

    Цитата:
    Не вижу связи, почему после Send("!y") нужно указывать место сохранения и т.п.?  
    Возможно требуется просто вывести диалог сохранения файла?

    Нет. Диалог сохранения файла уже выводится командой Send("!y"). Мне нужно в окне сохранения файла указать Имя файла и Путь сохранения файла. В некоторых случаях еще и тип файла (например JPEG или PNG).
     
    Вот скрипт открытия Блокнота, ввода текста TEST, закрытия Блокнота, выбора сохранения файла.

    Код:
    Run ("notepad.exe")
    WinWaitActive ("Untitled - Notepad")
    Send ("TEST")
    WinClose ("Untitled - Notepad")
    WinWaitActive ("Notepad", "The text in the Untitled file has changed")
    Send ("!y")

    Например, нужно сохранить этот файл под именем Test, в виде .txt, на диск С:\
     
    Попутно такой вопрос: как указать путь к .exe'шнику для запуска установки программы?

    Всего записей: 463 | Зарегистр. 09-03-2008 | Отправлено: 15:27 22-09-2008 | Исправлено: 4kusnik, 16:11 22-09-2008
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На четырех разных программах, которые я проверил, курсор стоит уже на строке, где надо писать имя файла. Поэтому мне кажется, что просто send("c:\test.txt{ENTER}")
     
    А насчет пути к программе, я вопрос не понял. Если надо в тексте программы иметь такой путь, то переменной - $install="c:\temp\install.exe", а потом run($install).

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 16:47 22-09-2008
    4kusnik



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hackproof разобрался. Спасибо.
     
    А как отключать галочки?
     


    Всего записей: 463 | Зарегистр. 09-03-2008 | Отправлено: 16:57 22-09-2008 | Исправлено: 4kusnik, 18:26 22-09-2008
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GUICtrlSetState($checkbox,$GUI_UNCHECKED) в своей программе.
    В другой надо узнать идентификатор галочки. К примеру IrfanView при открытии файла галочка на предв. просмотр - ControlClick("Open","","[ID:1804]").
    Я определяю ID программой Get&Set. В комплекте AutoIt тоже вроде было что-то похожее.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 19:13 22-09-2008
    4kusnik



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hackproof если не трудно объясни чуть подробнее и без макросов.  
     
    У меня вобщем в конце установки выходит окно в котором перед тем как нажать Finish нужно снять эту галочку (ту что на скрине).  

    Всего записей: 463 | Зарегистр. 09-03-2008 | Отправлено: 20:28 22-09-2008
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Качаешь Get&Set, нажимаешь кнопку Hook, наводишь на галочку, нажимаешь пробел и вписываешь ID в десятичной системе в вышенаписанную строку, не забыв про заголовок окна, где эта галочка появляется.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 02:00 23-09-2008
    Maza Faka



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

    Цитата:
    Качаешь Get&Set, нажимаешь кнопку Hook, наводишь на галочку

    А чем не устраивает AutoIt Window Info? И качать ничего не надо

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:25 23-09-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, вы можете подробно прокомментировать такой код (дали на офф. форуме). Интересуют те строки, что выделены жирным

    Код:
    #include <GuiConstantsEx.au3>
    #include <editconstants.au3>
    #include <windowsconstants.au3>
    $MainGui = GUICreate('test', 300, 150)
    $Label1 = GUICtrlCreateLabel("E-mail", 5, 10, 40, 17)
    $Input1 = GUICtrlCreateInput("sample@uknown.com", 50, 10, 150)
    $Email = GUICtrlRead($Input1)
    $SplitEmail = StringSplit($Email, "@")
    $Label2 = GUICtrlCreateLabel("SMTP", 5, 40, 40, 17)
    $Input2 = GUICtrlCreateInput("smtp." & $SplitEmail[2], 50, 40, 150)
     
     
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND");only used for EN_CHANGE so far
     
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                Exit
     
        EndSelect
    WEnd
     
     
     
    Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
        Local $AtPos, $s1
        $nNotifyCode = BitShift($iwParam, 16)
        $nID = BitAND($iwParam, 0x0000FFFF)
        $hCtrl = $ilParam
         
        If $nNotifyCode = $EN_CHANGE Then
            If $ilParam = GUICtrlGetHandle($Input1) Then
                $s1 = GUICtrlRead($Input1)
                $AtPos = StringInStr($s1, '@')
                If $AtPos Then
                    GUICtrlSetData($Input2, "smpt." & StringRight($s1, StringLen($s1) - $AtPos))
                EndIf
            EndIf
             
        EndIf
     
        Return $GUI_RUNDEFMSG
         
     
    EndFunc  ;==>WM_COMMAND

    Мне действительно нужно разобраться с тем как работать с данными в инпутах "на лету". А в справке про все эти $WM_COMMAND $EN_CHANGE $GUI_RUNDEFMSG и т.д. ну просто ничего нет.  
     
    Добавлено:
    Visitor, и будет у меня к тебе еще просьба. В этом коде что ты мне дал есть баг - если, например в окне $ChildGui_2 удалить всё в любом из инпутов, то появится крестик и кнопка "Далее" станет недоступна. Это так и должно быть. Однако, если вернуться назад и потом снова вперед на $ChildGui_2, тогда крестик горит, а "Далее" доступна. Поправь, пож.; я похоже не в состоянии. Ресурсы, необходимые для работы скрипта здесь

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 14:35 23-09-2008 | Исправлено: Tipulatoid, 15:16 23-09-2008
    Maza Faka



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

    Цитата:
    вы можете подробно прокомментировать такой код

    Функция GUIRegisterMsg() регистрирует функции пользователя для определённых Windows-сообщений. После регистрации, функция вызывается системой. В твоём примере происходит регистрация функции для сообщения WM_COMMAND. Это сообщение обрабатывает уведомления поступившие от control-а Input, такие, как обновление текста, установка/потеря фокуса и т.д. В данном примере ты обрабатывешь уведомление $EN_CHANGE, которое поступает при обновлении текста в control-е Input. И всё это обрабатывается системой, что очень удобно. Константу $GUI_RUNDEFMSG нужно возвращать для того, что бы, как можно быстрее выйти из CallBack функции и продолжить работу скрипта.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:49 23-09-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Cпасибо. Более-менее проясняется. А что содержится в параметрах  ($hWnd, $imsg, $iwParam, $ilParam) ?
    И что происходит здесь BitShift($iwParam, 16) и здесь BitAND($iwParam, 0x0000FFFF) В справке это есть, но я просто не понимаю, что такое "битовый сдвиг числа" и "побитовое логическое умножение"  

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 17:12 23-09-2008 | Исправлено: Tipulatoid, 17:16 23-09-2008
    Maza Faka



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

    Цитата:
    А что содержится в параметрах  ($hWnd, $imsg, $iwParam, $ilParam) ?

    $hWnd - Handle окна, в нашем случае handle главного окна.
    $imsg - Сообщение, в нашем случае WM_COMMAND
    $iwParam и $ilParam - параметры, содержимое которых зависит от сообщения. Для сообщения WM_COMMAND содержимое параметров будет таким:  
    $iwParam - Старшее слово BitShift($iwParam, 16) - код уведомления
    $iwParam - Младшее слово BitAND($iwParam, 0x0000FFFF) - идентификатор контрола.
    $ilParam - Handle контрола.
     
    MSDN

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:13 23-09-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Да, в общих чертах ясно. Thanks

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 19:10 23-09-2008 | Исправлено: Tipulatoid, 19:12 23-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid 14:35 23-09-2008
    Цитата:
    В этом коде что ты мне дал есть баг

    Там есть много багов, я же написал что это только как пример, я не могу поправить этот скрипт, у тебя позже всплывут другие проблемы (с этим скриптом), это гарантированно. Там нужно просто каким-то способом проверять все инпуты, и соответственно выполнять действия (включение/отключение кнопок и т.д.).
     
    Добавлено:
    Maza Faka 16:49 23-09-2008
    Цитата:
    Функция GUIRegisterMsg() регистрирует функции пользователя....

    Добавил это описание в шапку, пусть будет, думаю не раз ещё будут спрашивать

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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Т.е. я правильно тебя понял, что проще переписать Мастер по типу второго предложенного тобой варианта, когда все элементы GUI рисуются в одном окне; ненужные на данном шаге скрываются. И кнопку "Далее" отключать по двум условиям - если такой-то инпут видим и если в нем ничего нет - отключить "Далее"; иначе - включить?

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 01:45 24-09-2008 | Исправлено: Tipulatoid, 01:46 24-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid 01:45 24-09-2008
    Цитата:
     проще переписать Мастер по типу второго предложенного тобой варианта, когда все элементы GUI рисуются в одном окне

    Да, заодно попрактикушь новые знания

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:48 24-09-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите почему такая функция ничего не выводит в консоль
    Код:
    Func _CheckIcons ()
       If $iStep = 2 Then
          If GUICtrlGetState ($WIcon2_3_1) = $GUI_SHOW Then
             ConsoleWrite ("crestik viden")
          EndIf
       EndIf
    EndFunc

    а такая нормально отрабатывает
    Код:
    Func _CheckIcons ()
       If $iStep = 2 Then
          If GUICtrlGetState ($WIcon2_3_1) = 80 Then
             ConsoleWrite ("crestik viden")
          EndIf
       EndIf
    EndFunc

     
    Добавлено:
    PS Форум у всех глючит или у меня одного только?

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 05:19 24-09-2008
    Maza Faka



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

    Цитата:
    Добавил это описание в шапку, пусть будет, думаю не раз ещё будут спрашивать

    Ага, спасибо. Кстати, в шапке это опечатка или я не так понял?

    Цитата:
     
    Отдельный функции (UDF):
     

     
    Tipulatoid

    Цитата:
    Подскажите почему такая функция ничего не выводит в консоль

    Проверяй так:

    Код:
     
    If BitAND(GUICtrlGetState($WIcon2_3_1), $GUI_SHOW) Then ...
     

     

    Цитата:
    PS Форум у всех глючит или у меня одного только?

    Угу, у меня тоже бывает.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:46 24-09-2008
    Tipulatoid



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

    Цитата:
    If BitAND(GUICtrlGetState($WIcon2_3_1), $GUI_SHOW) Then ...
    Работает!
    Приведите плиз пример простенького GUI с одним CheckBox - ом чтобы при выделении его в консоль выводилось "Checkbox checked", при снятии - "Checkbox unchecked" Необходимо знать какие сообщения и уведомления здесь применимы.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 13:34 24-09-2008 | Исправлено: Tipulatoid, 13:36 24-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 07:46 24-09-2008
    Цитата:
    в шапке это опечатка

    Да, это я в начале что-то другое хотел написать - Поправил, спасибо.
     
    Tipulatoid 13:34 24-09-2008
    Цитата:
    пример простенького GUI с одним CheckBox - ом чтобы при выделении его в консоль выводилось "Checkbox checked", при снятии - "Checkbox unchecked"

    Вот:
     

    Код:
    #include <GuiConstants.au3>
     
    $GUI = GUICreate("Test Script", 300, 200)
     
    $Checkbox = GUICtrlCreateCheckbox("Checkbox", 20, 40)
     
    GUISetState(@SW_SHOW, $GUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case
    $Checkbox
                If BitAND(GUICtrlRead($Checkbox), $GUI_CHECKED) Then
                    ConsoleWrite("Checkbox checked" & @LF)
                Else
                    ConsoleWrite("Checkbox unchecked" & @LF)
                EndIf
        EndSwitch
    WEnd


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:11 24-09-2008
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, а как вы в автоите пишете регулярное выражение, когда надо учесть начало (или конец) всего выражения для поиска в нем? Я придумал для этого только использование условий. Для начала: "(?<!.)рег. выр." , для конца: "рег. выр.(?!.)" - т.е. нету никакого символа до/после. А как нужно "по-настоящему"? Ато вдруг когда-то такое не сработает (точка вроде не совсем все обозначает).

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 16:04 24-09-2008
       

    Страницы: 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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru