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

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

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

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Widok



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

 
Описание:

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

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    REEAL_CrAzY

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, уважаемые. За время без интернета стало интересно следующее:
    1. Есть ли в AutoIT функции для Mozilla? (функцие вроде _IEget... для ИнтернетЭксплорера)
    2. Каким образом найти координаты чего-либо на экране (например у меня есть  окно, которое при каждом запуске открывается в разных местах. Нужно чтобы функция нашла координаты кнопки в этом окне. Каждый раз передвигать окно WinMove'ом - не вариант)
    3. Как в инпутбоксе или эдите форматировать текст? (чтобы при заполнени текушего рядка, все, что будет писаться далее писалось на рядок ниже.)  

    Всего записей: 42 | Зарегистр. 24-04-2011 | Отправлено: 00:17 24-04-2011 | Исправлено: REEAL_CrAzY, 00:24 24-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    REEAL_CrAzY
    1. FF.au3
    2. Вот

    Код:
    Run('calc.exe') ; запускаем калькулятор
    WinWait('[CLASS:SciCalc]', '', 5) ; ожидаем появление окна
     
    $wgp=WinGetPos('[CLASS:SciCalc]') ; получаем координаты окна
    $wgcs=WinGetClientSize('[CLASS:SciCalc]') ; получаем размер коиенской области
    $d1=($wgp[2]-$wgcs[0])/2 ; получаем поправку толщины границы окна справа
    $d2=$wgp[3]-$wgcs[1]-$d1 ; получаем поправку толщины заголовка окна
    $cgp=ControlGetPos('[CLASS:SciCalc]', '', '[CLASS:Button; INSTANCE:14]') ; получаем координаты элемента в клиенской области (кнопка 6)
    $X=$wgp[0]+$d1+$cgp[0] ; собственно координаты определяются сложением
    $Y=$wgp[1]+$d2+$cgp[1]
    MsgBox(0, 'Message', 'x= '&$X &@CRLF& 'y= '&$Y)

    3. Переход на новую строку 2 раза? Добавить &@CRLF&@CRLF к тексту

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 05:12 24-04-2011
    REEAL_CrAzY

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо большое за первый алгоритм. Но во втором @CRLF не подойдет. Неизвестно, сколько в этом поле будет текста. Может одна  буква, а может 1000. Все зависит от того, что внесут в переменную. А как я вставлю @CRLF в строку из переменной, если эта строка появляется из инпутбокса  
    $sT = inputbox (...)  
    GuiCtrlCreateInput ($sT,...)
    Как сделать, чтобы в поле ввода форматировался текст и переходил на новый рядок, когда заканчивается старый? В переменную @CRLF не получится вставить. Неизвестно ведь, юзе ввел 1 символ и @CRLF не надо, или ввел 500 символов и @CRLF надо.

    Всего записей: 42 | Зарегистр. 24-04-2011 | Отправлено: 10:50 24-04-2011
    madmasles

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

    Код:
    $sString = 'Спасибо большое за первый алгоритм. Но во втором @CRLF не подойдет. Неизвестно, сколько в этом поле будет текста. Может одна  буква, а может 1000. Все зависит от того, что внесут в переменную. А как я вставлю @CRLF в строку из переменной, если эта строка появляется из инпутбокса.'
    $iMaxLen = 33
    If StringLen($sString) > $iMaxLen Then
        $sString_1 = StringRegExpReplace($sString, '(.{' & Int($iMaxLen / 2) & ',' & $iMaxLen & '})\s', '$1' & @CRLF)
        $sString_2 = StringRegExpReplace($sString, '(.{' & $iMaxLen & '})', '$1' & @CRLF)
    EndIf
    MsgBox(0, '', $sString_1 & @CRLF & @CRLF & @CRLF & $sString_2)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 14:11 24-04-2011
    REEAL_CrAzY

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо вам. Есть еще вопрос: можно ли с помошью автоит создать файл с таким расширением, которое только автоит - прога сможет прочитать. В файл должен находиться текст.

    Всего записей: 42 | Зарегистр. 24-04-2011 | Отправлено: 17:54 25-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хочу сделать тестовую окно для стилей GUI, не пойму почему оно у меня виснет
    вот оно
    Смысл такой:
    Создаём массив $aStyle[5][3], который содержит имя примера и стили основной и расширенный. Когда мы кликаем на имя в ListBox то ищем в массиве одноимённый пример, а его индекс подставляем для получения стиля и применяем к текущему окну.
    Это позволит увидеть некоторые частоиспользуемые варианты стилей окна. Но проблема в том что окно виснет. Ставил MsgBox для проверки, индекс ввозвращается верный, а вот стили по какой то причине содержат несоответствующие числа (отрицательное).
     
    Обновил 1 раз (работает нормально, 6 стилей)

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 21:56 25-04-2011 | Исправлено: AZJIO, 07:18 26-04-2011
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 21:56 25-04-2011
    Цитата:
    Хочу сделать тестовую окно для стилей GUI, не пойму почему оно у меня виснет

    Кроме подвисания, у тебя там ещё несколько проблем, например, я не понял смысл Eval. Я уже не говорю об ошибке при запуске скрипта.
     
    Что касается проблемы с зависанием, попробуй добавить перед GUISetStyle... ещё один:
     

    Код:
    GUISetStyle(1, 1)

     
    но и в массиве тогда нужно поправить -1 на 0, т.к для GUISetStyle -1 ничего не делает, стили остаются прежними.
     
    P.S
    И для «Знак вопроса» нужен ещё и $WS_CAPTION.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:08 25-04-2011
    AZJIO



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

    Цитата:
    GUISetStyle(1, 1)
     
    помогло, $WS_CAPTION и "0" тоже учёл... Обновил пример выше, теперь работает как надо
     
    Вообще хочу сделать аналогичное с кнопками, чекбоксами, лейблами, чтоб можно было выбрать стиль из имеющихся известных вариантов. Ведь некоторые стили работают только в особой комбинации, и пока её не воспроизведёшь предполагаешь, что стиль не рабочий.
     
    Вот посмотри примеры что я хочу сделать examples.7z (13 примеров)
     

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 05:30 26-04-2011 | Исправлено: AZJIO, 07:20 26-04-2011
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Первый раз работаю с AutoIT. Подскажите, как можно открыть диалоговые окна через AutoIT и передать выбранные файлы/папки в cmd для дальнейшей обработки?

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 13:15 26-04-2011 | Исправлено: lorents, 13:16 26-04-2011
    AZJIO



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

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 13:58 26-04-2011
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Спасибо, сейчас гляну.
    А как можно передать выбранные файлы/папки в cmd для дальнейшей обработки?

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 14:01 26-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    То что возвращает функция (путь) передай через Run как параметр для cmd, а внутри cmd  принимает как переменная %1
     

    Код:
    $OpenFile = FileOpenDialog('Открыть', @WorkingDir , 'Конфигурационный (*.ini)')
    If @error Then
        Run(@ScriptDir&'\file.cmd Error')
    Else
        Run(@ScriptDir&'\file.cmd '&$OpenFile)
    EndIf

     
    если хочешь итеракцию сделать то сам копай StdoutRead, StdinWrite.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 14:19 26-04-2011 | Исправлено: AZJIO, 14:32 26-04-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents,
    Можно еще так попробовать:
    Код:
    #include <Array.au3>
    ;файлы:
    $sFiles = FileOpenDialog('Выберите файлы для отправки с помощью www.punypng.com', _
            '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}', 'Все (*.*)', 5)
    If Not @error Then
        If StringInStr($sFiles, '|') Then ;если выбрано несколько файлов
            $aFiles = StringSplit($sFiles, '|')
            $aFiles[0] = $aFiles[0] - 1 & ' - кол-во файлов'
            _ArrayDisplay($aFiles, 'Выбранные файлы') ;в ячейке $aFiles[1] - папка, дальше ($aFiles[2] - $aFiles[n]) - файлы
        Else
            MsgBox(64, 'Info', $sFiles)
        EndIf
    Else
        MsgBox(16, 'Error', 'Error')
    EndIf
    ;папки
    $sFolder = FileSelectFolder('Обзор папкок', '', 3)
    If Not @error Then
        MsgBox(64, 'Info', $sFolder)
    Else
        MsgBox(16, 'Error', 'Error')
    EndIf

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 14:30 26-04-2011
    Hatya

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Проблема была уже описана здесь пользователем sharka1 и была им решена, но в моем случае его решение не прокатило.
    Windows 7. При установке программы появляется окно "Безопасность Windows" (т.к. устанавливаемые драйверы неподписаны). Мне необходимо нажать кнопку "Все равно установить этот драйвер".
     
    Окно остается висеть, кнопка не нажимается.  Сначала был такой скрипт:
     
    #RequireAdmin
    WinActivate("Безопасность Windows","")  
    WinWaitActive("Безопасность Windows","")  
    ControlClick("Безопасность Windows","", "[CLASS:Button; INSTANCE:2]")  
     
    сократила до варианта sharka1, все равно не работает:
     
    #RequireAdmin
    WinWait("Безопасность Windows","")  
    Send("{ENTER}")
     
     

    Всего записей: 4 | Зарегистр. 26-04-2011 | Отправлено: 18:15 26-04-2011
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles, AZJIO
    Большое спасибо, сейчас посмотрю

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 21:11 26-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hatya
    Возможно остановка происходит, когда окно не найдено и происходит ожидание WinWait("Безопасность Windows","")
    Попробуйте с помошью Au3Info.exe определить параметра окна, чтобы точно идентифицировать. Желательно использовать класс окна, тогда не будет зависеть от локализации (языка системы) и амперсандов (&).
     
    Вообще лучше делать выход по таймауту, то есть если через 5 сек окно не появилось, то выход или сообщение. WinWait возвращает успешность или неуспешность появления окна. Это вдобавок выявляет причину ненайдено окно или Enter на на том элементе кликнут.
     

     
    Столкнулся с проблемой, в Win7 у меня не работает drag-and-drop в утилитах.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 14:15 27-04-2011 | Исправлено: AZJIO, 16:26 27-04-2011
    Hatya

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Окно "Безопасность Windows" появилось.  Запускаю вот такую проверку:
     
    #RequireAdmin
    If WinWait("[Class:#32770]","", 6)=0 then
        MsgBox(0,"","ожидание завершилось по окончанию таймаута")
    else  
        MsgBox(0,""," ожидание завершилось при появлении окна")
    endIf
    WinActivate("[Class:#32770]","")
    If WinActive ("[Class:#32770]","")=0 then
        MsgBox(0,"","Окно не активно")
    else  
        MsgBox(0,"","Окно активно")
    endIf
    В итоге сначала появляется сообщение, что " ожидание завершилось при появлении окна", потом окно появилось на переднем плане и выдается "Окно активно".
    Но ControlFocus, ControlClick на нужной кнопке не срабатывают (возвращают 0) . Send("{Tab}") ,Send("{Enter}")  тоже.
    Единственное, что я смогла получить - это координаты кнопки относительно окна. Т.е. ControlGetPos отработал.  
    http://img814.imageshack.us/img814/6027/10702757.png

    Всего записей: 4 | Зарегистр. 26-04-2011 | Отправлено: 16:25 27-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hatya
    1. На счёт [Class:#32770] точно не уверен, личноя пока отношусь к таким числам с недоверием, так как у многих окон они одинаковые. Может вернуть имя как раньше и проверить срабатывание.
    2. Лишнее WinActivate("[Class:#32770]","") не нужно, ControlClick вроде срабатывает и в не активном окне, а вот для Send нужно активность проверить. Тогда уж после WinActivate проверять WinWaitActive (ожидание активности окна). Далее скорее всего окно везде одинаковое и проще кликнуть мышкой по координатам, получить координаты окна WinGetPos, далее добавить к ним так чтоб кликнуть по цетнтру кнопки MouseClick. Ну или смотри второй пост сверху на этой странице, как точно кликнуть, если есть координаты кнопки.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 16:41 27-04-2011
    Hatya

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Вернула имя вместо класса - срабатывает так же. WinWaitActivate использовала - изменений нет. Проверила пример, описанный во втором сверху посте - на калькуляторе отлично работает, на окне "Безопасность Windows" не работает (координаты получает, нажатие мыши не отрабатывает)!   Надо вызывать дух sharka1, чтобы точно выяснить, как он решил эту проблему!

    Всего записей: 4 | Зарегистр. 26-04-2011 | Отправлено: 17:40 27-04-2011
    AZJIO



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

    Цитата:
    нажатие мыши не отрабатывает
    неотрабатывает нажатие вообще или на кнопке, чисто под клик если подсунуть другую кнопку. Или подскажи как безопасно имитировать это окно, а то у меня под рукой чужой комп с Win7 до завтра, я бы попробовал. Просто думаю придётся искать/качать драйвер без подписи, и чтобы он подходил к компу...
     
    К тому же вышеприведённый пример указывает угол кнопки, а надо кликать в центре, а то вдруг промах на один пиксел

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 18:31 27-04-2011 | Исправлено: AZJIO, 18:53 27-04-2011
       

    Страницы: 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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
    gyra (23-01-2020 10:51): AutoIT (Часть 4)


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru