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

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

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

    Всего записей: 885 | Зарегистр. 14-12-2005 | Отправлено: 12:25 24-06-2017 | Исправлено: U235, 12:27 24-06-2017
    donbaton

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Благодарю за желание помочь. Только не помогло. В начале недели пришлю Вам в личку ссылку на файлы примеров.

    Всего записей: 170 | Зарегистр. 18-03-2009 | Отправлено: 22:28 24-06-2017
    donbaton

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Так как предложенные изменения скрипта не помогли, хочу попробовать вариант с кликом мышью по кнопке сохранения.  
    Записал нажатие утилитой из дистрибутива AutoIT AU3Record. Скрипт для автоматизации Finereader в это время не был запущен.
    Во втором варианте записывал нажатия с проставленной галочкой на "Record Window Text".
    1 Вариант:
    _WinWaitActivate("Untitled batch - ABBYY FineReader 8.0 Professional Edition - [1 - Image]","")
    MouseClick("left",496,106,1)
     
    2 вариант:
    _WinWaitActivate("Untitled batch - ABBYY FineReader 8.0 Professional Edition - [1 - Image]","")
    MouseClick("left",496,106,1)
    _WinWaitActivate("Untitled batch - ABBYY FineReader 8.0 Professional Edition - [1 - Image]","Batch")
    MouseClick("left",498,107,1)
     
    Прошу подсказать, как правильно подставить нажатие на кнопку в код скрипта.

    Всего записей: 170 | Зарегистр. 18-03-2009 | Отправлено: 09:00 28-06-2017
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    donbaton
    Лучше не кликать по координатам, а посмотреть идентификатор(ы) кнопки(ок) сохранения и заменить MouseClick() на ControlClick(). Подствить нужно после появления окна с кнопкой, похоже, после какого-то из вызовов WinWait().

    Всего записей: 6494 | Зарегистр. 28-01-2008 | Отправлено: 11:37 28-06-2017 | Исправлено: Skif_off, 11:37 28-06-2017
    U235

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

    Всего записей: 885 | Зарегистр. 14-12-2005 | Отправлено: 16:30 28-06-2017
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    U235
    Control Viewer тоже ничего не показывает?

    Всего записей: 6494 | Зарегистр. 28-01-2008 | Отправлено: 19:05 28-06-2017
    U235

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

    Всего записей: 885 | Зарегистр. 14-12-2005 | Отправлено: 21:20 28-06-2017
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи, пожалуйста, подскажите, каким образом можно реализовать MsgBox с обратным отсчётом?
    Желательно без мерцаний, и c отображением окна заголовка и основного содержания MsgBox с таймером.

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нашел пример. Подробнее...
     
    Можно ли его доработать, дабы в сообщение добавить текст, а не только таймер?

    Всего записей: 712 | Зарегистр. 19-02-2008 | Отправлено: 11:51 29-06-2017 | Исправлено: Artem_Butenko, 11:52 29-06-2017
    Skif_off

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

    Всего записей: 6494 | Зарегистр. 28-01-2008 | Отправлено: 14:20 29-06-2017
    donbaton

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    По подсказке U235 найдена строка, которую если добавить в начало первоначального скрипта помогла Opt("SendKeyDelay", 700)

    Всего записей: 170 | Зарегистр. 18-03-2009 | Отправлено: 17:30 29-06-2017
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
     
    Смотрел, хороший вариант с кнопочкой с отсчётом. Только тот пример, что я привёл видимо доработать нельзя?

    Всего записей: 712 | Зарегистр. 19-02-2008 | Отправлено: 01:58 30-06-2017
    Andrey_A_A



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

    Код:
    #include <Timers.au3>
     
    Global $iNum_Time=9, $sText_1='Привет   >> ', $sText_2=' <<    Пока', $sTitle_Time='Сообщение'
    $hGui = GUICreate("")
    $Timer = _Timer_SetTimer($hGui, 1000, "_UpdateMsgBox")
    MsgBox(262144 + 64, $sTitle_Time, $sText_1 & $iNum_Time & $sText_2, $iNum_Time)
    _Timer_KillTimer($hGui, $Timer)
     
    Func _UpdateMsgBox($hWnd, $Msg, $iIDTimer, $dwTime)
        $iNum_Time-=1
        ControlSetText($sTitle_Time, "", "Static2", $sText_1 & $iNum_Time & $sText_2)
    EndFunc

    Код:
    #include <Timers.au3>
    Global $iNum_Time=90, $sText_1='=*=*=*=*=*=*='&@CR&'      >> ', $sText_2=' << '&@CR&'=*=*=*=*=*=*=*', $sTitle_Time='Сообщение '
    $hGui = GUICreate("")
    $Timer = _Timer_SetTimer($hGui, 1000, '_UpdateMsgBox')
    MsgBox(262144 + 64, $sTitle_Time & $iNum_Time, $sText_1 & $iNum_Time & $sText_2, $iNum_Time)
    _Timer_KillTimer($hGui, $Timer)
     
    Func _UpdateMsgBox($hWnd, $Msg, $iIDTimer, $dwTime)
        $iNum_Time-=1
        ControlSetText($sTitle_Time, '', 'Static2', $sText_1 & $iNum_Time & $sText_2)
        ControlSetText($sTitle_Time, '', 'Button1', 'OK (' & $iNum_Time & ')')
        WinSetTitle($sTitle_Time, '', $sTitle_Time & $iNum_Time)
    EndFunc

    Всего записей: 1401 | Зарегистр. 15-08-2011 | Отправлено: 02:19 30-06-2017 | Исправлено: Andrey_A_A, 02:53 30-06-2017
    Artem_Butenko



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

    Цитата:
    #include <Timers.au3>
     
    Global $iNum_Time=9, $sText_1='Привет   >> ', $sText_2=' <<    Пока', $sTitle_Time='Сообщение'
    $hGui = GUICreate("")
    $Timer = _Timer_SetTimer($hGui, 1000, "_UpdateMsgBox")
    MsgBox(262144 + 64, $sTitle_Time, $sText_1 & $iNum_Time & $sText_2, $iNum_Time)
    _Timer_KillTimer($hGui, $Timer)
     
    Func _UpdateMsgBox($hWnd, $Msg, $iIDTimer, $dwTime)
        $iNum_Time-=1
        ControlSetText($sTitle_Time, "", "Static2", $sText_1 & $iNum_Time & $sText_2)
    EndFunc  

    Спасибо Вам большое, только "судороги" текста, при обновлении таймера прослеживаются, как и в других примерах. Наверное это особенность AutoIt...

    Всего записей: 712 | Зарегистр. 19-02-2008 | Отправлено: 02:49 30-06-2017 | Исправлено: Artem_Butenko, 02:52 30-06-2017
    Udavvf



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

    Всего записей: 7 | Зарегистр. 21-11-2011 | Отправлено: 22:18 01-07-2017 | Исправлено: Udavvf, 14:16 02-07-2017
    Skif_off

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

    Всего записей: 6494 | Зарегистр. 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 Мб.
     

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

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

    Всего записей: 4414 | Зарегистр. 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
       

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