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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Он хорош также, но в нем нет фишек типо getpixelcolor, if,then else и другие условия. Просто я уверен если воплотить функционал autoit с WYSIWYG like редактором как в Jitbits будет просто нереально круто. Т.к простые пользователи вроде меня, которые ничего не понимают в програмирование, испытывают сложности.
     
    У A4tech есть неплохой редактор макросов но сами мыши  ужасного качества, но и там нет getpxl color итд
     
    Такие дела.

    Всего записей: 7 | Зарегистр. 27-04-2011 | Отправлено: 14:15 12-01-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть программа, которая генерирует текстовый файл.
    Надо запустить ее и потом скопировать содержимое готового файла в буфер обмена.
    Делаю так: открываю блокнотом и как бы копирую, но выглядит не кузяво.
     
    ;run notepad
    ShellExecute("Notepad.exe", "D:\pattern.txt")
    WinWaitActive("pattern.txt — Блокнот")
    ; copy to clipboard
    Send("^a")
    Sleep(50)
    Send("^c")
    WinClose("pattern.txt — Блокнот")
     
    Можно как-то более правильно сделать?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 14:35 12-01-2012
    NIKZZZZ



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

    Код:
    RunWait("Прога.exe")
    ClipPut(FileRead("D:\pattern.txt"))  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:23 12-01-2012
    RIG9

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

    Всего записей: 7 | Зарегистр. 27-04-2011 | Отправлено: 15:26 12-01-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Спасибо, про ClipPut знал, а как вернуть содержимое файла в строку не знал
     
    Еще один вопрос.
    Прога эта требует заполнения разных параметров, и один из шагов такой:
    нажать на кнопку, откроется диалоговое окно, надо выбрать файл.
    В скрипте делаю это так:
     
    WinWaitActive("Select file to Import")
    Sleep(150)
    Send("TextCrawler_dictionary.txt")
    Send("{ENTER}")
     
    Вот этот Sleep(150) нужен, потому что иногда первые 1-2 буквы почему-то откусываются
    и получается
    Файл "xtCrawler_dictionary.txt" не найден
     
    Во-первых, не понятно, почему откусываются  
    Во-вторых, и это не решает проблему полностью - гораздо реже, но ситуация все равно происходит
     
    Кроме увеличения таймаута, по-другому нельзя это решить?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 15:53 12-01-2012
    NIKZZZZ



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

    Цитата:
     по-другому нельзя это решить?  

    Можно.
    ControlSetText или ControlSend более корректны.
     
    RIG9

    Цитата:
    но в нем нет фишек типо getpixelcolor, if,then else и другие условия.

    Это и вручную добавить можно в готовый скрипт.
    Ну а сделать подобный редактор, можно конечно, но не вижу смысла.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:45 12-01-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Не получается у меня. Вот Window Info для стандартного windows-диалога:
     
     
    Надо послать текст в поле в красной рамке
     
    Пробовал  варианты:
    ControlSend("Select file to Import", "", "[CLASS:ComboBox; INSTANCE:1]", "TextCrawler_dictionary.txt")
    ControlSend("Select file to Import", "", "[CLASSNAMENN:ComboBox1; INSTANCE:1]", "TextCrawler_dictionary.txt")
    ControlSend("Select file to Import", "", 1148, "TextCrawler_dictionary.txt")
     
    Ни один не работает, текст не вводится, скрипт в этом месте ждет
     
    В этот комбобокс вставлен еще Edit. Пробовал посылать текст в него - тоже не работает.
    Подозреваю, дело в том, что это не тот контрол.  
    Ввел слово Example руками, поле Text все равно пустое (тоже обвел рамкой), хотя должно быть "Example"
     
    Я вообще в правильном направлении пошел?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 18:42 12-01-2012 | Исправлено: XPerformer, 18:43 12-01-2012
    RIG9

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Смысл в удобстве, том что можно за 5 мин не копаясь в коде получить резльтат. Чем же это плохо?
     
    это как линукс и винда, кому то нравиться копаться и настраивать, а кто то просто хочет запустить и пользоваться и в глаза код не видеть.

    Всего записей: 7 | Зарегистр. 27-04-2011 | Отправлено: 18:54 12-01-2012 | Исправлено: RIG9, 18:57 12-01-2012
    NIKZZZZ



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

    Цитата:
    дело в том, что это не тот контрол.  

    Да. Посылать надо в Edit.
    И еще, лучше так

    Код:
    $hProga=Run("Proga.exe")  
    ProcessWait($hProga)
    ControlSend($hProga,...)  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:08 12-01-2012 | Исправлено: NIKZZZZ, 19:08 12-01-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Edit -таже история
     
     
    код
    WinWaitActive("Select file to Import")
    ControlSend("Select file to Import", "", "[CLASS:Edit; INSTANCE:1]", "TextCrawler_dictionary.txt")
    - не работает
     
    При этом на кнопку в окне нажать получается:
    WinWaitActive("Select file to Import")
    ControlClick("Select file to Import", "", "[CLASS:Button; INSTANCE:1]")
    - работает
     
     
     
    Добавлено:
    По-другому к решению задачи нельзя подойти?
    Скажем, имитировать двойной клик на имени файла... Только это еще хуже, чем через буфер клавиатуры

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 19:20 12-01-2012
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer
     
    Возможно, нужно подождать, пока не появится нужное окно Edit с помощью

    Код:
    ControlGetHandle($hProga, "", "Edit")

     
     
    Добавлено:

    Цитата:
    имитировать двойной клик на имени файла

    Ну, это уж совсем не правильно.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:47 12-01-2012
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer,
    Попробуйте так.
    Код:
    $sFile = @DesktopDir & '\TextCrawler_dictionary.txt';полный путь к файлу
    $hWin = WinWait('[Title:Select file to Import; Class:#32770]', '', 5)
    If Not $hWin Then
        MsgBox(16, 'Error', 'WinWait')
        Exit
    EndIf
    ControlSetText($hWin, '', '[CLASS:Edit; INSTANCE:1]', $sFile)
    ;...

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 20:03 12-01-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Не помогло
     
    madmasles
    Ошибку не выдает, но и контрол текстом не заполняется
     
    Вставил перед
    $sFile = @DesktopDir .......
    задержку Sleep(200) - заработало!
    Видно, есть какая-то специфика создания этого диалога, поэтому и SendKey не всегда срабатывал...
    Может, какие-то невидимые окна создаются и фокус на время перехватывают...
     
    Ребята, спасибо за помощь
     
     
     
    Добавлено:
    Для общего развития хотелось бы все-таки понять:
    запросил окно два раза с паузой между ними, по идее должен получить один и тот же хендл? Или я ошибаюсь?
     
    $hWin1 = WinWait('[Title:Select file to Import; Class:#32770]', '', 5)
    If Not $hWin1 Then
         MsgBox(16, 'Error', 'WinWait')
         Exit
    EndIf
     
    Sleep(200)
     
    $hWin = WinWait('[Title:Select file to Import; Class:#32770]', '', 5)
    If Not $hWin Then
         MsgBox(16, 'Error', 'WinWait')
         Exit
    EndIf
     
    msgbox(16,'error', $hWin1 & $hWin)
     
    На практике выдает два разных числа.

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 20:40 12-01-2012
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer,
    Цитата:
    Вставил перед  
     $sFile = @DesktopDir .......  
     задержку Sleep(200) - заработало!
    Может тогда так?
    Код:
    $sFile = @DesktopDir & '\TextCrawler_dictionary.txt';полный путь к файлу
    ;...
    $hWin = WinWait('[Title:Select file to Import; Class:#32770]', '', 5)
    If Not $hWin Then
        MsgBox(16, 'Error', 'WinWait')
        Exit
    EndIf
    For $i = 1 To 5
        Sleep(200)
        $hEdit = ControlGetHandle($hWin, '', '[CLASS:Edit; INSTANCE:1]')
        If $hEdit Then ExitLoop
    Next
    If Not $hEdit Then
        MsgBox(16, 'Error', 'ControlGetHandle')
        Exit
    EndIf
    ControlSetText($hWin, '', $hEdit, $sFile)
    ;...


    Цитата:
    по идее должен получить один и тот же хендл
    У Вас какое-то хитрое окно, у меня с любыми окнами, которые нашел, одно и то же значение, ИМХО, как и должно быть.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 20:51 12-01-2012 | Исправлено: madmasles, 20:58 12-01-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    If $hEdit Then ExitLoop
    Как я понял на данный момент, контрол есть и он даже заполняется, но в другом окне, которое я не вижу
    Так что это условие всегда истинно
    Как различать то старое окно, которое вот-вот разрушится, и новое, куда надо писать, я пока не понял

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 20:57 12-01-2012
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XPerformer
    Цитата:
    но в другом окне, которое я не вижу
    Посмотрите, сколько окон найдет.
    Код:
    #include <Array.au3>
    ;...
    $aTemp = WinList('[Title:Select file to Import; Class:#32770]')
    If Not $aTemp[0][0] Then
        MsgBox(16, 'Error', 'WinList')
        Exit
    EndIf
    Dim $aList[$aTemp[0][0] + 1][3] = [['Title', 'Handle', 'Visible']]
    For $i = 1 To $aTemp[0][0]
        $aList[$i][0] = $aTemp[$i][0]
        $aList[$i][1] = $aTemp[$i][1]
        If BitAND(WinGetState($aList[$i][1]), 2) Then
            $aList[$i][2] = 1
        Else
            $aList[$i][2] = 0
        EndIf
    Next
    _ArrayDisplay($aList)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:14 12-01-2012
    Zormax

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще дописал MSGWAIT
    Можно от одной до трех кнопок, любой текст, любая последовательность
    Запустив без параметров - можно почитать хелп.
    http://upwap.ru/1956279
     
    p.s. интересный этот AutoIt, я всё больше на PHP лабаю )))

    Всего записей: 123 | Зарегистр. 15-08-2004 | Отправлено: 00:06 13-01-2012 | Исправлено: Zormax, 00:07 13-01-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Только одно окно находит, не подтвердилась моя гипотеза.
     
    В общем, разобрался я в чем дело.
    Окно создается и рисуется не очень быстро даже на глаз (дерево папок, контролов много).
    Мы из скрипта успеваем заполнить контрол сразу после готовности окна.
    А потом прога этот контрол очищает и портит значение, прописанное скриптом.
     
    Вот доказательство
    Local $old = ""
    Local $log = ""
    Local $Handle = ControlGetHandle($hWin, "", "[CLASS:Edit; INSTANCE:1]")
    ControlSetText($hWin, "", $Handle, $sDictionaryFile)
     
    for $i = 1 to 1000
      $new = ControlGetText($hWin, "", $Handle)
      if $old <> $new then
         $log = $log & "[" & $new & "], "
         $old = $new
      endif
    next
    MsgBox(0, "Message", $log)
     
    Читаю значения из контрола и фиксирую изменения.
    Получается картина маслом - сначала пусто, потом имя файла, потом снова пусто
    На действия проги я повлиять не могу, так что буду ждать, пока она очистит контрол и только потом писать в него.
    Всем спасибо за помощь

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 03:25 13-01-2012
    RIG9

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста как сделать такой скрипт.
     
    Ждал загрузки приложения,
    искал определенный пиксель на экране, перемещал туда мышь и кликал заданное количество раз?
     
    Команды то я нашел а как связать их в логическую последовательность ума не приложу, помогите пожалуйста
     
    WinWaitActive
    PixelSearch
    Mousemove
    mouseclick

    Всего записей: 7 | Зарегистр. 27-04-2011 | Отправлено: 12:44 13-01-2012
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RIG9
    Может AutoClickExtreme подойдёт?

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 05:11 14-01-2012
       

    Страницы: 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