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

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

    Код:
    GUICtrlSetData(-1, $aData[0] & '|' & $aData[1] & '|' & $aData[2] & '|' & $aData[3])

    в справке всё это доступно

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 02:16 01-02-2017
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как можно обработать (точнее, получить) сообщение (число), отправленное окну скрипта с помощью PostMessage (дабы не усложнять)? Как, например, вызываются встроенные команды Total Commander отправкой сообщения (dec/hex).
     
    Или ткните, пожалуйста, где обсуждалось.

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 00:04 04-02-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    интеракции между скриптами
    такое пойдёт?
    Не пробовал, просто когда людям надо их направляют в эту тему...

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 09:08 04-02-2017
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Не совсем то, там речь об обмене данными между скриптами.
    В принципе, удалось решить с помощью OnAutoItExitRegister() и вызовом WinClose(), но было полно неожиданностей в процессе поиска из-за того, что скрываю окно

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 14:46 04-02-2017
    Scampy



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток всем! Имеется скрипт по определению видеустройств в системе (Радмин тоже входит в это число). Подскажите, можно ли все найденные устройства вывести не в Label, а в Combobox?

    Код:
     
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ComboConstants.au3>
     
    $GUI = GUICreate('test', 400, 200)
    $Label = GUICtrlCreateLabel("", 40, 40, 400, 47)
    $Combo = GUICtrlCreateCombo("", 40, 100, 250, 60)
     
    Dim $video
    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("Select * from Win32_VideoController")
    For $objItem In $colItems
        $video &= $objItem.Name & @CRLF
    Next
    GUICtrlSetData($Label, $video)
     
    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
       Select
          Case $msg = $GUI_EVENT_CLOSE
             ExitLoop
       EndSelect
     WEnd
     

    Всего записей: 162 | Зарегистр. 10-10-2008 | Отправлено: 14:03 06-02-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Scampy
    можно. Смотри первый мой пост на этой странице

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 00:28 07-02-2017
    Scampy



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Благодарю. До просмотра твоего ответа получилось как то так... не знаю насколько это корректно

    Код:
     
    #include <GUIConstantsEx.au3>
     
    $GUI = GUICreate("test", 474, 380, 400, 300)
    $Combo = GUICtrlCreateCombo("", 10, 10, 200, 20)
    $ObjService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    $ObjItems = $ObjService.ExecQuery("SELECT * FROM Win32_Videocontroller")
    If IsObj($ObjItems) Then
     Local $ObjItem, $i = 0
     For $ObjItem In $ObjItems
    GUICtrlSetData($Combo, $ObjItem.name)
     Next
    EndIf
     
    GUISetState(@SW_SHOW)
     
    While 1
    $msg = GUIGetMsg()
       Select
          Case $msg = $GUI_EVENT_CLOSE
          ExitLoop
       EndSelect
    WEnd
     

    Всего записей: 162 | Зарегистр. 10-10-2008 | Отправлено: 08:52 08-02-2017 | Исправлено: Scampy, 09:08 08-02-2017
    Parazit111



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет. Ув. скриптописцы, посоветуйте что-нибудь дельное.
    Вот у меня есть AutoIT скрипт, в котором я вызываю функцию.
     

    Код:
    Call(aaa, "wwwwwww", "ggggggggggggg", "kkkkkkkkkkkkk")
    Func aaa($rrr, $ttt, $yyy)
    MsgBox(0, "Msg", $rrr)
    MsgBox(0, "Msg", $ttt)
    MsgBox(0, "Msg", $yyy)
    EndFunc
     

     
    Он работает, но только в том случае, если количество аргументов, точно равно количеству принимаемых параметров вызываемой функции.
    Если их 2 или четыре, то функция уже не запускается. Ну так вот, что бы вы посоветовали? Какую можно сделать хитрость?

    Всего записей: 36 | Зарегистр. 19-01-2017 | Отправлено: 09:53 13-02-2017
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Parazit111
    Пример функции , при вызове может иметь от 0 до 3 аргументов.

    Код:
    Func aaa($rrr='', $ttt='', $yyy='')
    If $rrr<>'' then MsgBox(0, "Msg", $rrr)
    If $ttt<>'' then MsgBox(0, "Msg", $ttt)
    if $yyy<>'' thenMsgBox(0, "Msg", $yyy)
    EndFunc  

     
    Либо передавать функции подготовленный массив.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:19 13-02-2017 | Исправлено: NIKZZZZ, 10:20 13-02-2017
    Parazit111



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ, это срабатывает, когда аргументов меньше. Но когда аргументов больше, то функция не запускается

    Всего записей: 36 | Зарегистр. 19-01-2017 | Отправлено: 12:38 13-02-2017 | Исправлено: Parazit111, 12:51 13-02-2017
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Parazit111
    Так я же написал, передавать функции массив с нужным количеством аргументов, и обрабатывать его в цикле.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Parazit111
    Функция Call нужна для какого нибудь специалиста, который понимает что по другому не получится. Новичёк её использует обычно по незнанию, также как и я в своё время использовал Assign.
    Мне за 5 лет функция Call не пригодилась ни разу.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 19:42 13-02-2017 | Исправлено: AZJIO, 19:54 13-02-2017
    Parazit111



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO, а как бы вы посоветовали вызвать функцию из моего примера?

    Всего записей: 36 | Зарегистр. 19-01-2017 | Отправлено: 07:46 14-02-2017
    NIKZZZZ



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

    Код:
    aaa("wwwwwww", "ggggggggggggg", "kkkkkkkkkkkkk")  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 07:55 14-02-2017
    Parazit111



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ, так как должен быть правильно оформлен в моём примере вызов функции с использованием массива и цикла?

    Всего записей: 36 | Зарегистр. 19-01-2017 | Отправлено: 08:44 14-02-2017
    NIKZZZZ



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

    Код:
    Dim $asMsg[3]
    $asMsg[0]='11111'
    $asMsg[1]='22222'
    $asMsg[2]='33333'
     
    Msg($asMsg)
     
    Func Msg($asArg)
        For $i=0 To UBound($asArg)-1
            MsgBox(0,$i,$asArg[$i])
        Next
    EndFunc

     
     

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



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

    Цитата:
    AZJIO, а как бы вы посоветовали вызвать функцию из моего примера?

    Реально я не вижу примера. Представь программа содержит некоторые опции, а ты ей посылаешь некую опцию о которой функция/программа не знает. Все опции принимаемая функция должна знать в совершенстве, некоторые могут быть по умолчанию какими то значениями, но все они должны быть для функции определены/необходимы для выбора ветвления алгоритма. Не может функция принять новую опцию и думать зачем это мне подсунули, что с этим делать.
    Теперь передача данных в функцию, например сложить числа. Чисел может быть 2, а может быть 1000. Это для функции не опции, а данные. То есть некоторая информация которую нужно обработать/переделать/конвертировать. Допустим есть данные, которые надо сложить и одно число, на которое надо умножить, естественно данные для сложения надо передать в одном массиве в одном параметре, а множитель в другом. Хотя можно всё передать в одном массиве, первый элемент массива множитель, остальные элементы массива - числа для сложения. В общем изменяемые данные не передаются параметрами функции, обычно это массив однотипных данных обрабатываемых внутри функции в цикле.
     
    Не знаю как сейчас с обфускатором, но раньше для него была проблема функция Call, Assign и т.д., потому что генерируемые имена функций и переменных заданы неявно, например Assign(1+2, 4) создаст переменную $3, обфускатор не может вычислить разношёрстные закидоны программиста, там может быть сложная формула, из переменных, значение которых заранее неизвестно, соответственно обфускатор не может знать имя переменной, а значит не может обработать скрипт, потому что испортит имена тех переменных, имена которых не должны изменятся по определению. А значит функции Call, Assign, которые можно не использовать, и даже это удобно их не использовать, кроме того в дополнение не создавая ещё и  проблемы обфускации.
     
    Пример записи массива

    Код:
    Local $asMsg[3] = ['11111', '22222', '33333']
     
    Local $asMsg[3] = [ _
    '11111', _
    '22222', _
    '33333']

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 21:52 14-02-2017 | Исправлено: AZJIO, 22:29 14-02-2017
    Parazit111



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет. Такая задача. Вот у меня есть в открытых процессах текстовый редактор PSPad.  
    Я хочу открыть некий файл именно этим экземпляром программы. Сейчас же она запускает новый процесс.
    Я получаю хэндл, но не знаю, как им можно воспользоваться, чтобы запускать новый экземпляр программы.
    Может быть, мне надо использовать PID?
    Я так понял, что ни RUN ни ShellExecute не работают, ни с хэндлом ни с PID.
     

    Код:
    If WinExists("[Class:TfPSPad.UnicodeClass]") Then
    $PSPadHWND=WinGetHandle("[Class:TfPSPad.UnicodeClass]")
    WinActivate($PSPadHWND)
    Local $sClp = ClipGet()
    Run("C:\Program\PSPad\PSPad.exe " & '"' & $sClp & '"')
     

    Что можно сделать?
    Может быть такое лучше реализовать на JScript или VBScript?

    Всего записей: 36 | Зарегистр. 19-01-2017 | Отправлено: 11:56 28-02-2017
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Parazit111
    Как запущен экземпляр программы? По умолчанию файлы открываются в новых вкладках запущенного PSPad.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Parazit111
    1. Попробуй ShellExecute (не уверен, но на всякий случай)
    2. Может в настройках есть опция использование того же процесса, как в Notepad++?
    3. Дескриптор ничего не даст и PID тоже. Если программрй не устроено, то хоть завызывайся, будет делать так как устроено. Но если есть вкладки, значит должно работать. Посмотри параметры коммандной строки.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 14:38 28-02-2017 | Исправлено: AZJIO, 14:38 28-02-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