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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud,
    Теперь понятно. Посмотрите примеры к функциям _WinAPI_AddIconOverlay() и _WinAPI_AddIconTransparency() из WinAPIEx.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 18:37 16-10-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    помогите пожалуйста абсолютному диллетанту завершить установку  
    Nero_KwikMedia-11.0.15300_free
     
    сейчас это выглядит так
     
    установщик на всем пути установки не меняет заголовок, который выглядит «Nero Kwik Media», мастер «InstallShield»
    в конце установки выводится окно, которого следует дождаться, в котором есть ниже подзаголовок Программа InstallShield Wizard завершена
    и внизу кнопка Готово
    сердцем чую что будет что-то подобное
    WinWaitActive ("«Nero Kwik Media», мастер «InstallShield»")
    ControlClick ('«Nero Kwik Media», мастер «InstallShield»','Программа InstallShield Wizard завершена','Button1')
    вместо Button1 как вариант сойдет
    Send("{ENTER}")
    прошу помочь советом по завершению установки и/или оптимизации/универсализации скрипта

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 02:27 17-10-2011
    Neo45

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    5peciali5t
    В этом инсталяторе должна поддерживаться тихая установка. Но для каждого типа инсталятора свой ключ.
    ____________________________________________________________________________________________
     
    5peciali5t
     
    Благодарю за разьяснения

    Всего записей: 47 | Зарегистр. 20-02-2011 | Отправлено: 17:57 17-10-2011 | Исправлено: Neo45, 18:25 23-10-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Neo45
    я в курсе, если в обратите внимание на код, он стартует с ключем /s
    Run ('Nero.exe /s')  
    это позволяет автоматически скрыто установить несколько необходимых для общей установки продукта системных библиотек типа visual c++ а установщик уже непосредственно самого приложение встает колом уже на установке nero toolbar и остальная установка тоже проходит только в ручном режиме, почему я и решил воспользоваться autoit и допинать ее до завершения скриптом.
    данная программа предназначена для бесплатного домашнего использования и обладает минимальным функционалом, поэтому неудивительно что по сути полностью не предназначена для политик разворачивания и автоматической установки (по злому умыслу или сознательно - "зачем им там автоматическая установка")
    поэтому я и сделал автоматическую установку для своего WPI сборника бесплатного софта и остался открытым вопрос, как поймать завершающий этап и нажать кнопку Готово.
     
    если хотите можете сами попробовать ее тихо установить
    официальный ресурс #

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 20:29 17-10-2011 | Исправлено: 5peciali5t, 20:30 17-10-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    5peciali5t, HERO вот так устанавливал даже с серийником:

    Код:
    $file="setup.exe"
    RunWait(@ScriptDir & "\" & $file & " /SILENT /sn=серийник /write_sn")

    У HERO очень много команд с командной строки
     
     
    Вот сделал окно, оно как поплавок, всегда на виду, не скрывается за краем рабочего стола, но вот не смог сделать чтобы отпружинивало и от панели задач.

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
     
    $MainGUI = GUICreate('', 300, 105, -1, -1, -1)
    GUISetState()
    GUIRegisterMsg(0x0232, "WM_EXITSIZEMOVE")
     
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
     
    Func WM_EXITSIZEMOVE($hWnd, $MsgID, $WParam, $LParam)
    $aGuiPos = WinGetPos($MainGUI)
    If $aGuiPos[0] < 0 Then
    WinMove($MainGUI, '', 0, $aGuiPos[1], 306, 137)
    EndIf
    If $aGuiPos[1] < 0 Then
    WinMove($MainGUI, '', $aGuiPos[0], 0, 306, 137)
    EndIf
    If $aGuiPos[0] + 306 > @DesktopWidth Then
    WinMove($MainGUI, '', @DesktopWidth - 306, $aGuiPos[1], 306, 137)
    EndIf
    If $aGuiPos[1] + 137 > @DesktopHeight Then
    WinMove($MainGUI, '', $aGuiPos[0], @DesktopHeight - 137, 306, 137)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 21:24 17-10-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor,
    Попробуйте так:
    Код:
    #include <GUIConstantsEx.au3>
     
    Global Const $WM_EXITSIZEMOVE = 0x0232
     
    $hMainGUI = GUICreate('', 300, 105, -1, -1, -1)
    GUISetState()
    GUIRegisterMsg($WM_EXITSIZEMOVE, 'WM_EXITSIZEMOVE')
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
     
    Func WM_EXITSIZEMOVE($hWnd, $iMsg, $iwParam, $ilParam)
        Local $a_TrayPos = WinGetPos('[Class:Shell_TrayWnd]')
        Local $a_GuiPos = WinGetPos($hWnd)
        If $a_GuiPos[0] < 0 Then
            WinMove($hWnd, '', 0, $a_GuiPos[1])
            $a_GuiPos = WinGetPos($hWnd)
        EndIf
        If $a_GuiPos[1] < 0 Then
            WinMove($hWnd, '', $a_GuiPos[0], 0)
            $a_GuiPos = WinGetPos($hWnd)
        EndIf
        If $a_GuiPos[0] + $a_GuiPos[2] > @DesktopWidth Then
            WinMove($hWnd, '', @DesktopWidth - $a_GuiPos[2], $a_GuiPos[1])
            $a_GuiPos = WinGetPos($hWnd)
        EndIf
        If $a_GuiPos[1] + $a_GuiPos[3] > @DesktopHeight - $a_TrayPos[3] Then
            WinMove($hWnd, '', $a_GuiPos[0], @DesktopHeight - $a_GuiPos[3] - $a_TrayPos[3])
        EndIf
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_EXITSIZEMOVE


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:17 17-10-2011
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    5peciali5t, скачал. Тестировал на чистой виртуалке XP Sp3.
    Псоле установки Flash Player 11.0 система ушла в ребут. Потом после перезагрузки начинается второй этап. Вот скрипт для первой части:
    Код:
    $sAskTitle = "Установка Nero Ask Toolbar"
    $sFlashTitle = "Программа установки Adobe® Flash® Player 11.0"
    Run (@ScriptDir & "\Nero_KwikMedia-11.0.15300_free.exe /s")
    WinWait ($sAskTitle) ; ожидаем появления окна Тулбара
    WinActivate ($sAskTitle) ; делаем окно активным (если вдруг оно потеряло фокус)
    Sleep (500)
    ControlClick ($sAskTitle, "", "Button2") ; снимаем чекбокс (странно, определяется как кнопка)
    ControlClick ($sAskTitle, "", "Button1") ; нажимаем "След.>"
    WinWait ($sFlashTitle) ; ожидаем появления окна Флеша
    WinActivate ($sFlashTitle) ; делаем окно активным (если вдруг оно потеряло фокус)
    Sleep (500)
    ControlClick ($sFlashTitle, "", "Button4") ; отмечаем чекбокс
    ControlClick ($sFlashTitle, "", "Button3") ; нажимаем "Установка"
    Sleep (500)
    While 1 ; проверяем в цикле активна ли кнопка 3, если да значит уже готово
        If ControlCommand ($sFlashTitle, "", "Button3", "IsEnabled", "") = 1 Then
            ExitLoop
    ; выходим из цикла
        EndIf
        Sleep (100) ; пауза, чтобы не грузить проц в цикле
    WEnd
    WinActivate ($sFlashTitle) ; делаем окно активным (если вдруг оно потеряло фокус)
    Sleep (500)
    ControlClick ($sFlashTitle, "", "Button3") ; нажимаем "Готово"

    Второй кусок, после перезагрузки:
    Код:
    $sNeroTitle = "«Nero Kwik Media», мастер «InstallShield»"
    WinWait ($sNeroTitle) ; ожидаем появления окна Nero
    WinActivate ($sNeroTitle) ; делаем окно активным (если вдруг оно потеряло фокус)
    Sleep (500)
    ControlClick ($sNeroTitle, "", "Button3") ; принимаем условия
    Sleep (200)
    ControlClick ($sNeroTitle, "", "Button4") ; нажимаем "Далее >"
    Sleep (500)
    ControlClick ($sNeroTitle, "", "Button8") ; отказываемся учавствовать в какойто хрени
    Sleep (200)
    ControlClick ($sNeroTitle, "", "Button1") ; нажимаем "Установить"
    While 1 ; проверяем в цикле какой текст на кнопке 1
        If ControlGetText ($sNeroTitle, "", "Button1") =  "&Готово" Then
            ExitLoop
    ; выходим из цикла
        EndIf
        Sleep (100) ; пауза, чтобы не грузить проц в цикле
    WEnd
    WinActivate ($sNeroTitle) ; делаем окно активным (если вдруг оно потеряло фокус)
    Sleep (500)
    ControlClick ($sNeroTitle, "", "Button1") ; нажимаем "Готово"

    Но полноценно не тестировал.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 22:18 17-10-2011 | Исправлено: ynbIpb, 22:56 17-10-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles, если внизу панель задач, то всё хорошо работает, а если сбоку
    то окно совсем прячется из виду  
    Может попробовать через  DllCall , хотя я эту функцию вообще не могу понять.

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 23:16 17-10-2011
    madmasles

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

    Цитата:
    сли внизу панель задач, то всё хорошо работает, а если сбоку  
     то окно совсем прячется из виду
    Анализируйте все 4 значения WinGetPos('[Class:Shell_TrayWnd]') и, в зависимости от положения, меняйте условия.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 23:40 17-10-2011
    Cosmogor



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

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 00:02 18-10-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ynbIpb
    спасибо за отзыв!
     
    у меня в оболочке WPI одной из установок до установки Nero идет установка Flash Player 11.0
    install_flash_player_active_x.exe -install  
    для обеих разрядностей и поэтому это окно с предложением его установки в процессе установки Nero и ребут отсутствуют.
    также пришлось поправить
    Sleep (200) на Sleep (500) в обоих случаях, т.к. скрипт прерывался (вероятно что то не успевало появиться)
    в итоге все прекрасно установилось и закрылось без всяких перезагрузок!
     
    еще раз огромное спасибо за помощь!
     
    ps возник еще вопрос: если я запускаю все это в англоязычной системе, заголовки окон инсталлятора меняются
    было
    $sAskTitle = "Установка Nero Ask Toolbar"
    стало
    $sAskTitle = "Installation of Nero Ask Toolbar"
    и т.д.  
    как сделать скрипт более универсальным? можно ли выцеплять не полную фразу заголовка а ориентироваться на общие для всех языков вариации, например, в данном случае фрагмент, * "Nero Ask Toolbar" * ?

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 00:08 18-10-2011 | Исправлено: 5peciali5t, 02:00 18-10-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    5peciali5t
    Цитата:
    как сделать скрипт более универсальным?

    Код:
    Opt('WinTitleMatchMode', 2)
     
    $sAskTitle = 'Nero Ask Toolbar'
    ; дальнейший код

    ynbIpb,
    А зачем WinActivate () ? Функции Control*()  прекрасно работают и с неактивным окном. Функция WinWait() возвращает Handle окна в случае успеха и, ИМХО, лучше его использовать в дальнейшеи вместо Title, но, без третьего параметра (timeout) эта функция будет ждать окно вечно, а если оно не появилось?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 02:17 18-10-2011 | Исправлено: madmasles, 02:17 18-10-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ход мыслей понятен... и последнее кнопка Готово в конце установки на английской локализации ОС тоже будет вероятно чем то типа Finish (Done , End...  etc)
    этот фрагмент  

    Код:
    While 1 ; проверяем в цикле какой текст на кнопке 1
        If ControlGetText ($sNeroTitle, "", "Button1") =  "&Готово" Then
            ExitLoop ; выходим из цикла
        EndIf
        Sleep (100) ; пауза, чтобы не грузить проц в цикле
    WEnd

    тоже надо где то поправить на логичное
    =  "&Готово" or "&Finish"
    как это корректно реализовать?

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 02:32 18-10-2011
    ynbIpb



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

    Цитата:
    А зачем WinActivate () ? Функции Control*()  прекрасно работают и с неактивным окном.  

    Я тоже так думал, однако нет. Не работает контрол клик, пока не активируешь окно. Однако может заработает если оперировать хэндлом, а не текстом заголовка.

    Цитата:
    тоже надо где то поправить на логичное  
     =  "&Готово" or "&Finish"


    Код:
    While 1 ; проверяем в цикле какой текст на кнопке 1
        $sButtonText = ControlGetText ($sNeroTitle, "", "Button1")
         If  $sButtonText = "&Готово" Or $sButtonText = "&Finish" Then
             ExitLoop
    ; выходим из цикла
         EndIf
         Sleep (100) ; пауза, чтобы не грузить проц в цикле
     WEnd

     

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 09:20 18-10-2011 | Исправлено: ynbIpb, 09:22 18-10-2011
    RuS_UA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Если помните Вы мне написали скрипт, чтоб стартовал uTorrent , после очередной обновы он снова не пашет...
    Подробнее...
     
    Впринципи со скриптом разобрался, вот только не пойму как вычислить адрес кнопки чтоб с паузы снимал... хочется разобраться т.к. не хочу доставать после каждой обновы.

    Всего записей: 338 | Зарегистр. 04-01-2008 | Отправлено: 12:59 18-10-2011 | Исправлено: RuS_UA, 13:01 18-10-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RuS_UA
    Цитата:
    после очередной обновы он снова не пашет
    Версия uTorrent какая?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 13:02 18-10-2011
    RuS_UA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И ещё вопросик как Вы "красиво" экспортируете код AU3 в BBCode?
     
    Добавлено:
    madmasles
    В данный момент: 3.0 b 25683.
     
    Добавлено:
    Я для проверки функции _Utorrent_Go присвоил горячую клавишу.
    Чтоб быстрее проверять работает или нет.
    uT с паузы не стартует...

    Всего записей: 338 | Зарегистр. 04-01-2008 | Отправлено: 13:05 18-10-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RuS_UA
    Цитата:
     как Вы "красиво" экспортируете код AU3 в BBCode?
    Au3ToPost - Инструмент для расскраски AutoIt-кода.
     
    У меня версия 3.0 b 25756, могу только с ней попробовать.
    Попробуйте поменять в функции _Utorrent_Go()
    Код:
    ;...
    $h_ListView = ControlGetHandle($h_Win, '', '[CLASS:SysListView32; INSTANCE:1]')
    ;на
    $h_ListView = ControlGetHandle($h_Win, '', '[CLASS:SysListView32; INSTANCE:2]')
    ;...
    У меня так работает.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 14:42 18-10-2011 | Исправлено: madmasles, 20:45 19-10-2011
    vovka1021



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите что не так в этом коде?
    Читать дальше..
    сам код рабочий, вот только непроверяется чекбокс. как можно его проверить? или другой вариант отправки к примеру с помощью ControlSetText подскажите, а то мои знания в этой сфере весьма скромные

    Всего записей: 63 | Зарегистр. 02-04-2011 | Отправлено: 10:57 20-10-2011 | Исправлено: vovka1021, 11:26 20-10-2011
    RuS_UA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Спасибо заработало!

    Всего записей: 338 | Зарегистр. 04-01-2008 | Отправлено: 17:05 20-10-2011
       

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