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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Когда то давно натыкался на решение, которое позволяло сверху уже ГОТОВОГО окна примерно накидывать кнопки, что бы понять какие координаты им прописывать, а не угадывать. Что то вроде рамки кажется...
     
    Никто не помнит что это было?
     
    Или может кто поделиться другим быстрым и удобным способом редактирования готового окна? ну там кнопочку добавить, поджать кауой-нибудь  слишком большой элемент?

    Всего записей: 1464 | Зарегистр. 03-08-2003 | Отправлено: 17:49 05-11-2014 | Исправлено: LaVas_ki, 17:50 05-11-2014
    Skif_off

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

    Цитата:
    Или может кто поделиться другим быстрым и удобным способом редактирования готового окна? ну там кнопочку добавить, поджать кауой-нибудь  слишком большой элемент?

    Koda и Form Builder, ссылки в шапке. Но у второго есть небольшая проблема, решение - ответ ниже.
     
    Добавлено:
    Ан нет, не срабатывает, вылезает уже другая ошибка

    Цитата:
    Line 7746  (File "C:\Program Files\AutoIt3\Form Builder\Form Builder Source fix.au3"):
    If $DisplayArray[$hCurWindow] = False Then
    If ^ ERROR
    Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.

    Но там не зареган.

    Всего записей: 6482 | Зарегистр. 28-01-2008 | Отправлено: 18:08 05-11-2014
    LaVas_ki

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А Кода почему не открывает скрипты? у него есть такая опция, но ничего не происходит.
    Меня вот интересует именно момент редактирования, когда кнопочку вписать надо, а от нее все съезжает ) и высчитывать становится лень
     
    Добавлено:

    Цитата:
    Ан нет, не срабатывает, вылезает уже другая ошибка  

    если я правильно понял ошибка при изменении имени формы?
    у меня ошибка исчезла
     
    только вот в исходниках половины пиктограмм на кнопках самой софтины нет, и не понятно чего они делают (
    +какие то ошибки постоянно, в ЕХЕ ничего этого нет
    или обязательно надо компилировать скрипт в ехе?

    Всего записей: 1464 | Зарегистр. 03-08-2003 | Отправлено: 18:31 05-11-2014 | Исправлено: LaVas_ki, 19:14 05-11-2014
    AZJIO



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

    Цитата:
    Когда то давно натыкался на решение, которое позволяло сверху уже ГОТОВОГО окна примерно накидывать кнопки, что бы понять какие координаты им прописывать, а не угадывать. Что то вроде рамки кажется...  

    CreationGui
     

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 19:40 05-11-2014
    yozhic



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кажется где-то было, или я ошибаюсь: по известному PID узнать дескриптор окна?

    Всего записей: 2773 | Зарегистр. 20-03-2008 | Отправлено: 21:10 05-11-2014
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yozhic
    Получить список окон (WinList) и найти в них PID (WinGetProcess)

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 21:20 05-11-2014
    Skif_off

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

    Цитата:
    по известному PID узнать дескриптор окна?

    На форуме русского сообщества обычно предлагают

    Код:
    Func _Process2Win($Pid)
        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

    Если $List = WinList() заменить на более конкретный вариант, например, $List = WinList('[CLASS:TTOTAL_CMD]'), то можно получить заметное ускорение.

    Всего записей: 6482 | Зарегистр. 28-01-2008 | Отправлено: 21:38 05-11-2014
    LaVas_ki

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто нибудь пользуется Form Builder? почему в исходниках на некоторых кнопках нет иконок?
     
    Добавлено:

    Цитата:
    CreationGui

    да, кажется оно, спасибо

    Всего записей: 1464 | Зарегистр. 03-08-2003 | Отправлено: 23:54 05-11-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Может быть, CreationGui добавить в шапку? Крутая штука.

    Всего записей: 6482 | Зарегистр. 28-01-2008 | Отправлено: 03:29 06-11-2014
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Оно есть в шапке, но зарыто глубоко "Ресурсы, посвящённые AutoIt -> Коллекция AutoIt-скриптов [?] от AZJIO ". Оно ведь не определишь кому что является крутым на текущий момент. И кстати я бы переделал, писалось несколько лет назад. Вполне бы можно было сделать перетягиваемые границы элементов, изменять тексты элементов, дефолтные имена элементов и переменных хранить в ini, переработать фейс окна да и просто ревизию кода.
     
    Ещё идейка была чтобы не патчить shel32.dll сделать настройщик иконок через реестр, так сказать легитимно, но с windows пока завязал. Просто когда кому-то настраиваю, так и хочется в WinXP нормальные иконки воткнуть, а не те что 2001 года.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 07:17 07-11-2014 | Исправлено: AZJIO, 07:20 07-11-2014
    yozhic



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

    Цитата:
    И кстати я бы переделал, писалось несколько лет назад.

    Хорошая идея. Мне тоже скрипт по душе пришёлся, и больше чем Form Builder.
    Если займётесь, то вот вам баг-репорт. Запускаю скрипт -> выбираю мышью элемент в списке справа (появляется в клиентской области) -> жму delete (удаляю элемент) -> после этого нажатие на любую из клавиш стрелок приводит к ошибке:

    Код:
     
    Line 390  (File "...CreationGui.exe"):
    Error: Subscript used with non-Array variable.
     

    Воспроизводится на ХР и на 8.1, АвтоИт 3.3.8.1.

    Всего записей: 2773 | Зарегистр. 20-03-2008 | Отправлено: 13:38 07-11-2014 | Исправлено: yozhic, 13:41 07-11-2014
    AlexM2222



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! прошу сильно не пинать если всё просто, первый раз этим занимаюсь!
    Наваял для себя скриптик для установки Windows 7,

    Код:
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=c:\program files\autoit3\koda\forms\form2.kxf
    $Form1_1 = GUICreate("Windows 7 Ultimate SP1 (32-bit)", 348, 260, -1, -1, $WS_MINIMIZEBOX)
    $Group1 = GUICtrlCreateGroup(" Установка Windows 7 Ultimate ", 8, 8, 326, 90)
    GUICtrlSetFont(-1, 10, 400, 0, "Tahoma")
    $Button1 = GUICtrlCreateButton("Установка Windows 7 Ultimate (стандартная)", 16, 32, 310, 25)
    GUICtrlSetTip(-1, "Начать установку Windows 7 Ultimate (32-bit). Почти все параметры устанавливаются вручную.")
    $Button2 = GUICtrlCreateButton("Установка Windows 7 Ultimate (автоматическая)", 16, 65, 310, 25)
    GUICtrlSetTip(-1, "Начать установку Windows 7 Ultimate (32-bit). Все параметры устанавливаются автоматически (кроме разметки диска).")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup(" Восстановлениие системы ", 8, 106, 326, 57)
    GUICtrlSetFont(-1, 10, 400, 0, "Tahoma")
    $Button3 = GUICtrlCreateButton("Запуск восстановления системы", 16, 130, 310, 25)
    GUICtrlSetTip(-1, "Запустить среду восстановления Windows 7 (32-bit).")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup(" Завершение работы ", 8, 168, 326, 57)
    GUICtrlSetFont(-1, 10, 400, 0, "Tahoma")
    $Button4 = GUICtrlCreateButton("Выключение", 16, 192, 151, 25)
    GUICtrlSetTip(-1, "Завершение программы и выключение системы.")
    $Button5 = GUICtrlCreateButton("Перезагрузка", 175, 192, 151, 25)
    GUICtrlSetTip(-1, "Завершение программы и перезагрузка системы.")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $button1
                Run("%SystemDrive%\Setup.exe /unattend:X:\Sources\Scripts\Auto\Manual.xml", "", @SW_HIDE)
            Case $button2
                Run("%SystemDrive%\Setup.exe /unattend:X:\Sources\Scripts\Auto\Unattend.xml", "", @SW_HIDE)            
            Case $button3
                Run("X:\sources\recovery\recenv.exe", "", @SW_MINIMIZE)        
            Case $button4
                Shutdown(8)        
            Case $button5
                Shutdown(2)    
                Exit
        EndSwitch
    WEnd
     

     но появилось пару вопросов:
    При нажатии кнопки 1 и 2 нужно чтобы форма закрывалась и начинался процесс установки (правильно ли я прописал эту команду);
    При нажатии кнопки 3 нужно чтобы запускалось recenv.exe и форма сворачивалась, а при закрытии recenv.exe - восстанавливалась (здесь у меня стопор - не знаю как сделать).
    Cкрипт конвертирую в Loader.exe и скопирую вместе с содержимым папки Sources_My в второй образ boot.wim.
    http://rghost.ru/58938434
    Помогите кто может пожалуйста...

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 17:57 07-11-2014 | Исправлено: AlexM2222, 18:27 07-11-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    Зачем вы используете @SW_HIDE? Это скроет окно инсталлера.
     

    Цитата:
    При нажатии кнопки 1 и 2 нужно чтобы форма закрывалась и начинался процесс установки

    Если такая структура
    X:\Sources\
    X:\Sources\Scripts\Auto\Unattend.xml
    X:\Sources\Scripts\Auto\Manual.xml
    X:\Setup.exe
    X:\Loader.exe
    то, например

    Код:
        Case $button1
            Run(@ScriptDir & '\Setup.exe /unattend:' & @ScriptDir & '\Scripts\Auto\Manual.xml')
            Exit
        Case $button2
            Run(@ScriptDir & '\Setup.exe /unattend:' & @ScriptDir & '\Sources\Scripts\Auto\Unattend.xml')
            Exit


    Цитата:
    При нажатии кнопки 3 нужно чтобы запускалось recenv.exe и форма сворачивалась, а при закрытии recenv.exe - восстанавливалась


    Код:
        Case $button3
            WinSetState($Form1_1, '', @SW_MINIMIZE)
            RunWait(@ScriptDir & '\sources\recovery\recenv.exe')
            WinSetState($Form1_1, '', @SW_RESTORE)

     
     
    Добавлено:
    И ещё момент

    Код:
        $nMsg = GUIGetMsg()
        Switch $nMsg
    ;можно заменить на
        Switch GUIGetMsg()

    Всего записей: 6482 | Зарегистр. 28-01-2008 | Отправлено: 19:03 07-11-2014 | Исправлено: Skif_off, 19:08 07-11-2014
    AlexM2222



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

    Цитата:
    Если такая структура  X:\Sources\  X:\Sources\Scripts\Auto\Unattend.xml  X:\Sources\Scripts\Auto\Manual.xml  X:\Setup.exe  X:\Loader.exe

     
    Структура немного не такая
    X:\Sources\Loader.exe
    Setup.exe находится на DVD приводе в папке sources, т.е. DVD:\sources\Setup.exe ,где DVD - привод который нужно определять...

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 20:02 07-11-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    Понятно, тут есть пример определения буквы по маркеру. В общем, если папка Scripts будет лежать рядом с Loader.exe и я всё понял, то тогда как-то так
     
    З.Ы. Судя по X:\ - будет использоваться в своём WinPE? Обычно поддержку AutoIt добавляют, может быть, нет смысла компилировать и оставить Loader.au3?
     
    Добавлено:
    Почему Shutdown(8)? В примере к функции Shutdown(1 + 8) для выключения.

    Всего записей: 6482 | Зарегистр. 28-01-2008 | Отправлено: 21:19 07-11-2014 | Исправлено: Skif_off, 21:22 07-11-2014
    AlexM2222



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off, спасибо! Завтра буду пробовать такой вариант и потом отпишусь...
    Читать дальше..

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 22:32 07-11-2014
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222, Skif_off,
    Для своего окна лучше использовать GUISetState, а не WinSetState.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 10:35 08-11-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Точно, забыл, хотя утром читал про GUISetState() и @SW_LOCK/@SW_UNLOCK.
    Всё хотел спросить, но как-то руки не доходили: а почему? Ведь и там, и там используется дескриптор.

    Всего записей: 6482 | Зарегистр. 28-01-2008 | Отправлено: 11:07 08-11-2014
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Цитата:
    а почему? Ведь и там, и там используется дескриптор.
    ИМХО, GUISetState работает непосредственно с окном, а WinSetState и др. функции Win* сначала ищут окно и проверяют наличие текста в его элементах, и только потом выполняют с ним нужные действия.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:57 08-11-2014
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    GUISetState более роднее для родного окна, а по сути внутри они работают одинаково в отношении своих параметров. Условно если в WinSetState параметр text='' то искать он его не будет, так же и при использовании дескриптора он тоже искать его не будет. Вероятно там Switch, которая в зависимости от параметра определяет функционал поиска, но при дескрипторе искать не требуется, просто продолжит следующую ветвь алгоритма. Разница может оказаться в скорости выполнения обычно в цикле, но это чаще для элементов (Control...), а не для окна. Но всё ранво правильнее будет использовать для родных окон функции из раздела обработки родных окно, а для внешних окон использовать функции из раздела обработки внешних окон. Можно использовать Win... в случае отсутствия какого-либо функционала в родном разделе, а иначе код будет сбивать столку.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 14:05 08-11-2014
       

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