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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо за совет но хочется на autoit может хоть пойму что с ним дальше делать на основе этого скрипта, т.к уроки что есть заточены под win функции всякие.

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



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

    Код:
    AutoItSetOption ( "PixelCoordMode" , 2); читать пиксели с клиентской области окна
    AutoItSetOption ( "MouseCoordMode" , 2); координаты клиентской области окна
     
    $sWin = "Калькулятор" ; заголовок искомого окна (вписать свой)
    $bColor = 0xECF3FC ; искомый цвет (вписать свой в формате RGB)
     
    While 1 ; бесконечный цикл (завершить скрипт кликом в tray)
        $hWin =  WinActive ($sWin) ; проверяем активно ли окно
        If $hWin <> 0 Then ; если результат проверки не равен нулю, значит окно есть.
            $aResult = PixelSearch (1, 1, 30, 30, $bColor, 8); ищем цвет в квадрате 30x30 с разбегом по яркости 8
            If IsArray ($aResult) Then ; если ответ является массивом, значит что-то нашлось
                MouseClick ( "left", $aResult[0], $aResult[1]) ; кликаем по тем координатам, где найден наш цвет
            EndIf
        EndIf

        Sleep (100) ; задержка чтоб не грузить проц
    WEnd


    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 15:19 15-01-2012 | Исправлено: ynbIpb, 15:20 15-01-2012
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите с шаблоном поиска...
    есть выхлоп консольного архиватора:
    Подробнее...
    Как правильно задать шаблон для StringRegExp, чтобы в поиске одновременно участвовали выражения ID 27674, pkeyconfig.xrm-ms, tokens.dat, ProductKey.ini? Иными словами, нужно, если найдены все четыре выражения, выполнить действие

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 14:32 16-01-2012
    AZJIO



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

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 18:41 16-01-2012
    Free_Soft



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

    Код:
    $StorageFileQuery = Run($CMD & 'CabArc.exe l "' & $StorageFile & '"', '', @SW_HIDE, 6)
        $lineS = ''
        While 1
            $lineS &= StdoutRead($StorageFileQuery)
            If @error Then ExitLoop
        Wend
        If StringInStr($lineS, '27674') And StringInStr($lineS, 'pkeyconfig.xrm-ms') And StringInStr($lineS, 'tokens.dat') And StringInStr($lineS, 'ProductKey.ini') Then...

    чего-то не работает...

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 19:05 16-01-2012
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    можно сделать MsgBox до после Wend, чтоб посмотреть что там за текст и разделить условия, т.е. после каждого StringInStr проверять совпадения, чтоб выяснить какого именно нет.
     

    Код:
    $StorageFileQuery = Run($CMD & 'CabArc.exe l "' & $StorageFile & '"', '', @SW_HIDE, 6)
    $lineS = ''
    While 1
        $lineS &= StdoutRead($StorageFileQuery)
        If @error Then ExitLoop
    WEnd

    MsgBox(0, 'Сообщение', $lineS)
    If Not StringInStr($lineS, '27674') Then MsgBox(0, '27674', 'неудача')
    If Not StringInStr($lineS, 'pkeyconfig.xrm-ms') Then MsgBox(0, 'pkeyconfig', 'неудача')
    If Not StringInStr($lineS, 'tokens.dat') Then MsgBox(0, 'tokens', 'неудача')
    If Not StringInStr($lineS, 'ProductKey.ini') Then MsgBox(0, 'ProductKey', 'неудача')

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 20:39 16-01-2012 | Исправлено: AZJIO, 20:43 16-01-2012
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Да, спасибо. Получилось, косяк в другом был
     
    Добавлено:
    Еще как правильней обрабатывать события GUI?
    Чем отличается конструкция

    Код:
    While 1
            $msg = GUIGetMsg()
            Select
                Case $msg = $Srv
    ...
    от

    Код:
    While 1
            Select GUIGetMsg()
                Case $Srv
    ...

    Видел также, что в этом случае может быть использован Switch вместо Select. В чем разница?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 13:03 17-01-2012 | Исправлено: Free_Soft, 14:32 17-01-2012
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Select GUIGetMsg()  - такого нет.
    Есть Switch GUIGetMsg()
    Разница в том, что Select в конструкции содержит подвыражения, а Switch содержит один элемент сравнения как бы в заголовке, остальные под Case, соответственно должно работать быстрее.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 18:48 17-01-2012
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Понятно. А можно каким-то стилем в GUICtrlCreateInput ограничить длину ввода?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 19:31 17-01-2012
    AZJIO



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

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 22:46 17-01-2012
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Справка обновлена ссылка1, ссылка2 (10 Мб)
     
    Добавлен файл CustomUDFs.chm дополнительных функций от пользователей AutoIt3, добавлено в AutoIt.chm его объединение с общей справкой, добавлены Include и примеры для этой справки. Все промежуточные обновления добавлены. Переведена первая страничка UDF.
     
    CustomUDFs.chm содержит:
    Содержит 55 функций (Encoding, BigNum, ModernMenuRaw, FileSearch, Midi, реестр и др.) и описание к AutoIt3Wrapper, Obfuscator, Tidy. Добавлены уроки по регулярным выражениям (автор Redline) и WM Сообщения - 15шт.
     
    Менеджер реестра
     

     
    В разделе "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify" в бинарном виде хранятся состояние иконок в трее "Всегда  отображать" или "Всегда скрывать" или "Скрывать если не активно". Есть ли нативные функции для установки этого состояния? Парсить смысла не вижу, хотя и заметил повторение бинарных блоков данных каждые 1084 байт. И применить методом изменения данных в реестре не получится, так как система перезапишет данные при завершении эксплорера.
    Заметил автоустановку состояния иконки в трее в программе LouderIt.
    Вот ссылка en

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 16:47 24-01-2012 | Исправлено: AZJIO, 07:32 31-01-2012
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ALL
    Направьте пожалуйста в нужную сторону.
    Надо на удаленном ПК запустить программу, пощелкать в ней по кнопкам (типа нажать "Далее") и чтобы все это происходило невидимо для пользователя.
     
    Пробовал использовать ControlClick для щелкания по кнопкам. В видимом окне щелкает, в невидимом - нет.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 12:22 27-01-2012
    G8888

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здраствуйте, я программирую на Автоите и недавно у меня возникла проблема.А не подскажете как лучше создать фаил реестра то-есть не могу выбрать что лучше ( Regedit4 ) или ( Windows Registry Editor Version 5.00 ).Читал книгу ( Тонкости реестра Windows )автор Роман Клименко, Питер Пресс 2008.В этой книге написано что файлы с Regedit4 устарели но еще будут поддерживаться будущими версиями Виндоус.Но на сколько будут поддерживаться еще никто не знает, хотелось бы услышать ваше мнение.Стр 20 этой книги.А может случиться наоборот, удалят Windows Registry Editor Version 5.00 в будущих версиях Виндоус?

    Всего записей: 14 | Зарегистр. 29-01-2012 | Отправлено: 18:46 29-01-2012 | Исправлено: G8888, 18:59 29-01-2012
    ynbIpb



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

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 22:54 29-01-2012
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Надо передать запущенному батнику со свёрнутым или невидимым окном нажатие клавиши без его разворачивания или выхода из сумрока. Имя , PID ну и любую инфу из tasklist.exe можно выдрать. То есть при запуске скрипта передавалось нажатие заранее прописанной клавиши, в определённое окно, можно любыми средствами и утилитами. Есть решения?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:19 02-02-2012
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    не мог бы кто из своих закромов выложить шаблон чего то подобного
       
    задача запускать установщик 7zip sfx с ключами
    Подробнее...
    т.е. нужна простейшая оболочка, отметив в которой нужные галки и нажав кнопку, запустилась бы установка рядом находящегося установщика с произвольным ключом  
    запуск файла со строкой присущей началу всех возможных опций установки - file.exe /ai<здесь буквы добавляемые путем отметки галками в оболочке>
    например если в оболочке отметили галками установку офиса, и пары дополнительных утилит должна быть передана команда file.exe /aisct а если только одной дополнительной программы file.exe /aist и конечный набор букв передаваемых командной строке должен быть привязан к галочкам в установщике
    заранее благодарен за любую информацию


    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 19:50 02-02-2012 | Исправлено: 5peciali5t, 20:01 02-02-2012
    NIKZZZZ



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

    Цитата:
    нужна простейшая оболочка

    Пример:
    Подробнее...

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:00 02-02-2012 | Исправлено: NIKZZZZ, 21:11 02-02-2012
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AutoIt3.7z (1.5 МБ) и UDFs3.7z (2.7 МБ) - промежуточные версии, в UDF добавлен русский перевод _SQLite (автор Redline), в AutoIt3 частично улучшены примеры, взятые из версии 3.3.9.0 но без функциональных изменений. Справка по прежнему для версии 3.3.6.1.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 12:34 07-02-2012 | Исправлено: AZJIO, 17:19 08-02-2012
    spichka



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Привет всем.
    Есть задача написать игрового бота.
     
    Есть несколько точек (датчиков) по которым можно и нужно отслеживать состояние бота(в игре).
    В программе должна быть предусмотрена пауза, по выходу из которой бот должен АДЕКВАТНО решать задачи согласно внутренней логике, основываясь на данных с датчиков.
     
    Вопрос по архитектуре программы. Как всё это реализовать?
     
    Больше всего подходит способ через таймеры. К примеру определяем нужные таймер для проверки набора состояния датчиков
     

    Код:
    Global $Timer1 = _Timer_SetTimer($hGUI, 2000)
    Global $Timer2 = _Timer_SetTimer($hGUI, 5000)
    Global $Timer3 = _Timer_SetTimer($hGUI, 10000)
    Global $Timer4 = _Timer_SetTimer($hGUI, 20000)
     
     
     
     
    Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam) ; Событие таймера
    #forceref $hWnd, $iMsg, $ilParam
        Switch _Timer_GetTimerID($iwParam)
            Case $Timer1Local                    ;выполнение 1-го таймера
                Label1_SetData()
                
                Sleep(1500)
     
               MsgBox(0, 'WM_TIMER', 'Событие Timer1', 1)
            Case $Timer2                    ;выполнение 2-го таймера
                Label2_SetData()
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc

     
    С этим пока всё в порядке.
    Func WM_TIMER писал не я, поэтому по тонкостям запуска и определения ответить не смогу. Взял где-то из примеров.
     
    Теперь вопрос.
    Как видим, таймеры абсолютно разные и блоки выполнения любого из них могут быть больше по времени чем разница по времени до вызова следующего CASE $Timer2
    ПРИМЕР:
    таймер1 - вызывает каждые 2 сек свой код.
    А вдруг код будет выполнятся 5-10 секунд? Учитывая что внутри него вполне могут находиться сложные действия с ожиданием прорисовки ( Sleep(5000))
    Получается, что во время выполнения обработчика ТАЙМЕРА1 должен вызваться обработчик ТАЙМЕРA2.
     
    Вопрос к знатокам. Как будет работать программа в этом случае?
    И как правильно строить архитектуру такого бота?
     
    Вопрос 2:
    можно ли использовать вложение SWITCH внутри функции примерно так:

    Код:
    Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam) ; Событие таймера
    #forceref $hWnd, $iMsg, $ilParam
        Switch _Timer_GetTimerID($iwParam)
            Case $Timer1Local                    ;выполнение 1-го таймера
     
                Switch <expression>
                   Case 6 To 11
                         <code1>
                  Case 12 To 17
                        <code2>
                  Case 18 To 21
                        <code3>
                  Case Else
                        <code4>
                EndSwitch
           
           Case $Timer2
                 ......
           EndSwitch
    .....
    EndFunc

    ?
     
    Спасибо за добрые советы
     
     

    Всего записей: 22 | Зарегистр. 29-04-2006 | Отправлено: 01:55 09-02-2012 | Исправлено: spichka, 02:05 09-02-2012
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    spichka
    1. Есть родная функция AdlibRegister.
    2. Можно при входе в функцию разрегистрировать все другие, а на выходе снова зарегистрировать.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 09:49 09-02-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