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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles 22:04 16-11-2011
    Цитата:
    Можно так поизвращаться

    А можно и так:
     

    Код:
    #include <GUIConstantsEx.au3>
     
    Global $a_FileOpenDialog_Move_Data[6]
     
    $hGUI = GUICreate("Parent GUI")
    GUISetState()
     
    _FileOpenDialog("_FileOpenDialogEx Example", "", "All (*.*)", 0, "", $hGUI, 0, 0)
     
    While 1
        $nMsg = GUIGetMsg()
     
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
     
    Func _FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOpts = 0, $sDefName = "", $hWnd = Default, $iLeft = Default, $iTop = Default)
        $a_FileOpenDialog_Move_Data[0] = $sTitle
     
        ;If ($iLeft <> -1 And $iLeft <> Default) Or ($iTop <> -1 And $iTop <> Default) Then
            Local $h_CallBack_Proc = DllCallbackRegister("__FileOpenDialog_Move_Handler", "none", "hwnd;int;int;dword")
     
            Local $a_hTimer = DllCall("user32.dll", "int", "SetTimer", _
                "hwnd", 0, _ ;$hWnd
                "int", TimerInit(), _
                "int", 0, _ ;$iTime
                "ptr", DllCallbackGetPtr($h_CallBack_Proc))
     
            $a_FileOpenDialog_Move_Data[1] = $h_CallBack_Proc
            $a_FileOpenDialog_Move_Data[2] = $a_hTimer[0]
            $a_FileOpenDialog_Move_Data[3] = $iLeft
            $a_FileOpenDialog_Move_Data[4] = $iTop
            $a_FileOpenDialog_Move_Data[5] = $hWnd
        ;EndIf
     
        Return FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOpts, $sDefName, $hWnd)
    EndFunc
     
    Func __FileOpenDialog_Move_Handler($hWnd, $nMsg, $iIDTimer, $dwTime)
        If $a_FileOpenDialog_Move_Data[1] > 0 Then DllCallBackFree($a_FileOpenDialog_Move_Data[1])
        DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $a_FileOpenDialog_Move_Data[2])
     
        Local $iOld_Opt_WWD = Opt("WinWaitDelay", 0)
        Local $iLeft = $a_FileOpenDialog_Move_Data[3]
        Local $iTop = $a_FileOpenDialog_Move_Data[4]
     
        WinWait("[CLASS:#32770;TITLE:" & $a_FileOpenDialog_Move_Data[0] & "]")
     
        If ($iLeft <> -1 And $iLeft <> Default) Or ($iTop <> -1 And $iTop <> Default) Then
            WinMove("[CLASS:#32770;TITLE:" & $a_FileOpenDialog_Move_Data[0] & "]", "", $iLeft, $iTop)
        ElseIf IsHWnd($a_FileOpenDialog_Move_Data[5]) Then
            Local $aParent_Pos = WinGetPos($a_FileOpenDialog_Move_Data[5])
            Local $aMB_Pos = WinGetPos("[CLASS:#32770;TITLE:" & $a_FileOpenDialog_Move_Data[0] & "]")
     
            $iX_Pos = $aParent_Pos[0] + ($aParent_Pos[2]/2) - ($aMB_Pos[2] / 2)
            $iY_Pos = $aParent_Pos[1] + ($aParent_Pos[3]/2) - ($aMB_Pos[3] / 2)
     
            WinMove("[CLASS:#32770;TITLE:" & $a_FileOpenDialog_Move_Data[0] & "]", "", $iX_Pos, $iY_Pos)
        EndIf
     
        Opt("WinWaitDelay", $iOld_Opt_WWD)
     
        $a_FileOpenDialog_Move_Data[0] = 0
        $a_FileOpenDialog_Move_Data[1] = 0
        $a_FileOpenDialog_Move_Data[2] = 0
        $a_FileOpenDialog_Move_Data[3] = 0
        $a_FileOpenDialog_Move_Data[4] = 0
        $a_FileOpenDialog_Move_Data[5] = 0
    EndFunc


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:32 17-11-2011
    AZJIO



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

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 00:34 17-11-2011 | Исправлено: AZJIO, 00:35 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Уфф... разобрался. Еще никак не соображу, какой функцией проверить существование раздела в реестре?

    Код:
    $OffKeyQ = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office", "14.0")

    И как быть с разрядностью системы? Как проверить строго указанный адрес?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 00:44 17-11-2011
    AZJIO



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

    Код:
    ;  MerkurAlex (mod AZJIO)
    ; http://www.autoitscript.com/forum/topic/70203-regexists/page__view__findpost__p__514688

    Func _Reg_Exists($key)
        Local $Err=RunWait('reg query "'&$key&'"','',@SW_HIDE)
        If $Err=0 Then
            Return
    1
        Else
            Return
    0
        Endif
    EndFunc

     
    Из справки
    Цитата:
    При работе в 64-битной Windows, если вы хотите получить значение параметра в 64-битной среде, вы должны указать суффикс HK ... с 64, например, HKLM64.
     
    _________________________________
    Немного не понял для чего в FileOpen параметр 16384, вернее когда он применяется. В утилиту TextReplace добавил способ открытия файла (ANSI, бинарный, UTF8, UTF16) все что есть в функции FileOpen, но проблема в том что при открытии UTF8 в режиме ANSI автоит автоматом определяет кодировку как ANSI и сохраняет в ней. При этом параметр 16384 не помогает и становится не понятным тогда в каких случаях его использовать.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 00:47 17-11-2011 | Исправлено: AZJIO, 00:51 17-11-2011
    Free_Soft



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

    Цитата:
    Из справки  

    я читал. Т.е. придется делать две проверки -  сначала разрядности, а потом искомого значения? или HKLM64 на х86 отработает без ошибок?

    Цитата:
    Например так

    это ищет только в
    Код:
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0



    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 00:56 17-11-2011
    AZJIO



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

    Код:
    Switch @OSArch
        Case 'X64'
            $HKCU='HKCU64'
            $HKCR='HKCR64'
        Case Else;'X86'
            $HKCU='HKCU'
            $HKCR='HKCR'
    EndSwitch

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 01:02 17-11-2011 | Исправлено: AZJIO, 01:10 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще вот проблема:
    задал переменную для печати времени и даты в лог-файл

    Код:
    $LogTime = @MDAY & "." & @MON & "." & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC

    Но значение ей присваивается лишь однажды, а каждый раз писать эту длинючую строчку занудно. Есть какой-нибудь выход?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 01:10 17-11-2011
    AZJIO



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

    Код:
    #include <Date.au3>
    $LogTime=StringReplace(_NowCalc(), '/', '.')
    MsgBox(0, 'Сообщение', $LogTime)

     

    Код:
    $LogTime=_GetData()
    MsgBox(0, 'Сообщение', $LogTime)
     
    Func _GetData()
        Return @MDAY & "." & @MON & "." & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC  
    EndFunc

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 01:15 17-11-2011 | Исправлено: AZJIO, 01:19 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Все ок. Пасиб)
    Ну и последнее на сегодня
    какой функцией вставить ссылку в GUI? В смысле, чтобы при нажатии на текст выполнялось определенное действие

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 01:16 17-11-2011 | Исправлено: Free_Soft, 01:26 17-11-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Panel Function - для вставки готовых кусков кода. То есть добавляешь выделенный код в утилиту дав образцу название, а при клики на нём он вставляется в редактор в позицию курсора.
     
    Обзови функцию например _t() и вызывай её без переменной, просто указав в строке для записи в файл.
    Код:
    FileWrite(@ScriptDir&'\file.log', _t())

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 01:23 17-11-2011 | Исправлено: AZJIO, 01:42 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    я туплю наверно...
    может, не так выразился. пр нажатии не на текст, а на надпись GUICtrlCreateLabel

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 01:35 17-11-2011
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 01:16 17-11-2011
    Цитата:
    какой функцией вставить ссылку в GUI?

    GUICtrlHyperLink - Создание элементов гиперссылки

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:45 17-11-2011
    AZJIO



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

    Код:
    $k=0
    GUICreate('My Program', 250, 260)
    $Label1=GUICtrlCreateLabel('Нажми на текст', 10, 10, 220, 22)
    GUICtrlSetFont(-1,15)
    GUISetState ()
    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $Label1
                $k
    +=1
                GUICtrlSetData($Label1,'Нажато '&$k&' раз')
               _a()
            Case -3
                 Exit
        EndSwitch
    WEnd
     
    Func
    _a()
        For $i = 1 to 4
            GUICtrlSetBkColor ($Label1, 0xff0000 )
            GUICtrlSetColor ($Label1, 0xffffff)
            Sleep(40)
            GUICtrlSetBkColor ($Label1, -1 )
            GUICtrlSetColor ($Label1, 0xff0000)
            Sleep(40)
        Next
    EndFunc

     
    Именно ссылка? Упрощённый вариант, цвет/курсор/вызов

    Код:
    GUICreate('My Program', 250, 260)
    $Label1=GUICtrlCreateLabel('http://ссылка.ru', 10, 10, 220, 22)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetColor(-1, 0x0000ff)
    GUISetState ()
    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $Label1
                ShellExecute ('http://ссылка.ru')
            Case -3
                 Exit
        EndSwitch
    WEnd

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 01:48 17-11-2011 | Исправлено: AZJIO, 01:51 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    ага, то что нужно)
     
    Добавлено:
    AZJIO
    вообще, наверно не ссылка, а выполнение RUN
     
    Добавлено:
    наверно глупый вопрос: можно ли скопилировать в екзешник вместе со скриптом и внешние файлы и как в таком случае к ним обращаться из скрипта?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 01:49 17-11-2011
    AZJIO



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

    Цитата:
    наверно глупый вопрос: можно ли скопилировать в екзешник вместе со скриптом и внешние файлы и как в таком случае к ним обращаться из скрипта?

    Можно использовать FileInstall и взависимости от параметра файлы при старте извлекаются либо в текущую директорию программы, либо в темп, при чём если существуют то не извлекаются, но если флаг 1 то извлекаются и перезаписываются.
    Вариант 2 - через ресурсы, например иконки можно добавить директивой
    #AutoIt3Wrapper_Res_Icon_Add=icons\1.ico

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 02:48 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    лучше через ресурсы. А как исполняемые файлы добавлять в ресурс? И как его вызвать потом из скрипта?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 03:15 17-11-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Цитата:
    А как исполняемые файлы добавлять в ресурс?
    FAQ по использованию ресурсов в AutoIt

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 03:53 17-11-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Этот способ не пробовал, на офсайте есть способ запуска из памяти, мне проще в темп извлечь, таким способом:

    Код:
    FileInstall("file.exe", @TempDir & '\file.exe')

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 03:59 17-11-2011 | Исправлено: AZJIO, 04:01 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто сталкивался: при компиляции вываливается ошибка из-за мусорной строки в файле обфускатора

    Код:
    п»ї#include-once
    Как победить?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 10:42 17-11-2011
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 10:42 17-11-2011
    Цитата:
    Как победить?

    Убрать мусор?
     

    Код:
    #include-once


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:50 17-11-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