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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LaVas_ki
    Цитата:
    так это и есть начало
    У меня только так работает
    Код:
    _WinAPI_LoadKeyboardLayoutEx(0x0409)
    HotKeySet('0', 'Save')
    HotKeySet('{Esc}', '_Exit')
     
    While 1
        Sleep(300)
    WEnd
     
    Func Save()
        InputBox('Test', 'Ввод должен быть на англ. языке')
    EndFunc   ;==>Save
     
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
     
    Func _WinAPI_LoadKeyboardLayoutEx($sLayoutID = 0x0409, $hWnd = 0)
        ;CreatoR, http://autoit-script.ru/index.php/topic,5745.0.html
        Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
        Local $aRet = DllCall('user32.dll', 'long', 'LoadKeyboardLayoutW', 'wstr', Hex($sLayoutID, 8), 'int', 0)
        If Not @error And $aRet[0] Then
            If $hWnd = 0 Then
                $hWnd = WinGetHandle(AutoItWinGetTitle())
            EndIf
            DllCall('user32.dll', 'ptr', 'SendMessage', 'hwnd', $hWnd, 'int', $WM_INPUTLANGCHANGEREQUEST, 'int', 1, 'int', $aRet[0])
            Return 1
        EndIf
        Return SetError(1)
    EndFunc   ;==>_WinAPI_LoadKeyboardLayoutEx
    Если вызывать функцию _WinAPI_LoadKeyboardLayoutEx() не в начале, а в теле скрипта, то у меня она не работает.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:05 31-07-2011 | Исправлено: madmasles, 11:07 31-07-2011
    LaVas_ki

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

    Всего записей: 1465 | Зарегистр. 03-08-2003 | Отправлено: 12:13 31-07-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LaVas_ki,
    Вроде так менять язык можно в теле
    Код:
    #include <WinAPIEx.au3> ;Yashied, http://autoit-script.ru/index.php/topic,47.0.html
     
    $fLang = False
    HotKeySet('0', 'Save')
    HotKeySet('{Esc}', '_Exit')
     
    While 1
        Sleep(300)
    WEnd
     
    Func Save()
        $fLang = Not $fLang
        Local $sLang
        If $fLang Then
            _WinAPI_LoadKeyboardLayout(0x0409, $KLF_ACTIVATE)
            $sLang = 'англ.'
        Else
            _WinAPI_LoadKeyboardLayout(0x0419, $KLF_ACTIVATE)
            $sLang = 'рус.'
        EndIf
        InputBox('Test', 'Ввод должен быть на ' & $sLang & ' языке')
    EndFunc   ;==>Save
     
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:32 31-07-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновлено USB_Open (клик в трее по иконке открывает диск), Create_list_files (двойной клик в ListView), Panel_Function (работает с последним активным окном), ReplaceTemplateDOCX (проверка валидности template.ini)

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 16:13 02-08-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет
     
    Вот, справиться с одной проблемой не могу
    Где находится меню у папок в ХР
    Пробовал утилитой InqSoft Window Scanner, тоже меню не находит,
    хотя у других программ находит только в путь.
     
    Хотел нажать на кнопку меню у папки "Мои документы"  
    Вид--значки, что-бы показывала все файлы и папки значками
    Вот такой функцией:
    WinMenuSelectItem("Мои документы", "", Вид", "значки")
     
    Но , она не срабатывает.
    Получается только вот так:
    ControlSend("Мои документы", "", "", "{ALT}{RIGHT 2}{DOWN 6}{ENTER}")
     
    А может кто нибудь знает как реализовать это попроще, например через реестр?

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 16:37 03-08-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor
    Причём здесь автоит? Делаешь как тебе удобно, Сервис > Свойство папки > Вкладка Вид > Кнопка "Применить ко всем папкам" > ОК.

    Цитата:
    WinMenuSelectItem("Мои документы", "", Вид", "значки")
    у меня тоже не получается но в любом случае в справке указано использовать &Вид символ подчёркивания, выделяющий клавишу вызова пункта. И также сказано что действует не на все меню.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 18:13 03-08-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO,
    Цитата:
    у меня тоже не получается но в любом случае в справке указано использовать &Вид символ подчёркивания

    Пробовал уже так тоже, ничего не происходит.
    Ведь всё равно меню у папок где-то должно быть.
    ResHacker тоже не находит в explorer.exe этого меню.
    Что-бы определить эту кнопку, или такая &Вид , может и вот такая Вид&.
    А может меню папок не в explorer.exe находится.
     
    Ладно, будем старым верным способом нажимать Send ("{DOWN}")

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 18:49 03-08-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor, AZJIO,
    Это не Menu, это [CLASS:ToolbarWindow32;INSTANCE:2].

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



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

    Цитата:
    может и вот такая Вид&
    Такая быть не может, нажми Alt те буквы под которыми появились чёрточки, перед ними стоит символ &. Этот символ сигнализирует пользователю горячую клавишу, нажав которую равносильно клик по меню.
     


    Сделал инструмент Include_Helper для показа недостающих скрипту UDF. Обычно встречаются старые скриты которые выдают ошибки в виду того что видимо старые версии UDF содержали константы в файле Constants.au3 и в виду переорганизации на новых версиях старые скрипты стабильно выдают ошибки отсутствия констант. Также и сам иногда забываю вставить сразу, а потом приходится искать нужные. Утилита работает очень быстро от 0.1 до 0.6 сек. При первом старте создаёт список констант и функций на основе папки Include.
    Недостатки: Библиотеки текущего каталога не обрабатывабтся, поэтому попадают в список лишних.
    Плюсы: нет привязки к SciTE, скорость обработки в 1.5 раз быстрее Organize Includes. Есть возможность скопировать текст прямо из Edit.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 22:17 03-08-2011 | Исправлено: AZJIO, 00:27 06-08-2011
    Claus_Trafoby



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу помощи. Сам абсолютный 0 в скриптописании.
    Программа, работающая на Windows 2008 Server x64 вылетает с ошибкой. Появляется окно ошибки с заголовком "Microsoft Visual C++ Runtime Library". После нажатия кнопки ОК в данном окне, появляется следующее окно с заголовком "Application transfer data device FORT 300 to RCU" и пунктом "Закрыть программу" и возможностью закрытия окна крестиком. Потом соответственно вручную перезапускаем программу.  
    Если не сложно, подкиньте скрипт для AutoIt постоянно мониторящий появление окна с ошибкой, закрывающий оба окна с ошибками и перезапускающий программу автоматически.
     
    ynbIpb огромное спасибо! То что нужно. Подсмотрел в помощи и поменял
    Код:
    sleep (500); задержка перед появлением второго окна
    на
    Код:
    WinWaitActive ($sTitle2,"",5); задержка перед появлением второго окна

    Всего записей: 322 | Зарегистр. 21-03-2003 | Отправлено: 15:49 08-08-2011 | Исправлено: Claus_Trafoby, 15:52 09-08-2011
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Claus_Trafoby, что-то типа этого:

    Код:
    $sTitle1 = "заголовок первого окна"
    $sTitle2 = "заголовок второго окна"
    $sApp = "Путь к приложению для запуска"
     
    While 1
        sleep (1000) ; пауза 1 сек
        $iRet = WinExists ($sTitle1); проверяем существует ли окно 1
        If $iRet = 1 Then ; если результат 1, то
            _restart () ; запускаем функцию
        EndIf
    WEnd
     
    Func
    _restart ()
        ControlClick ($sTitle1, "", "OK"); нажимаем ОК в окне  1
        sleep (500); задержка перед появлением второго окна
        WinClose ($sTitle2); закрываем окно 2
        sleep (500)
        Run ($sApp) ; запускаем программу повторно
    EndFunc


    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 21:21 08-08-2011
    IntGen

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    Есть пользовательская функция WIMGAPI UDF
    В неё включена функция _WIM_ApplyImage. По аналогии с функцией Func Extract($sWimFile, $iImageIndex, $sFilePath, $sExtractTo) я написал Func Apply($sWimFile, $iImageIndex, $Path)

    Код:
     
    Func Apply($sWimFile, $iImageIndex, $Path)
     
        ; load .wim file with read access
        $hWim = _WIM_CreateFile($sWimFile, $WIM_GENERIC_READ, $WIM_OPEN_EXISTING, 0, 0, 0)
     
        If $hWim = 0 Then
            MsgBox(48, "Apply", "Error: Failed to load image. (" & $hWim & "," & @error & "," & @extended & ")")
            Cleanup()
            Exit (252)
        EndIf
     
        ; set our temp path
        $aResult = _WIM_SetTemporaryPath($hWim, @TempDir)
     
        ; load the image index
        $hImage = _WIM_LoadImage($hWim, $iImageIndex)
     
        ; apply the image
        $aResult = _WIM_ApplyImage($hImage, $Path, 0)
            If $aResult = 0 Then MsgBox(48, "Apply", "Error: Failed to apply image. Make sure your path exists! (" & $aResult & "," & @error & "," & @extended & ")")
        Cleanup() ; free resources
     
    EndFunc   ;==>Apply
     

    Однако приделать к ней Progress bar как у функции Func Capture($Path, $sWimFile, $sImageName, $sImageDesc, $Compress) я не могу, так как не понимаю работу функциий DllCallbackRegister и _WIM_RegisterMessageCallback. Если не сложно, подскажите пожалуйста, как сделать прогресс бар к функции _WIM_ApplyImage. Спасибо.

    Всего записей: 29 | Зарегистр. 01-04-2003 | Отправлено: 10:59 09-08-2011
    IntGen

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ответ получен. В текущей реализации AutoIt получить $WIM_MSG_PROGRESS из _WIM_ApplyImage невозможно в связи с тем, что используемая функция apply из wimgapi.dll многопоточная.

    Всего записей: 29 | Зарегистр. 01-04-2003 | Отправлено: 21:00 09-08-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    существуют ли UDF для работы с 1С? (неопходимо получать данные из базы. те только чтение)

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:08 10-08-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем
     
    Почему у меня скрипт не отрабатывает как надо,  
    в SelectString явно указано: выбрать строку списка, в ComboBox
    совпадающую с указанным образцом, т.е строку '1234',  
    а у меня при её отсутствии выдаёт тоже самое даже
    когда она присутствует  
     
    If ControlCommand ('Сетевые подключения','','ComboBox1','SelectString','1234')=0 Then
    MsgBox(262144,"", "result")
    Else
    MsgBox(262144,"", "error")
    EndIf

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 23:57 11-08-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor
    А почему "=0"? В справке не указано, что SelectString возвращает значение 0 или 1, по крайней мере лучше проверять @error = 1 так как это документировано.

    Код:
    ControlCommand ('Сетевые подключения','','ComboBox1','SelectString','1234')
    If @error Then
        MsgBox(262144,"", "error")
    Else
        MsgBox(262144,"", "result")
    EndIf

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 01:38 12-08-2011 | Исправлено: AZJIO, 01:40 12-08-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Точно не указано, плин я так тоже делал  
    хотелось впихнуть всё в одну строку
    Ну да ладно, пусть будет через @error , спасибо .
     
    Да вот тоже не указано, хотя отлично работает такая штука:
    If WinGetClassList("[CLASS:BaseBar]", "Мой компьютер") = "" Then
    ну и тут дальше всё такое.

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 18:21 12-08-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JumpToString, утилитка для быстрого перехода к функциям (Func), регионам (#Region) и пользовательским образцам текста в редакторе Notepad++. Функции и регионы попадают в список автоматически, а образцы текстов можно добавить по клавише Ctrl+F11. Утилита сохраняет пользовательские функции для каждой вкладки Notepad++. Обновлено. Теперь сохраняет сессии и настройки (координаты, сортировка, горячая клавиша и т.д.)

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 02:00 13-08-2011 | Исправлено: AZJIO, 15:11 14-08-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем
     
    Как записать вот такую команду батника в AutoIt:
     
    Пример батника:
    If Exist "%TEMP%\" (
    msg * YES
    ) ELSE (
    msg * NO
    )
     
    Я понимаю что можно каждую строку разделить вот так " & "
    Но оно не срабатывает для приведённого выше кода, работает  
    только когда каждая команда в батнике написана в одну строку.
     
    Переводим в AutoIt:
    RunWait(@ComSpec & ' /C If Exist "%TEMP%\" (msg * YES) ELSE (msg * NO)', '', @SW_HIDE)
    Этот код отлично работает.
     
    А вот так не работает
    RunWait(@ComSpec & ' /C If Exist "%TEMP%\" ( & msg * YES & ) ELSE ( & msg * NO & )', '', @SW_HIDE)
    Ну очень уж надо мне стало именно так перевести батник в AutoIt.
    Ведь должен-же быть выход из этой ситуации.

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 11:49 14-08-2011 | Исправлено: Cosmogor, 12:07 14-08-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor
    У тебя просто нарушен синтаксис, ведь так

    Код:
    If Exist "%TEMP%\" (
    & msg * YES &
    ) ELSE (
    & msg * NO &
    )

    тоже не работает, то с какой стати в автоите заработает...
    А когда я добавил команды перед & и после завершающего, то заработало.  
    Ещё можно использовать ^& чтоб было текстом, а не спец-символом.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 15:07 14-08-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