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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Parazit111
    Как-то так и запускать скрипт с параметром?

    Код:
    If CmdLine[0] <> 1 Then Exit
    Switch $CmdLine[1]  
        Case 'timedate'
            Timedate()
        Case 'taskmgr'
            Taskmgr()
    EndSwitch
     
    Func Timedate()
        ShellExecute('timedate.cpl', '', 'C:\WINDOWS\system32\', 'open')
    EndFunc
     
    Func Taskmgr()
        ShellExecute('taskmgr.exe', '', "C:\WINDOWS\system32", "open")
    EndFunc

    Всего записей: 6597 | Зарегистр. 28-01-2008 | Отправлено: 01:07 19-01-2017
    Zmy111



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно создать GUI

    Всего записей: 55 | Зарегистр. 19-09-2016 | Отправлено: 01:58 19-01-2017 | Исправлено: Zmy111, 02:00 19-01-2017
    Parazit111



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off, спасибо. Я знал этот способ. Я думал, что существует другой.

    Всего записей: 36 | Зарегистр. 19-01-2017 | Отправлено: 02:03 19-01-2017 | Исправлено: Parazit111, 02:06 19-01-2017
    Zmy111



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Parazit111, ну какой другой? Сам подумай, как ты, кроме как параметров, сможешь объяснить AutoIt, что ты от него хочешь?
    Он же не волшебный. Он не умеет читать мысли и желания.  
    Если у тебя есть такая библиотека, то ты её можешь подключать к своим скриптам, используя #Include.
    А напрямую, кроме как с помощью параметров, не существует никаких способов.
     

    Всего записей: 55 | Зарегистр. 19-09-2016 | Отправлено: 02:12 19-01-2017 | Исправлено: Zmy111, 02:13 19-01-2017
    timsky



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

    Цитата:
    Я думал, что существует другой.

    Можно именовать AU3/ЕХЕ по-разному:
    Код:
    If @ScriptName = '1.au3' Then
        Timedate()
    ElseIf @ScriptName = '1.exe' Then
        Taskmgr()
    Else
        MsgBox(0, 'WTF?', @ScriptName)
    EndIf
     
    Func Timedate()
        ShellExecute('timedate.cpl', '', 'C:\WINDOWS\system32\', 'open')
    EndFunc  
       
    Func Taskmgr()
        ShellExecute('taskmgr.exe', '', "C:\WINDOWS\system32", "open")
    EndFunc

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 12:23 19-01-2017
    VictorMan



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пользуюсь AutoIT редко, поэтому каждый раз разбираюсь чуть не с нуля
    И вот сейчас туплю: как отследить нажатие кнопки в окне внешней программы?
    Думал, есть что-то вроде антипода ControlClick (ну, типа Wait...), но что-то не вижу.
    Ткните носом, или подскажите решение... плиз...

    Всего записей: 2447 | Зарегистр. 26-09-2001 | Отправлено: 22:46 19-01-2017
    AZJIO



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

    Всего записей: 4560 | Зарегистр. 03-05-2006 | Отправлено: 17:14 20-01-2017 | Исправлено: AZJIO, 17:17 20-01-2017
    VictorMan



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Спасибо.
    Да еще остается вопрос: нажатие кнопки привело ли к отработке действия, для которого предназначена кнопка - интересовало, собственно, именно это.  
    Я уже задавая вопрос заподозревал, что вопрос непростой...но решил спросить, мало-ли, вдруг кто-то юзерскую функцию написал.    
    Ладно, будем обходиться без этого, не смертельно.

    Всего записей: 2447 | Зарегистр. 26-09-2001 | Отправлено: 21:12 20-01-2017
    crt



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

    Всего записей: 22 | Зарегистр. 20-01-2017 | Отправлено: 01:02 21-01-2017
    king_stiven

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

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 01:22 21-01-2017 | Исправлено: king_stiven, 01:44 21-01-2017
    ck80

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Предыдущий админ уволился, не оставив пароля для Panaconic KX-TEM824.  
     
    Стандартный 1234 и различные частораспространненые вариации не подходят (0000, 123456 и т.д.). Сбрасывать АТС не хочется, потому что там все настроено и работает, но для дальнейшей настройки нужно знать пароль.  
     
    Пароль на АТС не сложный должен быть. Ограничения на пароль: от 4 до 6 символов, только цифры.  
     
    Вспомнил об AutoIT, набросал скрипт, но что-то он у меня не вставляет пароль в окошко ввода.
    Помогите, где я ошибся?
     
    ;--- AutoIt Macro Generator V 0.21 beta ---  
    #include <File.au3>  
    #include <Array.au3>  
    Dim $aPasswords  
     
    _FileReadToArray('c:\pass.txt', $aPasswords)  
    For $i = 1 To 10000 Step 1  
      Opt("WinTitleMatchMode", 4)  
      WinWait("Connect to PBX","Enter System Password :")  
      ControlClick("Connect to PBX","Enter System Password :","Edit1")  
      Send$aPasswords[$i])  
      ControlClick("Connect to PBX","Enter System Password :","Button6")  
      WinWait("KX-TE Maintenance Console","The system password is wrong.")  
      ControlClick("KX-TE Maintenance Console","The system password is wrong.","Button1")  
      WinWait("Connect to PBX","Enter System Password :")  
      ControlClick("Connect to PBX","Enter System Password :","Edit1")  
    Next  
    ;--- End ---

    Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 14:47 23-01-2017
    Skif_off

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

    Код:
    ;--- AutoIt Macro Generator V 0.21 beta ---
    #include <File.au3>
    Opt("WinTitleMatchMode", 4)
     
    Dim $aPasswords
     
    _FileReadToArray("c:\pass.txt", $aPasswords)
    For $i = 1 To $aPasswords[0]
        WinWait("Connect to PBX", "Enter System Password :")
        ControlClick("Connect to PBX", "Enter System Password :", "Edit1")
        Send($aPasswords[$i])
        ControlClick("Connect to PBX", "Enter System Password :", "Button6")
        WinWait("KX-TE Maintenance Console", "The system password is wrong.")
        ControlClick("KX-TE Maintenance Console", "The system password is wrong.", "Button1")
        WinWait("Connect to PBX", "Enter System Password :")
        ControlClick("Connect to PBX", "Enter System Password :", "Edit1")
    Next
    ;--- End ---

     
    Добавлено:
    По-хорошему, окно бы увидеть...
     
    P.S. Не забывайте про тег code, так удобнее.

    Всего записей: 6597 | Зарегистр. 28-01-2008 | Отправлено: 15:18 23-01-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VictorMan
    Можно отследить по изменениям в файлах, в интерфейсе GUI.
     
    ck80
    1. Проверять не кучу строк а по порядку.
    2. Посмотри пример на каждую функцию. WinWait возвращает дескриптор и через него более надёжно обращаться, чем через заголовок окна. Укажи секунды сколько ожидать окно, может название немного другое и скрипт вечно ждёт. Если возвратит дескриптор, то дождалась, и используй его в следующих запросах вместо имени окна. Иначе делай выход через мессагу "Извините окно не удалось дождаться". Как то так, примеры в справке уже давно готовы.
     

    Цитата:
    Send($aPasswords[$i])  

    Эта штука высылает текст куда-то, хорошо если в месте "куда-то" находится приёмное окно. Лучше использовать ControlSend, он хоть вышлет конкретнее в указанное поле.

    Всего записей: 4560 | Зарегистр. 03-05-2006 | Отправлено: 03:23 24-01-2017
    ck80

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    И так не вставляет
     
    Если запустить в скрипт эдиторе, то пароли из файла вставляются в позицию курсора. А если скомпилировать в exe-файл, то вообще не вставляется в окно пароля.
     
     
     
    UPD
     
    Вот этот код сработал. Сидит перебирает.
     
    ;--- AutoIt Macro Generator V 0.21 beta ---
    #include <File.au3>
    #include <Array.au3>
    Opt("WinTitleMatchMode", 4)
     
    Dim $aPasswords
     
    _FileReadToArray("c:\1000000.txt", $aPasswords)
    For $i = 1 To $aPasswords[1000000]
        Opt("WinTitleMatchMode", 4)
        WinWait("Connect to PBX","Enter System Password :")
        ControlSend("Connect to PBX","Enter System Password :","Edit1","{BACKSPACE 7}")
        ControlSend("Connect to PBX","Enter System Password :","Edit1",$aPasswords[$i])
        ControlClick("Connect to PBX","Enter System Password :","Button6")
        WinWait("KX-TE Maintenance Console","The system password is wrong.")
        ControlClick("KX-TE Maintenance Console","The system password is wrong.","Button1")
    Next
    ;--- End ---
     

    Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 11:40 24-01-2017 | Исправлено: ck80, 13:26 24-01-2017
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ck80
    Может быть, как-то так попробовать?
     
    Окно "Connect to PBX", так понимаю, не закрывается? Тогда не нужно получать его дескриптор в каждой итерации, а получить один раз до цикла и проверять существование. Тогда как-то так?
     
    Добавлено:
    Прошу прощения, забыл обновить страницу перед отправкой.
     
    В вашем варианте есть один недостаток: войти-то вы войдёте, но пароль не увидите, если не следите за вставкой каждого варианта
     
    Opt("WinTitleMatchMode", 4) достаточно указать один раз в начале скрипта, #include <Array.au3> здесь не нужно, ну и, наверное, лучше использовать не $aPasswords[1000000], а размер массива $aPasswords[0].

    Всего записей: 6597 | Зарегистр. 28-01-2008 | Отправлено: 13:28 24-01-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Вместо WinExists можно также WinWait использовать. Если в течении 5 сек окно не появилось, то вероятно пароль прошёл и сразу выдать его в мессагу и в буфер. А там уж пусть проверяет он или не он и начать ли обсчёт снова не с начала, а с этого пароля в списке. То есть не придётся цикл ожидания делать с WinExists.
     
    ControlSetText не требует стирать текст, должна заменять.
     
    ck80

    Цитата:
    Opt("WinTitleMatchMode", 4)
    Это тебе не нужно, это режим регулярных выражений, ключевых слов в выражении. Используй любое, только не "4". Например 2 - точное соответствие, так как у тебя указано имя окна с учётом регистра.
    Как сказал Skif_off если у тебя нет вывода пароля то ты каждый раз будешь его подбирать?
     

    Всего записей: 4560 | Зарегистр. 03-05-2006 | Отправлено: 15:07 24-01-2017
    ck80

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Skif_off
    Благодарю за помощь, но уже прерывать не хочется, много перебрал.
    При правильном вводе пароля откроется консоль управления, где можно будет изменить пароль.
    У меня их две АТСки, как эту откроет, на второй уже использую исправленный код.

    Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 06:49 25-01-2017
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, функция, запускаемая с помощью AdlibRegister(), выполняется  в отдельном потоке или в том же?

    Всего записей: 6597 | Зарегистр. 28-01-2008 | Отправлено: 21:10 25-01-2017
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    В том же, насколько я понял вопрос. Т.е. при её исполнении все остальные ждут.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 21:20 25-01-2017
    Fantasy22



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите как передать список поддерживаемых разрешений экрана в Combo (Выпадающий список)
     

    Код:
    #include <APIGdiConstants.au3>
    #include <WinAPIGdi.au3>
     
    Local $i = 0, $aData
     
    While 1
        $aData = _WinAPI_EnumDisplaySettings('', $i)
        If IsArray($aData) Then
            ConsoleWrite($aData[0] & ' x ' & $aData[1] & ' x ' & $aData[2] & ' bit' & ' x ' & $aData[3] & ' Hz' & @CRLF)
        Else
            ExitLoop
        EndIf
        $i += 1
    WEnd
     
    $aData = _WinAPI_EnumDisplaySettings('', $ENUM_CURRENT_SETTINGS)
    ConsoleWrite('-------------------------------' & @CRLF)
    ConsoleWrite('Current settings: ' & $aData[0] & ' x ' & $aData[1] & ' x ' & $aData[2] & ' bit' & ' x ' & $aData[3] & ' Hz' & @CRLF)


    Всего записей: 41 | Зарегистр. 24-10-2007 | Отправлено: 22:28 30-01-2017 | Исправлено: Fantasy22, 22:30 30-01-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