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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sjdb45
    ProgressOn в справке читай.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 18:00 25-07-2013
    RW4PIR



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

    Всего записей: 563 | Зарегистр. 16-03-2009 | Отправлено: 18:16 25-07-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил Search duplicates (зеркало), добавил триал-версию с надоедливым окном и уже без исходника, хотя там же в комплекте есть free-версия с исходником. Основная идея сделать приоритет удаления, который позволяет заблокировать папку от удаления или предпочитаемую папку дубликат которой будет оставлен. Добавил сплиттер (разделитель для изменения/распределения высоты списков). Добавил "Удалять в корзину" или совсем, добавил сортировку результатов по размеру.
    Так как я пока тестирую программу, то пока не гарантируется 100% отсутствия ошибок, просто в качестве идеи и пробы.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 20:52 26-07-2013 | Исправлено: AZJIO, 03:06 27-07-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Ссылка на SaveFolders.7z

    Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 21:55 26-07-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Поправил ссылку.
    Заодно добавил поддержку многоязычности и благодаря этому нашёл баг. Группы в ListView оказывается надо удалять при каждом поиске, а то имена остаются от предыдущего поиска, соответственно размеры файлов в именах групп не совпадали. Это стало видно после смены языка.

    Код:
    _GUICtrlListView_RemoveAllGroups($hLV)
    _GUICtrlListView_EnableGroupView($hLV)

    Добавил в строке состояния вывод размера отмеченных, чтобы знать сколько места освободит.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 01:17 27-07-2013 | Исправлено: AZJIO, 03:12 27-07-2013
    DragonSerW



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как можно сделать так, чтобы функция WinWaitActive($Title) исполнялась при значении $Title "ABC" либо "АБВ"?

    Всего записей: 274 | Зарегистр. 11-05-2007 | Отправлено: 18:26 28-07-2013
    G8888

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я извеняюсь что забиваю форум мусором, везде искал и так и не нашел.Ну не получается у меня запустить какое-нибудь приложение с помощью Автоита в определенных координатах(x ; y).Как это можно реализовать на примерах блокнота или калькулятора?

    Всего записей: 14 | Зарегистр. 29-01-2012 | Отправлено: 18:33 28-07-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    G8888,
    Попробуйте так.
    Код:
    Opt('WinWaitDelay', 0)
     
    Local $iPID, $aWnd, $hWnd, $iTimer, $iX = 40, $iY = 50
     
    $iPID = Run('notepad.exe')
    If Not $iPID Then Exit 13
    $iTimer = TimerInit()
    While TimerDiff($iTimer) < 3000
        $aWnd = WinList('[Class:Notepad]')
        For $i = 1 To $aWnd[0][0]
            If WinGetProcess($aWnd[$i][1]) <> $iPID Then ContinueLoop
            If Not BitAND(WinGetState($aWnd[$i][1]), 2) Then ContinueLoop
            $hWnd = $aWnd[$i][1]
            $aWnd = 0
            $iPID = 0
            $iTimer = 0
            ExitLoop 2
        Next
        Sleep(3)
    WEnd
    If Not $hWnd Then Exit 13
    WinMove($hWnd, '', $iX, $iY)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 19:07 28-07-2013 | Исправлено: madmasles, 19:46 28-07-2013
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DragonSerW, WinWaitActive тут не годится. как-то так я это делал:

    Код:
    While 1
        $aAllWind = WinList ()
        For $i=1 To $aAllWind[0][0]
            $iState = WinGetState ($aAllWind[$i][1]) ; определяем статус текущего окна
            If BitAND($iState, 8) <> 0 And $aAllWind[$i][0] = "АБВ" Then
                MsgBox (0, "", "Окно 1 появилось!")
                ExitLoop 2 ; выходим из обоих циклов
            EndIf
            If BitAND($iState, 8) <> 0 And $aAllWind[$i][0] = "ABC" Then
                MsgBox (0, "", "Окно 2 появилось!")
                ExitLoop 2 ; выходим из обоих циклов
            EndIf
        Next
        Sleep (100)
    WEnd

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 20:21 28-07-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    Цитата:
    WinWaitActive тут не годится
    Почему?
    Код:
    $sTitle_1 = 'ABC'
    $sTitle_2 = 'АБВ'
    $hWnd = WinWaitActive('[REGEXPTITLE:' & $sTitle_1 & '|' & $sTitle_2 & ']')
    ConsoleWrite(WinGetTitle($hWnd) & @LF)

     

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 20:48 28-07-2013
    G8888

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Немного отвлеку вас - А что это Московский (главный) городской суд хочет заблокировать этот сайт, вот я и подумал а как же мы будем изучать Автоит.Вроде говорят что с 1 августа 2013 года вступит в силу закон о блокировании сайтов за бесплатное(нелегальное) распространение фильмов и музыки.
    Я сам удивился набираю адрес этого сайта и тут на тебе банер мол что этот саит будет блокирован ну мне нечего было сделать как нажать кнопку "продолжить".

    Всего записей: 14 | Зарегистр. 29-01-2012 | Отправлено: 21:42 28-07-2013 | Исправлено: G8888, 21:45 28-07-2013
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles, О таких возможностях не знал.
    Спасибо за инфу

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 23:28 28-07-2013
    Xom9I4oK



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто поможет написать скрипт на сабже (это мой скрипт на Automate, но я хочу на AutoIT перенести):
    Create a variable named "b" with an initial value of " ".  
    Create a variable named "a" with an initial value of " ".  
    Read the file "C:\1.txt" and store the data in the variable "a". File is "ANSI" encoded.
    Set the contents of the clipboard with the text "%a%".
    Read data from value "SteamExe" in key "HKEY_CURRENT_USER\Software\Valve\Steam" into variable "b".  
    If process '123.exe' is not running, then...  
    Run '%b% -applaunch 123456' .  
    Pause task for 2 seconds.  
    End If
    Focus window(s) matching the following criteria: (window title: '123*').  If the step causes an error, retry 20 times, pausing 500ms between attempts.  
    Send keystrokes "{CTRL}(o)".  
    Pause task for 500 milliseconds.  
    Send keystrokes "{CTRL}(v)".  
    Send keystrokes "{ENTER}".  

    Всего записей: 506 | Зарегистр. 01-04-2005 | Отправлено: 00:31 29-07-2013
    DragonSerW



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles, благодарю, очень выручили.
    А скажите, зачем нужна строка "ConsoleWrite(WinGetTitle($hWnd) & @LF)" и что она делает? Я так и не понял из описания http://autoit-script.ru/autoit3_docs/functions/ConsoleWrite.htm , что делает эта функция.
    Почему нельзя закончить скрипт третьей строкой в виде "WinWaitActive('[REGEXPTITLE:' & $sTitle_1 & '|' & $sTitle_2 & ']') "?
    ------
    Ещё забыл: у функции WinWaitActive есть второй параметр - "text". Как быть, если и в нем может быть два значения?

    Всего записей: 274 | Зарегистр. 11-05-2007 | Отправлено: 16:09 29-07-2013 | Исправлено: DragonSerW, 20:35 29-07-2013
    G8888

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles большое спасибо, выручили в самое тяжелое время.
       Опять возник вопрос а как сделать чтоб нажать кнопку на калькуляторе например цифру 6 и это же событие было связано с нажатием кнопки на блокноте.То-есть нажимая определенные кнопки на калькуляторе как бы взаимодествовали с кнопками на блокноте то есть определенные кнопки одного приложения были связаны с другим приложением-программой.

    Всего записей: 14 | Зарегистр. 29-01-2012 | Отправлено: 18:56 29-07-2013 | Исправлено: G8888, 21:33 29-07-2013
    Daniyar91

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

    Код:
    $WindowTitle = '123' ;заголовок окна
    ;AutoItSetOption("WinTitleMatchMode", 3)
     
    $b = ' ' ;Create a variable named "b" with an initial value of " ".
    $a = ' ' ;Create a variable named "a" with an initial value of " ".
    $a = FileRead("C:\1.txt") ;Read the file "C:\1.txt" and store the data in the variable "a".
    ClipPut($a) ;Set the contents of the clipboard with the text "%a%".
    $b = RegRead("HKEY_CURRENT_USER\Software\Valve\Steam", "SteamExe") ;Read data from value "..." in key "..." into variable "b".
     
    If Not ProcessExists('123.exe') then ;If process '123.exe' is not running, then...
        Run($b & ' -applaunch 123456') ;
        Sleep(2000) ;Pause task for 2 seconds.
    EndIf
     
    ;Focus window(s) matching the following criteria: (window title: '123*'). If the step causes an error, retry 20 times, pausing 500ms between attempts.
    $hWnd = WinActivate($WindowTitle)
    for $i = 1 to 20
        If WinActive($hWnd) then
            ExitLoop
        Else
            Sleep(500)
            $hWnd = WinActivate($WindowTitle)
        EndIf
    next
     
    Send('^o') ;Send keystrokes "{CTRL}(o)".
    Sleep(500) ;Pause task for 500 milliseconds.
    Send('^v') ;Send keystrokes "{CTRL}(v)".
    Send('{ENTER}') ;Send keystrokes "{ENTER}".

    Но нужно учитывать, что я даже не представляю что это такое - Automate.
    Если строка "Focus window(s) matching the following criteria: (window title: '123*')." означает: установить фокус на окно с заголовком, начинающимся с "123" (т.е. заголовок может быть "123" или же "123456abc") то оставь все как есть, а если означает: установить фокус на окно с заголовком "123*" (т.е. заголовок может быть только "123*" и никаким другим) то в первой строке замени "123" на "123*" и раскомментируй вторую строку - удалив точку с запятой ";" вначале строки.

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 15:45 31-07-2013 | Исправлено: Daniyar91, 16:27 31-07-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил Search duplicates (зеркало)
    1. После первого удаления не работало возможность удалить ещё раз отметив у текущем списке, потому что индексы  уже не соответствовали. Теперь соответствует.
    2. При добавлении к списку поиска был сброс приоритетов, при чём предыдущие приоритеты всё равно хранились и действовали. Теперь приоритет восстанавливается.
    3. Изменён стиль GUI и ListView, чтобы наименьшим образом мерцало или создавало артефакты на WinXP, Win7.
    4. Оптимизация построения списка. так как обнаружилось, что "-1" невозможно добавить в список, пришлось делать копию функции и урезать её. Кроме исправления оказалось лишними проверки что ListView принадлежит текущему окну, что используется дескриптор, и самое весомое ускорение на -30% убрал проверку юникода, ведь достаточно один раз присоздании ListView получить этот флаг. Кроме того _GUICtrlListView_AddItem тупо вызывает _GUICtrlListView_InsertItem или _GUICtrlListView_SetItemStateImage вызывает _GUICtrlListView_SetItemState.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 18:03 01-08-2013
    Xom9I4oK



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

    Всего записей: 506 | Зарегистр. 01-04-2005 | Отправлено: 19:33 01-08-2013 | Исправлено: Xom9I4oK, 23:08 01-08-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если Focus window(s) matching the following criteria: (window title: '123*'). If the step causes an error, retry 20 times, pausing 500ms between attempts. означает: попытаться установить фокус на окно всего 20 раз, то я немного ошибся, и должно быть так
    Код:
    for $i = 1 to 19
    а если означает: установить фокус на окно, а в случаи неудачи попытаться еще 20 раз (т.е. максимум будет 21 попытка) то все правильно.

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 00:10 02-08-2013 | Исправлено: Daniyar91, 00:29 02-08-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Какие ограничения есть у Search duplicates? Натравил на папку на 73 гигов (43 329 файлов, 2 357 папок, на этапе Создание списка дубликатов MD5 и сортировка получаю ошибку:
    AutoIt: Error allocating memory
    Перебор по размеру?

    Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 03:52 08-08-2013
       

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