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

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

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AkroMen
    _IsPressed()?
    Что-то вроде

    Код:
    Func Start()
        While 1
            Sleep(500)
            If _IsPressed('52') Then
                Send("{1}")
                ToolTip('Script is "START"', 0, 0)
            EndIf
        WEnd
        ToolTip("")
    EndFunc

    Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 22:13 10-01-2015
    AkroMen



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Спасибо большое за подсказку,разобрался

    Всего записей: 22 | Зарегистр. 29-04-2014 | Отправлено: 05:52 12-01-2015
    elchupakabra



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые, подскажите пожалуйста.
    Нужен запуск файла по маске (тут нет проблем, решается кодом)
    Код:
     $SEARCH=FileFindFirstFile(@ScriptDir&'\*.exe')
     $FILE=FileFindNextFile($SEARCH)  
     FileClose($SEARCH)
     Run(@ScriptDir&'\'&$FILE)
    Но запуск нужен с ключом. Поэтому первый вопрос - куда его тут впихнуть. А второй вопрос, допустим один из ключей /LOADINF="setup.ini", дык хотелось бы, чтобы ini-файл тоже запускался по маске, т.е. вместо setup.ini в ключе использовался любой *.ini, лежащий рядом с *.exe
    Заранее спасибо.

    Всего записей: 1571 | Зарегистр. 05-11-2005 | Отправлено: 20:34 17-01-2015 | Исправлено: elchupakabra, 20:35 17-01-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    elchupakabra,
    Как-то так.
    Код:
    Local $sDir = @ScriptDir & '\Test', $sKey = ' /FirstKey "-Second Key" /LOADINF=', $sExe = '.exe', $sIni = '.ini', $iCount, $hSearch, $sFile
     
    If @WorkingDir <> $sDir Then FileChangeDir($sDir)
    $hSearch = FileFindFirstFile('*')
    If $hSearch = -1 Then Exit 1
    Do
        $sFile = FileFindNextFile($hSearch)
        If @error Then ExitLoop
        If @extended Then ContinueLoop
        Switch StringRight($sFile, 4)
            Case $sExe
                $sExe = $sFile
                $iCount += 1
            Case $sIni
                $sIni = $sFile
                $iCount += 1
        EndSwitch
    Until $iCount = 2
    FileClose($hSearch)
    If $iCount <> 2 Then Exit 2
    ;~ Run($sExe & $sKey & '"' & $sIni & '"')
    ConsoleWrite($sExe & $sKey & '"' & $sIni & '"' & @LF)
    $sExe = $sDir & '\' & $sExe
    $sIni = $sDir & '\' & $sIni
    If StringInStr($sExe, ' ') Then $sExe = '"' & $sExe & '"'
    If StringInStr($sIni, ' ') Then $sIni = '"' & $sIni & '"'
    ConsoleWrite($sExe & $sKey & $sIni & @LF)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:22 17-01-2015 | Исправлено: madmasles, 07:22 18-01-2015
    GORA2



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

    Код:
    $Home = @ScriptDir & '\'
    $SEARCH = FileFindFirstFile($Home & '*.exe')  
    $fileEXE = FileFindNextFile($SEARCH)  
    FileClose($SEARCH)  
    $SEARCH = FileFindFirstFile($Home & '*.ini')  
    $fileINI = FileFindNextFile($SEARCH)  
    FileClose($SEARCH)  
     
    Run('"' & $Home & $fileEXE & '" /LOADINF="' & $fileINI & '"', '', @SW_HIDE)

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 17:04 18-01-2015 | Исправлено: GORA2, 17:06 18-01-2015
    madmasles

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

    Цитата:
    Без излишеств
    А если нет хотя бы одного из файлов? Или есть папка 0xx.exe или 0xx.ini?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 20:45 18-01-2015 | Исправлено: madmasles, 21:29 18-01-2015
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, можно ли перенаправить вывод консольного приложения с минимальными потерями:
    есть программа1, запускающая программу2 и читающая стандартный поток вывода, есть мысль воткнуть между ними скрипт для уточнения некоторых параметров и запуска программы2. Читать с помощью StdinWrite() и потом писать StdoutRead()? Объём может быть великоват.

    Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 02:37 19-01-2015 | Исправлено: Skif_off, 02:39 19-01-2015
    GORA2



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

    Цитата:
    А если не

    "А если не будут брать, отключим газ!"
     
    1 Такие тонкости отсутствуют в исходных требованиях.
    2 Автор спрашивал
    Цитата:
     запуск нужен с ключом. Поэтому первый вопрос - куда его тут впихнуть.


    Цитата:
    хотелось бы, чтобы ini-файл тоже запускался по маске, т.е. вместо setup.ini в ключе использовался любой *.ini, лежащий рядом

    Это я показал, а "защиту от дурака" не заказывали.
     
    Для новичка, задающего подобные вопросы, не следует перегружать скрипт "необязательными" опциями, они только затрудняют понимание. ИМХО

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:49 19-01-2015
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    comrades, подскажите, пожалуйста, в случае автоматизации работы с web-страницей, возможно делать всё без появления окна ишака Internet Explorer (чтение, нажатие кнопок, вставка текста в элементы и проч.)?

    Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 16:26 25-01-2015 | Исправлено: Skif_off, 16:27 25-01-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Цитата:
    делать всё без появления окна ишака Internet Explorer
    Можно.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:37 25-01-2015
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет, ребята. Прошу вашей помощи.
    Раньше делал скрипты только на cmd/bat. Решил попробовать AutoIt.
    Получилось за неделю кое-что накалякать. То, что получилось собрать на коленке прикрепил.
     
    Хочу, чтоб исполняемый файл был один (Dispatcher.au3).
     
    Программа (Dispatcher.au3) висит в трее и мониторит файлы *.dat на USB до тех пор, пока ее принудительно не закроют. При обнаружении таких файлов копирует их себе в папку и затем отправляет на фтп.
     
    Управление программой происходит из меню в трее. Там же есть пункт "Запись табельного номера". По клику на этот пункт должно появиться GUI окно с функцией создания файла табельного номера, введенного вручную. Смог реализовать это только запуском отдельного au3 файла (TabNumber.au3) по меню в трее. То есть это как отдельный процесс. Вопрос в том, как скрипт из TabNumber.au3 включить в состав Dispatcher.au3 и чтоб это все работало только из Dispatcher.au3. Т.е. программа работает в штатном режиме, пользователь выбрал в меню "Запись табельного", программа приостановилась, открыла GUI на ввод табельного, пользователь ввел, закрыл GUI, и программа продолжила свою работу дальше. Аналогично и с файлом Registration.au3.
     
    Сейчас все работает, но работают 3 скрипта вместо одного желаемого.
    Думаю понятно объяснил.
     
    По сути, я не могу понять как можно в одном скрипте работать с совершенно разными по функционалу GUI окнами.
     
    Посмотреть код можно тут:
    Подробнее...
     
    Заранее огромное спасибо!
     
    Скачать файлы мои можно тут: http://rghost.ru/7J4jLZfml

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 06:07 29-01-2015 | Исправлено: SLIDER999, 06:25 29-01-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SLIDER999
    Цитата:
    как можно в одном скрипте работать с совершенно разными по функционалу GUI окнами.
    Можно попробовать сделать примерно так. Подробнее...
    Если будет тормозить из-за обработки файлов, то поиск и обработку можно запустить дочерним процессом и периодически получать результат его работы через, например, StdoutRead().

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:51 29-01-2015 | Исправлено: madmasles, 08:35 30-01-2015
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    благодарю тебя за то, что уделил мне внимание. Огромную работу проделал.
    От моего скрипта ничего и не осталось почти.
    Мне как не программисту ничего не понятно (( Буду изучать...

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 18:43 29-01-2015 | Исправлено: SLIDER999, 19:09 29-01-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SLIDER999,
    Я поправил код, в нем ошибка была.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 08:36 30-01-2015
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    потихоньку начинаю вникать. Кое что по мелочи уже переделал под себя из твоего скрипта.
     
    Если отбросить работу самой программы, то как сделать вот это (хочу понять сам принцип):
    Поправьте этот код

    Код:
    #include <WindowsConstants.au3> ;Стиль окон GUI
    #include <GUIConstantsEx.au3> ;Раширенный стили GUI
     
    TraySetToolTip('Название')
    Opt("TrayMenuMode", 1 + 2)
    Opt("TrayOnEventMode", 1)
    TraySetState(1)
     
    $iRegistration = TrayCreateItem('Регистрация программы')
    TrayItemSetOnEvent(-1, "_Registration")
    $iExit = TrayCreateItem('Выход')
    TrayItemSetOnEvent(-1, '_Quit')
     
     
    ;Программа запущена в трее и выполняет _SomeFunc() раз в 3 секунды
    While 1
       _SomeFunc()
       Sleep(3000)
    WEnd
     
     
     
    Func _SomeFunc()
       ;Основная работа программы
       ConsoleWrite('Основной цикл' & @LF)
    EndFunc
     
    ;Функция вызова GUI окна. После отработки должно исчезнуть, а программа должна продолжить работать по основному циклу.
    Func _Registration()
       Opt("GUIOnEventMode", 1)
       $hGui = GUICreate('Регистрация программы', 370, 225)
       GUISetOnEvent($GUI_EVENT_CLOSE, "_CLOSEClicked")
       $BtnOk = GUICtrlCreateButton("ОК", 250, 190, 100, 25)
       GUICtrlSetOnEvent($BtnOk, "_OKButton")
     
       GUISetState()
     
       While 1
          Sleep(1000)
       WEnd
    EndFunc
     
     
    Func _CLOSEClicked()
       If @GUI_WinHandle = $hGui Then
       ;Закрыть окно и продолжить основной цикл
       EndIf
    EndFunc
     
    Func _OKButton()
       MsgBox(4096 + 64, '', 'Регистрация произведена!')
       ;Выполнить некоторые операции, закрыть окно и продолжить основной цикл
    EndFunc
     
    Func _Quit()
       Exit
    EndFunc

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 10:40 30-01-2015 | Исправлено: SLIDER999, 12:11 30-01-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SLIDER999
    Цитата:
    как сделать вот это  
    Можно примерно так: Подробнее...
    ИМХО, лучше отказаться от MsgBox, он будет останавливать основной цикл.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:23 30-01-2015 | Исправлено: madmasles, 12:26 30-01-2015
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    это то, что я хотел узнать!
    Благодарю!

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 15:42 30-01-2015
    SLIDER999

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

    Код:
    #include <Crypt.au3> ;Хеш файлов
    #include "ZLIB.au3" ;Упаковка в GZ - http://www.autoitscript.com/forum/topic/128962-zlib-deflateinflategzip-udf/
     
    $dHash = _Crypt_HashFile(@ScriptDir & '\' & @ScriptName, $CALG_MD5)
     
    ;Создается файл вида Test.au3_0x36E0CBF51CB606B82DC47B5CC4D2D2C1.gz
    ;Почему внутри него файл вида Test.au3_0x36E0CBF51CB606B82DC47B5CC4D2D2C1, а не Test.au3???
    _ZLIB_GZFileCompress(@ScriptDir & '\' & @ScriptName, @ScriptDir & '\' & @ScriptName & '_' & $dHash & '.gz')
     
    ;Аналогично, но почему???
    _ZLIB_GZFileCompress(@ScriptDir & '\' & @ScriptName, @ScriptDir & '\' & @ScriptName & '2.gz')
    FileMove(@ScriptDir & '\' & @ScriptName & '2.gz', @ScriptDir & '\' & @ScriptName & '2_' & $dHash & '.gz')

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 16:23 01-02-2015 | Исправлено: SLIDER999, 16:32 01-02-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SLIDER999,
    Похоже, это такая фича UDF. Попробуйте переименовать архив и, если открыть его в архиваторе, то имя внутри архива тоже изменится. А если переименовать архив .gz, созданный, например, 7z, то имя внутри не меняется.
     
    PS
    Код:
    ConsoleWrite(@ScriptDir & '\' & @ScriptName & @LF)
    ConsoleWrite(@ScriptFullPath & @LF)
    ConsoleWrite((@ScriptDir & '\' & @ScriptName == @ScriptFullPath) & @LF)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 00:30 03-02-2015 | Исправлено: madmasles, 00:57 03-02-2015
    SLIDER999

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Про @ScriptFullPath я знаю
    Я так и понял, что это именно UDF стало причиной. А добавлять лишние файлы к будущему исполняемому файлу не хочу. Спасибо!

    Всего записей: 261 | Зарегистр. 16-03-2005 | Отправлено: 06:09 03-02-2015
       

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