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

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



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

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 12:39 05-12-2015 | Исправлено: Artem_Butenko, 14:05 05-12-2015
    Skif_off

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

    Код:
    #NoTrayIcon
    #include <WinAPIEx.au3>
     
    Opt('WinWaitDelay', 100)
     
    $iPID = _WinAPI_GetParentProcess(@AutoItPID)
     
    $Title = _Process2Win($iPID)
     
    Func _Process2Win($Pid)
        Local $List, $wPid, $i
        If IsString($Pid) Then $Pid = ProcessExists($Pid)
        If $Pid = 0 Then Return -1
        $List = WinList()
        For $i = 1 To $List[0][0]
            If $List[$i][0] <> '' And BitAND(WinGetState($List[$i][1]), 2) Then
                $wPid = WinGetProcess($List[$i][1])
                If $wPid = $Pid Then Return $List[$i][1]
            EndIf
        Next
        Return -1
    EndFunc   ;==>_Process2Win

    Return $List[$i][0] вернёт заголовок
    Класс окна:

    Код:
    WinGetClassList($Title)

    Всего записей: 6597 | Зарегистр. 28-01-2008 | Отправлено: 21:51 05-12-2015
    Kopeheb

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток
    Давно хотелось бы понять как реализовать такое в AutoIt.
       
    Собственно:
    есть список в теле html, который время от времени нуждается в редактировании.  
    хотелось бы научиться либо редактировать тело html между квадратными скобками, где находится список, либо написать полностью все на AutoIt.
    Почему нужны такие понты? во1х прикольно, во2х GUI ,always on top, маленький, в3х хочу более понять StringRegExp и продвинуться в грамотном написания pattern.
    за ранее спасибо
     

    Всего записей: 3 | Зарегистр. 19-08-2015 | Отправлено: 00:25 12-12-2015 | Исправлено: Kopeheb, 20:31 13-12-2015
    SvERxV



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не могу понять, как очистить поле ввода, при щелчке по нему, чтобы ввести значение.
     
    Пример, если у меня есть "Введите ID" оно отображается при старте скрипта/программы, - в качестве значения по умолчанию, я хочу, чтобы поле было очищено, когда я щелкну по нему, чтобы ввести другое значение. А если я ничего не введу, то вернулось снова "Введите ID".
     

    Всего записей: 15 | Зарегистр. 16-12-2013 | Отправлено: 20:46 15-12-2015 | Исправлено: SvERxV, 21:00 15-12-2015
    svs123456789

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    хотелось использовать сабх для автоматизации нажатий кнопок в программах...
    однако  
    ;AutoIt supports no ToolbarWindow32
    и
    ;AutoIt supports no Owner drawn Buttons (or CheckBoxes, RadioButtons and Groupboxes: only ControlClick is possible...
     

    Всего записей: 2941 | Зарегистр. 10-04-2003 | Отправлено: 16:28 01-01-2016
    OnMyDSeeAtAll



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    @SvERxV Наверное так как-то.

    Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 18:00 12-01-2016
    321new



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите собрать кусок кода:
    Алгоритм:
    1. Спрашиваю количество элементов (к примеру 5)
    2. Создаю количество переменных, равное цифре из 1 пункта (в данном случае 5 переменных)
    3. Спрашиваю у пользователя значения этих переменных и заполняю эти переменные полученными данными (текст, цифры, любые знаки)
    4. Вывожу в ini файл значения в виде:
    Переменная1=значение переменной1 от пользователя
    Переменная2=значение переменной2 от пользователя
    Переменных столько, сколько в п.1 указал пользователь
    идей нет
     
    На данный момент основная трудность - это в имя переменной вставить другую переменную. К примеру, переменные $File_1 $File_2 и т.п. - использовать как шаблон с общим $File_ и подстановкой $Num вместо 1, 2 и т.п. Ну и присвоить в результате им значения пользователя, как переменным $File_1, $File_2 и т.п.

    Всего записей: 463 | Зарегистр. 03-11-2011 | Отправлено: 16:30 18-01-2016 | Исправлено: 321new, 20:20 18-01-2016
    dedmazai1870



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    321new
    Я не большой гуру в AutoIt. Вот от "нечего делать" сваял, может пригодится.

    Всего записей: 1386 | Зарегистр. 07-07-2012 | Отправлено: 20:54 18-01-2016 | Исправлено: dedmazai1870, 20:58 18-01-2016
    321new



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dedmazai1870, и тем не менее, спасибо, то что нужно)

    Всего записей: 463 | Зарегистр. 03-11-2011 | Отправлено: 21:28 18-01-2016
    OTOXI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет
    У меня не получается просто вызвать команду "Выполнить" т.е.Win+R
    Пишу вот это

    Код:
    Send("{LWin}{R}")

    И открывается меню Пуск а строке поиска пишет букву R

    Всего записей: 23 | Зарегистр. 08-07-2010 | Отправлено: 18:45 28-01-2016
    nik4z



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

    Цитата:
    Send("#r")  


    Всего записей: 218 | Зарегистр. 08-11-2015 | Отправлено: 19:17 28-01-2016 | Исправлено: nik4z, 19:24 28-01-2016
    OTOXI

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

    Код:
    Send("#r")

     
    не могу объяснить почему но не работает
    Я и так пробовал - не запускается

    Код:
    Send("{LWINDOWN}r{LWINUP}")

    Всего записей: 23 | Зарегистр. 08-07-2010 | Отправлено: 20:44 28-01-2016 | Исправлено: OTOXI, 20:48 28-01-2016
    nik4z



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OTOXI
    Немного странно, у меня работает

    Код:
    Send("{rWIN down}r{rWIN up}")

    Но не работает

    Код:
    Send("{lWIN down}r{lWIN up}")

    Странно и непонятно.  

    Всего записей: 218 | Зарегистр. 08-11-2015 | Отправлено: 22:56 28-01-2016
    dedmazai1870



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OTOXI
    Попробовал записать Au3Record. Получилась такая команда
    Send("{LWINDOWN}r{LWINUP}")
    У меня работает.

    Всего записей: 1386 | Зарегистр. 07-07-2012 | Отправлено: 10:25 29-01-2016
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет здешние жители.
    Скажу сразу что в этой программе и в языке скриптов мало что понимаю. Но возникла необходимость подправить чужой код.
    Суть проблемы: нужно скопировать файлы в директорию System32 а потом их удалить. Скопировать получается, написан код удаления, но файлы не удаляются.  
    Предполагаю что проблема в правах доступа, хотя учётка админа.
    Если возможно, подскажите код который сможет удалить из системной директории файлы.
     
    Спасибо.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 11:44 29-01-2016
    Skif_off

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

    Цитата:
    Предполагаю что проблема в правах доступа, хотя учётка админа.

    Если

    Цитата:
    Скопировать получается

    то дело не в правах. Это *.exe и/или *.dll? Возможно, они всё ещё запущены/загружены?
     
    Какая ОС? Битность? И кусок кода с копированием/удалением покажите, пожалуйста.

    Всего записей: 6597 | Зарегистр. 28-01-2008 | Отправлено: 12:20 29-01-2016
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Подумал о о том что могут быть ещё загружены, но не должны. Перед этим идёт код выгрузки всего что загружено. Скрипт управляет запуском программы. По завершении работы программы скрипт удаляет всё ненужное и сам выгружается. На самом деле это скрипт отсюда: https://github.com/vboxme/Portable-VirtualBox/blob/master/source/Portable-VirtualBox.au3 Удалит хочу библиотеку. Вынь 7 32
    Встывыш моего кода в оригинальный скрипт:
    Копирование:
     
          If @OSArch = "x64" Then
            If NOT FileExists (@SystemDir&"\msvcp80.dll") OR NOT FileExists (@SystemDir&"\msvcr80.dll") Then
              FileCopy (@ScriptDir&"\app64\msvcp80.dll", @SystemDir, 9)
              FileCopy (@ScriptDir&"\app64\msvcr80.dll", @SystemDir, 9)
              Local $msv = 2
            Else
              Local $msv = 0
            EndIf
          EndIf
     
    --- моё
     
          If @OSArch = "x86" Then
            If NOT FileExists (@SystemDir&"\ssleay32.dll") Then
              If FileExists (@ScriptDir&"\app32\ssleay32.dll") Then
                FileCopy (@ScriptDir&"\app32\ssleay32.dll", @SystemDir, 9)
              EndIf
              If FileExists (@ScriptDir&"\app32\libeay32.dll") Then
                FileCopy (@ScriptDir&"\app32\libeay32.dll", @SystemDir, 9)
              EndIf
              $SSLLib = 1
            EndIf
          EndIf
     
          If @OSArch = "x64" Then
            If NOT FileExists (@SystemDir&"\ssleay32.dll") Then
              If FileExists (@ScriptDir&"\app64\ssleay32.dll") Then
                FileCopy (@ScriptDir&"\app64\ssleay32.dll", @SystemDir, 9)
              EndIf
              If FileExists (@ScriptDir&"\app64\libeay32.dll") Then
                FileCopy (@ScriptDir&"\app64\libeay32.dll", @SystemDir, 9)
              EndIf
              $SSLLib = 1
            EndIf
          EndIf
     
    --- моё
     
          If FileExists (@ScriptDir&"\"& $arch &"\") AND FileExists (@ScriptDir&"\vboxadditions\") Then
            DirMove (@ScriptDir&"\vboxadditions\doc", @ScriptDir&"\"& $arch, 1)
            DirMove (@ScriptDir&"\vboxadditions\ExtensionPacks", @ScriptDir&"\"& $arch, 1)
            DirMove (@ScriptDir&"\vboxadditions\nls", @ScriptDir&"\"& $arch, 1)
            FileMove (@ScriptDir&"\vboxadditions\guestadditions\*.*", @ScriptDir&"\"& $arch &"\", 9)
          Endif
     
    Удаление:
     
          If $msv = 2 Then
            FileDelete (@SystemDir&"\msvcp80.dll")
            FileDelete (@SystemDir&"\msvcr80.dll")
          EndIf
     
    --- моё
     
          If $SSLLib = 1 Then
            If FileExists (@SystemDir&"\ssleay32.dll") Then
              FileDelete (@SystemDir&"\ssleay32.dll")
            EndIf
            If FileExists (@SystemDir&"\libeay32.dll") Then
              FileDelete (@SystemDir&"\libeay32.dll")
            EndIf
          EndIf
     
    --- моё
     
          If $DRV = 1 Then
            RunWait ("sc delete VBoxDRV", @ScriptDir, @SW_HIDE)
          EndIf

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:57 29-01-2016
    OTOXI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не подскажет ли кто нибудь на 2-х 3-х примерах как работает команда Если-то (if /end if)
    Спасибо

    Всего записей: 23 | Зарегистр. 08-07-2010 | Отправлено: 14:50 29-01-2016
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    Другими средствами (cmd или вручную) не удаляются? По идее не должно быть проблем, у себя не наблюдаю. Все дочерние процессы точно завершаются? В Process Hacker можно посмотреть, добавив столбец с именем файла и отсортировав процессы.
    Может, антивирусник забаловал?
     
    Что-нибудь типа такого для проверки:

    Код:
    Local $iTime
     
    If $msv = 2 Then
        While FileExists(@SystemDir & "\msvcp71.dll")
            FileDelete(@SystemDir & "\msvcp71.dll")
            FileDelete(@SystemDir & "\msvcr71.dll")
            FileDelete(@SystemDir & "\msvcrt.dll")
            Sleep(100)
            If FileExists(@SystemDir & "\msvcp71.dll") Or FileExists(@SystemDir & "\msvcr71.dll") Or FileExists(@SystemDir & "\msvcrt.dll") Then
                $iTime += 1
                If $iTime > 10 Then
                    MsgBox(4096, "msvc*.dll", "10 попыток, не удалось")
                    ExitLoop
                EndIf
                MsgBox(4096, "msvc*.dll", "Попытка " & $iTime & " не удалась")
            Else
                MsgBox(4096, "msvc*.dll", "Удалены")
            EndIf
            Sleep(60000)
        WEnd
    EndIf

    10 попыток удаления с паузой в минуту, с сообщениями, если всё-таки удалит - значит, чем-то были заняты.
     
     
    P.S. Вообще, логика странная: та же msvcrt.dll присутствует в Win7 из коробки.
     
    P.P.S. Попробовал на WinXP и на Win7x64 - так и не понял, откуда вообще берутся msvc*.dll.
     
    Добавлено:
    OTOXI
    If...Then
    If...ElseIf...Else...EndIf

    Всего записей: 6597 | Зарегистр. 28-01-2008 | Отправлено: 15:04 29-01-2016 | Исправлено: Skif_off, 15:14 29-01-2016
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Вручную удаляются после закрытия окна. В процессе закрытия конечно не поймаешь этот момент. Дочерние завершаются, но все ссылки от процессов конечно не отследишь. Но в конечном итоге всё завершается, это точно. Конечно антивирусник хитрая штука и пока файл не подпишешь сертификатом вообще его удалял как не надёжный. Но всё равно не думаю что это его вина.
    Я удаляю библиотеки OpenSSL, но смысл цикла понятен и я попробую.

    Цитата:
    P.S. Попробовал на WinXP и на Win7x64 - так и не понял, откуда вообще берутся msvc*.dll.  

    Это осталось ещё со времён XP и когда сам Бокс компилировался в студии пониже, вот и остались следы в коде на всякий случай.
    Отпишусь если что-то получится или не получится...

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 15:24 29-01-2016
       

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