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

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

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Udavvf
    Почему вы используете @WorkingDir вместо @ScriptDir?
    ИМХО, удобнее жать в архив, возможно, пригодится: у себя после ручного нерегулярного бэкапа и пары неприятных случаев делал так, как замену стандартному выключению/перезагрузке/гибернации/выходу из системы. Профили браузеров бэкапились в архив с именем NameProfiles_YYYYMMDD_HHMMSS.zip, при этом если браузер(ы) запущен и перевожу комп, например, в ждущий режим, то за счёт ключа -ssw принудительно упаковывались и файлы, которые в данный момент открыты для записи. Хранятся последние 5 копий, за счёт выбранного имени архива это было легко. (Примитивно набросал на коленке, потом подпилил: по идее, так при завершении/выходе из системы бэкапить можно что угодно + диалог подтверждения, что почему-то убрали в Win7 и чего не хватало.)
     
    P.S. К слову, Tidy или TidySource крайне полезная штука, делает код более читаемым.

    Всего записей: 6483 | Зарегистр. 28-01-2008 | Отправлено: 02:54 02-07-2017
    Udavvf



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

    Всего записей: 7 | Зарегистр. 21-11-2011 | Отправлено: 14:27 02-07-2017
    lgrizzlikl

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Столкнулся с проблемой передачи нажатия клавиш и кликов в приложение Process Monitor.
    Единственное, что получается сделать с его окном - это активировать.  
    Предполагаю, что передача нажатия идет в другом потоке, но сие я осмыслить не смог.
    Просьба подсказать, как передать нажатие в этом случае.
     
    Ссылка на прогу https://technet.microsoft.com/ru-ru/sysinternals/processmonitor.aspx
     
    Так же пробовал взаимодействовать с помощью модуля WASP для powershell.
     
    Для примера:  
    Делаю такую последовательность: активация окна, перемещение мыши на кнопку, нажатие, закрытие окна.
    Кроме активации ничего не происходит.
    В других приложениях подобных проблем не возникает.
     
    $hWnd = WinWait("[CLASS:PROCMON_WINDOW_CLASS]", "", 10)
    WinActivate($hWnd)
    Sleep(3000)
    Opt("MouseCoordMode", 1)
    MouseMove(302, 226, 10)
    Sleep(3000)
    MouseClick("left")
    WinClose($hWnd)
     
    Спасибо!

    Всего записей: 1 | Зарегистр. 05-07-2017 | Отправлено: 10:50 05-07-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lgrizzlikl
    Куда кликает? кнопка или список? Для кнопки можно ControlClick, для списка-таблицы ControlListView с выбором строки  "Select", индекс начала [, индекс конца] и ControlSend с высылкой Enter
     
     
    Добавлено:
    Udavvf
    У меня время от времени появляется реклама в браузере, приходится восстанавливать. Посмотрел в теме FF там какой то батник жмёт в архив.  Но я по старинке просто сжимаю в архив 3 места, в программной папке, в локал/аплдата и в аплдата. Единственное подчищаю "entries". В алгоритме проблем нет, проблема скорее всего к том какие файлы бэкапить. За месяц раза 3 слетал плагин блокировки рекламы, сегодня опять слетел, я так и не нашёл от какого ресурса, последний подозреваемый я сегодня исключил, остаётся тупо автоматизировать.
    И наверно интересен момент, когда я не успел забэкапить и у меня что-то поломалось, и вопрос какие файлы бэкапить, чтобы с них восстановить на новую чистую установку. Например пароли, закладки, историю. По крайней мере из файлов ???.default\bookmarkbackups восстанавливаю закладки через Журнал/Библиотека. А вот с паролями заново ввожу, приходится перед бэкапами в архив войти на актуальных ресурсах, чтобы потом после восстановления я не заметил напряга
     
     
    Добавлено:

    Цитата:
    Шо скажете, может как-то можно улучшить?

    1. Перед убитием браузеров не предлагается его закрыть... ну предположим худший вариант, у юзера открыто несколько вкладок, в одном он пишет пост, в другом сделал изменения, настроек, которые должны сохранится браузером во время закрытия программы, а тут прога убивает его, какие чувства обычно выражаются при этом?
    2. С помощью поиска папки по маске *.default определи в итоге путь к "entries" и прибей её, создав новую пустую. Бэкапу не нужно 250 Мб какого то барахла.
    3. Пути взяты из работающей системы. Можно пойти дальше - указать путь к папке с профилями, если макрос системы выдал что ОС является LiveCD или даже предложить пользователю выбор такой папке взамен определяемой по умолчанию.
    4. А FF подхватывает любую *.default? Может браузер должен сгенерировать её, а скрипт определит её имя и впихнёт контент.
    5. Совместимы ли данные с версией FF? Может нужно перед бэкапом сохранить номер версии браузера, а при восстановлении указать, что типа у вас версия 52, а вы хотите восстановить с бэкапа версии браузера 49, а ещё хуже с 24.
    6. Проверить версию OS, так как пока ещё существуют WinXP, то либо предупредить что она не поддерживается, либо указать выбор иных путей для этой OS
    7. Проверить что браузер не находится в режиме обновления и ожидает перезагрузки. В этом режиме лишний инсталятор в "Mozilla\Firefox\Mozilla Firefox\updates\" 50 Мб.
     

    Цитата:
    Иногда приносят компы на переустановку  

    Я в таких случаях вообще многие места просто скидываю в папку "Старая система", и не удаляю её пока юзер не обживётся. Если что вспомнит, найдёт в той папке все настройки, профили, прочие личные файлы.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 18:42 07-07-2017 | Исправлено: AZJIO, 20:04 07-07-2017
    AlexanderSh88

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, подскажите реально ли запустить игру в окне, развернуть на весь экран, убрать рамку вокруг окна и перекрыть этим окном пуск?
    У меня почти все работает, только вот пуск остается поверх игры. Знаю что можно скрыть пуск стандартными средствами, но придется его постоянно при выходе из игры обратно включать. Может можно скрипт подправить, чтобы у него был приоритет перед пуском?
     
     
    ; Запуск игры
    ShellExecute ( "C:\Games\Warcraft 3 Frozen Throne\war3.exe" , "-window")
     
    ; Ждем появления окна (10 сек)
    $hWnd = WinWaitActive("[CLASS:Warcraft III]", "", 10) ; без таймаута (5) ожидание бесконечно
    If Not $hWnd Then
        MsgBox(4096, 'Сообщение', 'Долго запускается... перезапустите')
        Exit
    EndIf
     
     
    ; Разворачиваем на весь экран
    WinSetState ('Warcraft III', '', @SW_MAXIMIZE)
     
     
    ; Убираем рамку, но пуск снизу не много закрывает((
    #include <GuiMenu.au3>
    #include <WinAPI.au3>
    #include <WinAPIConstants.au3>
    #include <WindowsConstants.au3>
     
    Local $hMenu, $hWnd = WinWait('Warcraft III') ; Some window
    ; ---
    _MakePopup($hWnd)
     
    ; Спрятать меню окна
    $hMenu = _GUICtrlMenu_GetMenu($hWnd)
    If $hMenu Then _
        _GUICtrlMenu_SetMenu($hWnd, 0)
     
    ; Восстановить
    ;_GUICtrlMenu_SetMenu($hWnd, $hMenu)
     
    Func _MakePopup($hWnd)
        Local $iOldStyle
        ; ---
        $iOldStyle = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
        If BitAnd($iOldStyle, $WS_CHILD) Then  _
            Return SetError(1, 0, False)
     
        $iOldStyle = BitAnd($iOldStyle, BitNot($WS_CAPTION))
        _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, BitOr($iOldStyle, $WS_POPUP))
        _WinAPI_SetWindowPos($hWnd, 0, 0, 0, 0, 0, BitOr($SWP_NOMOVE, $SWP_NOSIZE, $SWP_NOZORDER, $SWP_FRAMECHANGED))
        ; ---
        Return True
     EndFunc
     
     
     
     
    И еще...
     
    Не могу убрать рамку игры Killing Floor (запущенной в оконном режиме). Скрипт, который выше, не справляется. Может у кого - нибудь есть более жесткий вариант  :-\
     

    Всего записей: 17 | Зарегистр. 10-12-2014 | Отправлено: 04:36 09-07-2017
    Nekt

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

    Код:
    While 1
      Sleep(150)
    WEnd

    не очень устраивает.

    Всего записей: 640 | Зарегистр. 24-01-2006 | Отправлено: 13:34 10-07-2017 | Исправлено: Nekt, 13:35 10-07-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nekt
    Не понятно, но наверно вставить внутри цикла обработки событий код который надо выполнить. Если это параллельная работа, то можно сделать счётчик, допустим после 15-ти событий GUI один раз обработать параллельный код.
     
    Если это цикл на основе Event, то в принципе тоже самое, в цикл засунуть то что надо выполнять. А по событию на кнопке разве не выполняется функция до закрытия программы?

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 16:49 10-07-2017
    Nekt

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    у меня программа живет сама по себе и работает от событий сочетаний клавиш.
    И мне нужно пустить программу работать пока не нажму выход когда мне захочется или понадобиться, вот и получилось нарыть удалось лишь вариант указанный выше мной.
    Но, возможно есть другие варианты "вечной жизни" программы?
    Потому-как такой слип совсем не стабилен и кривоват.

    Всего записей: 640 | Зарегистр. 24-01-2006 | Отправлено: 18:07 11-07-2017 | Исправлено: Nekt, 18:19 11-07-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nekt
    Ты можешь написать программу чтобы кнопки "выход" вообще не было. Программа не висит на цикле и сразу работает. Если надо чтобы висела и работало, то цикл надо ставить после того что должно работать. Если надо чтобы работало постоянно, то помещаешь это внутри цикла. Если надо по вызову, то вешаешь участок кода внутри функции на горячую клавишу.

    Цитата:
    слип совсем не стабилен и кривоват
    Sleep не работает? не выполняет свои функции? В чём это выражается?

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 19:23 11-07-2017
    Nekt

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

    Цитата:
    Sleep не работает? не выполняет свои функции? В чём это выражается?  

    В плане он вешает программу и отпускает, вешает всегда по разному и отпускает по разному, то есть sleep(120) это совсем не значит что всегда будет 120. И мне показалось что программа между вызовами спать может.
    А если несколько sleep в программе то время может плавать вообще колоссально.

    Всего записей: 640 | Зарегистр. 24-01-2006 | Отправлено: 19:33 11-07-2017 | Исправлено: Nekt, 19:35 11-07-2017
    AZJIO



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

    Цитата:
    совсем не значит что всегда будет 120
    Иногда 119 иногда 121? Это суть важно отклонение 1%?

    Цитата:
    В плане он вешает программу и отпускает, вешает всегда по разному и отпускает по разному
    что значит вешает? У меня датчик загруженности процесса показывает 0

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 19:28 12-07-2017
    Nekt

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

    Цитата:
    что значит вешает? У меня датчик загруженности процесса показывает 0

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

    Цитата:
    Иногда 119 иногда 121? Это суть важно отклонение 1%?  

    там где-то в среднем по моим прикидкам в среднем 10-15%

    Всего записей: 640 | Зарегистр. 24-01-2006 | Отправлено: 02:09 14-07-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nekt
    Sleep в цикле имеет мифический смысл. Если поставить Sleep(10) или Sleep(1000000) от этого программа как то изменит своё поведение? Отсюда 10-15% на что влияют? Это время перезапуска пустого цикла. Чтобы он перезапускал реже, то есть 7 раз в секунду при Sleep(150), то я ставлю Sleep(1000000), один фиг цикл не используется. Может поставиать туда сон на 24 часа и вообще убрать While 1 и WEnd. Хотя кто то на работе будет использовать комп постоянно включенным и программа закроется. Но всё же смысл Sleep грубо говоря заставить скрипт ожидать события от горячих клавиш. У обработчика событий свой цикл, и этот второй ему не мешает.

    Цитата:
    слип действует на всю программу, следовательно и таймер ведя себя не стабильно отражается вводя своевольное в целом
    он не на что не действует, программа наверно под капотом сравнивает метки времени, если разница между метками более указанного, выполняется следующая строка. И выполняется это скорее всего виндовыми функциями WinAPI. Ну тогда винда не стабильна, что поделать, програмеры винды имеют наверно кривые руки.

    Цитата:
    там где-то в среднем по моим прикидкам в среднем 10-15%
    этот показатель зависит от числа в функции. Если поставим 10, то разница будет больше в процентном отношении чем если поставить 100000, так как опрос самой функцией вызовет временную задержку или даже опросы самой винды могут поставить опрос времени в последнюю очередь после системных опросов, а вот когда ожидание 100000, то плавание 1-2 милисекунд для большого числа имеет малую процентную долю.
     

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 08:30 14-07-2017
    contrafack

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

    Всего записей: 3336 | Зарегистр. 21-04-2008 | Отправлено: 22:01 17-07-2017
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, пожалуйста, подскажите, как наиболее корректно импортировать задачу в планировщик из "*.xml-файла" средствами AutoIt?

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 01:01 26-07-2017 | Исправлено: Artem_Butenko, 01:02 26-07-2017
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добавлю, можно ли внести изменения в "*.xml-файл" с сохранением кодировки. Конкретная задача, найти и заменить строку, например %$$$567% на 12345.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 01:23 27-07-2017
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сам разобрался.
    По первому вопросу:
    RunWait('schtasks /Create /XML ' & """" &  @ScriptDir & '\InstallTask.xml' & """" & ' /TN ' & """" & 'My Task' & """", @SystemDir, @SW_HIDE)
    По второму вопросу:
    FileOpen('InstallTask.xml', 32)   ....
     
    Может кому и пригодится...

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 01:00 29-07-2017 | Исправлено: Artem_Butenko, 00:37 07-08-2017
    thejustsoul



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

    Всего записей: 1789 | Зарегистр. 30-03-2014 | Отправлено: 04:01 17-08-2017 | Исправлено: thejustsoul, 07:50 17-08-2017
    Today_is_a_good_day

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Странное поведение функции PixelGetColor.
     
    Вот например такой код:
     
    $h = WinGetHandle("3 - ")
    WinActivate($h)
    dim $aCoords[2] = [951,983]
     
     
    MsgBox(0,PixelGetColor($aCoords[0],$aCoords[1]),PixelGetColor($aCoords[0],$aCoords[1]))
     
    Local $color1 = PixelGetColor($aCoords[0],$aCoords[1])
    Local $color2 = PixelGetColor($aCoords[0],$aCoords[1])
    Local $color3 = PixelGetColor($aCoords[0],$aCoords[1])
    Local $color4 = PixelGetColor($aCoords[0],$aCoords[1])
     
    ConsoleWrite($color1)
    ConsoleWrite(" ")
    ConsoleWrite($color2)
    ConsoleWrite(" ")
    ConsoleWrite($color3)
    ConsoleWrite(" ")
    ConsoleWrite($color4)
    ConsoleWrite(" ")
     
    И такой вывод:
    8092539 6122618 6122618 6122618
     
    Почему первое значение $color1 отличается?

    Всего записей: 13 | Зарегистр. 17-09-2015 | Отправлено: 22:21 02-09-2017
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Today_is_a_good_day
    Ничего странного, окно MsgBox не успевает закрыться,  поставьте после него Sleep(1000) , и все будет нормально.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:35 02-09-2017
       

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