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

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

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

    Всего записей: 86 | Зарегистр. 26-02-2006 | Отправлено: 08:22 24-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    SONNI 08:22 24-11-2010
    Цитата:
    как оптимальней преобразовать для получения только имени самого файла


    Код:
    $sFileName = StringRegExpReplace($sPath, "^.*\\", "")


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 08:27 24-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Какой вариант из двух более оптимизированный? Вопрос новичкам
     

    Код:
    $blank=100
     
    ; вариант 1
    For $i = 1 to $blank
        Switch $in
            Case 1
               $out&=$1*$i*$in
            Case 2
               $out&=$2*$i*$in
            Case 3
               $out&=$3*$i*$in
            Case 4
               $out&=$4*$i*$in
        EndSwitch
    Next
     
     
    ; вариант 2
    Switch $in
        Case 1
            For $i = 1 to $blank
                $out&=$1*$i*$in
            Next
        Case 2
            For $i = 1 to $blank
                $out&=$2*$i*$in
            Next
        Case 3
            For $i = 1 to $blank
                $out&=$3*$i*$in
            Next
        Case 4
            For $i = 1 to $blank
                $out&=$4*$i*$in
            Next
    EndSwitch

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 04:41 26-11-2010 | Исправлено: AZJIO, 04:42 26-11-2010
    Kar1son

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

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 13:45 26-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Да, второй лучше. Во втором инициализация условия Switch и проверка Case выполняется 1 раз, и далее цикл выполняет объединяющее присваивание. А в первом примере в каждом шаге цикла происходит инициализация условия и проверка Case. В итоге разница в 3-10 раз и пропорциональна произведению количества Case, длинны сравниваемой строки и количеству циклов.
    Это я скрипт годичной давности оптимизировал сегодня.
    __________
    кстати, обновил RegExp (добавил Library_Example.ini),  
    TextReplace добавил иконки кнопкам.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 15:06 26-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 15:06 26-11-2010
    Цитата:
    Да, второй лучше

    Лучше, но я бы сделал так (уменьшение кода):
     

    Код:
    $nN = Eval($in) * $in
     
    For $i = 1 To $blank
        $out &= $nN * $i
    Next


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:24 26-11-2010 | Исправлено: ViSiToR, 18:29 26-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Там на самом деле другая строка, сократить не получается и в общем по времени оба варианта отработают мгновенно. Но я попробовал сделать 100 000 циклов, строка сравнения 116 символов и 8 Case. Результат 1,24 сек против 0,12 сек, в 10 раз.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 20:14 26-11-2010 | Исправлено: AZJIO, 20:15 26-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 20:14 26-11-2010
    Цитата:
    Там на самом деле другая строка

    Ты привёл два примера, спросил какой из них оптимальнее, вот на основе самого оптимального из них я и сделал другую оптимизацию .
     

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

    Ну почему, можно ещё так (если с Eval не получается):
     

    Код:
    Dim $nVar
     
    Switch $in
        Case 1
            $nVar = $1
        Case 2
            $nVar = $2
        Case 3
            $nVar = $3
        Case 4
            $nVar = $4
    EndSwitch
     
    For $i = 1 To $blank
        $out &= $nVar * $i * $in
    Next

     

    Цитата:
    по времени оба варианта отработают мгновенно

    Про время обработки я и не говорил, я так и написал, «уменьшение кода».

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 20:23 26-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Всё таки предоставлю реальный код.

    Код:
    Switch $Radio0
        Case 1
            For $i=0 To $amount0
               $xy2=$inputWidth0-$i*$blok-$blok
               $FileText&='  [  '&$xy2&'  '&$xy1&'  .undef ]' & @CRLF
            Next
        Case 2
            For $i=0 To $amount0
                $xy2=$i*$blok
                $FileText&='  [  '&$xy2&'  '&$xy1&'  .undef ]' & @CRLF
            Next
        Case 3
            For $i=0 To $amount0
                $xy2=$inputHeight0-$i*$blok-$blok
                $FileText&='  [  '&$xy1&'  '&$xy2&'  .undef ]' & @CRLF
            Next
        Case 4
            For $i=0 To $amount0
                $xy2=$i*$blok
                $FileText&='  [  '&$xy1&'  '&$xy2&'  .undef ]' & @CRLF
            Next
    EndSwitch

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 07:35 27-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 07:35 27-11-2010
    Цитата:
    предоставлю реальный код

    Ну почти тоже самое:

    Код:
    Dim $nVar
     
    Switch $Radio0
        Case 1
            $nVar = '$inputWidth0 - $i * $blok - $blok'
        Case 2, 4
            $nVar = '$i * $blok'
        Case 3
            $nVar = '$inputHeight0 - $i * $blok - $blok'
    EndSwitch
     
    For $i = 0 To $amount0
        $xy2 = Execute($nVar)
        $FileText &= '  [  ' & $xy1 & '  ' & $xy2 & '  .undef ]' & @CRLF
    Next


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:15 27-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Неа заметь, что $xy1 и $xy2 меняются местами. Честно говоря я попробовал сократить через вызов функций с передачей параметров $xy1 и $xy2, но приткнулся в $i, но использовать Execute($nVar) не пробовал.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 14:32 27-11-2010 | Исправлено: AZJIO, 14:33 27-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 14:32 27-11-2010
    Цитата:
    $xy1 и $xy2 меняются местами


    Код:
    Dim $nVar, $sStr
     
    Switch $Radio0
        Case 1
            $nVar = '$inputWidth0 - $i * $blok - $blok'
            $sStr = $xy2 & '  ' & $xy1
        Case 2
            $nVar = '$i * $blok'
            $sStr = $xy2 & '  ' & $xy1
        Case 3
            $nVar = '$inputHeight0 - $i * $blok - $blok'
            $sStr = $xy1 & '  ' & $xy2
        Case 4
            $nVar = '$i * $blok'
            $sStr = $xy1 & '  ' & $xy2
    EndSwitch
     
    For $i = 0 To $amount0
        $xy2 = Execute($nVar)
        $FileText &= '  [  ' & $sStr & '  .undef ]' & @CRLF
    Next

     


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:23 27-11-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Утилита для редактирования контекстного меню файлов
    Или скомпилированная версия с иконками на кнопках.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 05:27 29-11-2010 | Исправлено: AZJIO, 07:05 30-11-2010
    AZJIO



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

    Код:
    RegWrite("HKCR\*\shell\contmenu\command", "", "REG_SZ", '"'&@ProgramFilesDir & '\scr_soft\contmenu.exe" "%1"')
    RegWrite("HKCR\Folder\shell\contmenu\command", "", "REG_SZ", '"'&@ProgramFilesDir & '\scr_soft\contmenu.exe" "%1"')
    If Not FileExists(@ProgramFilesDir & '\scr_soft\contmenu.exe') Then FileCopy(@AutoItExe, @ProgramFilesDir & '\scr_soft\contmenu.exe', 9)

    Хотел самоустанавливающуюся утилитку сделать, но при компиляции антивирусник сразу удаляет файл предупреждая о вирусе.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 19:13 29-11-2010 | Исправлено: AZJIO, 19:16 29-11-2010
    Kar1son

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

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:43 30-11-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kar1son 09:43 30-11-2010
    Цитата:
    как свернуть все подпрограммы и блоки сразу ?

    «View (Вид) -> Toggle all folds (Свернуть или развернуть все блоки текста)»?

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 11:13 30-11-2010
    brRamires

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите: есть окно "Состояние Wifi", принадлежащее процессу Explorer.exe. В нём есть статический текст, который изначально выглядит так:

    В какой-то момент данный текст начинает выглядеть так:

    Как отследить, что это произошло?

    Всего записей: 564 | Зарегистр. 28-09-2008 | Отправлено: 18:28 01-12-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    brRamires
    Попробуйте так:
    Код:
    HotKeySet('{ESC}', '_Close')
     
    $sTitle = 'Состояние Wifi'
    While 1
        If WinExists($sTitle) Then
            $sText = ControlGetText($sTitle, '', '[CLASS:Static; INSTANCE:3]')
            If $sText Then
                ToolTip($sText, 0, 0)
            Else
                ToolTip('Открыта другая вкладка окна "' & $sTitle & '"', 0, 0)
            EndIf
        Else
            ToolTip('Нет окна "' & $sTitle & '"', 0, 0)
        EndIf
        Sleep(1000)
    WEnd
     
    Func _Close()
        Exit
    EndFunc   ;==>_Close

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 23:35 01-12-2010
    brRamires

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Как оказалось, данный метод не очень подходит, т.к. при отключении Wifi окно не переходит в состояние №2, а просто закрывается; кроме того, данное окно должно быть всегда открыто, что неудобно. В итоге нашёл в сети другой способ перезапуска wifi (т.к. он почему-то отваливается) - через ipconfig. Получилось так:

    Код:
     
    While 1
        $pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
        $line = ""
        $FarLine = "IP-адрес  . . . . . . . . . . . . : 192.168.0.1"
        While 1
            $line &= StdoutRead($pid)
            If @error Then ExitLoop
        Wend
     
        If Not StringInStr($line, $FarLine) Then
    ;        ToolTip("wifi not found", 0, 0)
            Run('taskkill /im "zyxel g-202.exe"', "", @SW_HIDE, 0x2)
            Sleep(5000)
            Run("C:\!P\drivers\zyxel\ZyXEL G-202.exe", "C:\!P\drivers\zyxel", @SW_HIDE, 0x2)
            Sleep(10000)
        Else
    ;        ToolTip("wifi found", 0, 0)
        EndIf
        Sleep(10000)
    WEnd

    Всего записей: 564 | Зарегистр. 28-09-2008 | Отправлено: 03:29 02-12-2010 | Исправлено: brRamires, 03:33 02-12-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    С офсайта перешёл по ссылке на AudioMeter, вообще здорово сделано.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 11:44 02-12-2010
       

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