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

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не хочу влазить, но на стороне 1с это делается буквально в десяток другой строк кода. Зачем посредник в виде autoit?!

    Всего записей: 2 | Зарегистр. 18-07-2013 | Отправлено: 22:06 05-06-2014
    sewell



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

    Цитата:
    как вычитать txt и построчно отправить в приложение )

     
    $hFile = FileOpen(@ScriptDir & '\MyTXTFile.txt', 0) ; открываем файл
    ; Читает построчно текст, пока не будет достигнут конец файла EOF
    While 1
        $sLine = FileReadLine($hFile)
        ; здесь делаем переброску строки в 1С
        if $sLine = "" Then ExitLoop
    WEnd
     
    FileClose($hFile)

    Всего записей: 833 | Зарегистр. 06-07-2005 | Отправлено: 10:43 06-06-2014 | Исправлено: sewell, 10:50 06-06-2014
    Poopkeen



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

    Цитата:
    Повторяю, дайте пример Excel-файла и укажите, какой столбец и какие строки надо получить.  

     
    вот пример файла
    http://rghost.ru/56202551
     
     

    Цитата:
    Не хочу влазить, но на стороне 1с это делается буквально в десяток другой строк кода. Зачем посредник в виде autoit?!

     
    Поступила задача добавить значения в качестве предопределенных элементов в справочник.
    Это делается в конфигураторе, который программно не управляется
     
     

    Всего записей: 254 | Зарегистр. 12-03-2003 | Отправлено: 10:44 06-06-2014
    OLEG4120



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

    Цитата:
    предопределенных

     
    Пардон) Невнимательно, читал.
     
    ЭЭЭ. Вы сначала это не уточнили.

    Всего записей: 2 | Зарегистр. 18-07-2013 | Отправлено: 11:44 06-06-2014 | Исправлено: OLEG4120, 11:46 06-06-2014
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Poopkeen,
    Смотрите примеры к функции _Excel_RangeRead() (версия AutoIt 3.3.12.0)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 19:33 06-06-2014
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил CaptureText. Добавлен захват главного меню, ListView, TreeView, Tab, ListBox, ComboBox (Таблицы, Дерево, Вкладки, Списки, Раскрывающиеся списки), утилита получает все элементы списка. Работает только на WinXP.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 14:39 08-06-2014 | Исправлено: AZJIO, 14:39 08-06-2014
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Цитата:
    Обновил CaptureText.
    Посмотрел исходник, нашел для себя много интересного.
    Можно вместо
    Код:
    ;~ ...
    $xy = MouseGetPos()
    DllStructSetData($Struct, "x", $xy[0])
    DllStructSetData($Struct, "y", $xy[1])
    $hwnd = _WinAPI_WindowFromPoint($Struct)
    ;~ ...
    Использовать эту функцию (не понятно, почему ее нет в библиотеках)
    Код:
    ;~ ...
    _WinAPI_GetCursorPos($Struct)
    $hwnd = _WinAPI_WindowFromPoint($Struct)
    ;~ ...
    Func _WinAPI_GetCursorPos(ByRef $t_Point)
        If Not IsDllStruct($t_Point) Then Return 0 ;можно убрать
        Local $a_Res = DllCall('user32.dll', 'int', 'GetCursorPos', 'struct*', $t_Point)
        If (@error) Or (Not $a_Res[0]) Then Return 0
        Return 1
    EndFunc   ;==>_WinAPI_GetCursorPos


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 18:07 08-06-2014 | Исправлено: madmasles, 21:55 08-06-2014
    Poopkeen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо за подсказки
     
    получил что хотел
    вдруг такой же спец, как я будет искать похожее, прилеплю исходник
     
    #include <file.au3>
     
    If WinExists(@ScriptName) Then Exit
    AutoItWinSetTitle(@ScriptName)
    HotKeySet("{ESC}", "Terminate")
     
    $sFilePath = @ScriptDir & "\MyTXTFile.txt" ;файл в папке со скриптом
    $sLines = _FileCountLines($sFilePath) ; возвращает количество строк в файле
     
    $sApp = "Конфигуратор - Управление производственным предприятием для Украины, редакция 1.3"
    Opt("WinTitleMatchMode", 4)
    WinWait($sApp,"")
    If Not WinActive($sApp,"") Then WinActivate($sApp,"")
    WinWait($sApp,"")
     
    For $i = 1 To $sLines ; от 1 до количества строк в файле выполнять:
        $sLine = FileReadLine($sFilePath, $i)
         
        ClipPut ($sLine)
         
        Send("{INS}")
        Sleep(20)
        $sData = ClipGet()
        Send($sData&"{TAB}")
        Send("^{ENTER}")
        Sleep(20)
     
    Next
     
    Func Terminate()
    Exit 0
    EndFunc

    Всего записей: 254 | Зарегистр. 12-03-2003 | Отправлено: 13:14 10-06-2014
    Artem_Butenko



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

    Код:
    $sMask = "(?mi)^.*(?:ntoskrnl.exe|KDCOM.dll).*$\s*" ;; Маска для поиска текстовых строк.

    из "*.ini-файла", например, следующей структуры:
     
    [File Mask]
    1="ntoskrnl.exe"
    2="KDCOM.dll"
    3="MyProg"
    4="File_2345"
    5=
    ... и т.д.
     
    Буду очень Вам признателен за помощь!

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 19:57 10-06-2014 | Исправлено: Artem_Butenko, 19:59 10-06-2014
    Skif_off

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

    Код:
    $sIniFile = StringRegExpReplace($sIniFile, $sMask, '')

    на что-то вроде

    Код:
    $sMask = IniReadSection("*.ini-файл", "File Mask")
    If @error Then
        MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
    Else
        For $i = 1 To $sMask[0][0]
            $sIniFile = StringRegExpReplace($sIniFile, $sMask[$i][1], '')
        Next
    EndIf

    ?

    Всего записей: 6481 | Зарегистр. 28-01-2008 | Отправлено: 20:59 10-06-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
     
    Извините, немного Вы меня не поняли, само назначение данного скрипта, - удалять по маске строки в текстовом файле "Layout.ini".
     
    Маска имен файлов (строк) задается в самом скрипте:

    Код:
    $sMask = "(?mi)^.*(?:ntoskrnl.exe|KDCOM.dll).*$\s*" ;; Маска для поиска текстовых строк.

     
    Мне необходимо считывать маску (для поиска строк в "Layout.ini") из "инишника", например "Settings.ini" (эдакий "костыль"), чтобы можно было изменить её (маску) не перекомпилируя скрипт?
     
    Структура "Settings.ini":
    [File Mask]  
     1="ntoskrnl.exe" --> P.S. Не знаю, нужны ли здесь и дальше параметры заключать в кавычки?
     2="KDCOM.dll"  
     3="MyProg"  
     4="File_2345"  
     5=... и т.д.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 02:01 11-06-2014 | Исправлено: Artem_Butenko, 02:08 11-06-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Наверное, я вас не так понял Пришедший мне в голову вариант берет все маски из секции [File Mask] файла Settings.ini и друг за другом применяются к $sIniFile, вам нужно при каждом запуске применять какую-то одну маску? Или вы про саму маску? Это набросок, проверить идею (поэтому знак вопроса). Что-то вроде этого, наверное:

    Код:
    $sIniFile = StringRegExpReplace($sIniFile, "(?mi)^.*(?:" & $sMask[$i][1] & ").*$\s*", '')

     
     
    З.Ы. Кавычки в Settings.ini не обязательны, кажется. И есть ограничение - не более 32 с чем-то тысячи символов на секцию, без ограничений см. это.

    Всего записей: 6481 | Зарегистр. 28-01-2008 | Отправлено: 02:20 11-06-2014 | Исправлено: Skif_off, 02:24 11-06-2014
    NIKZZZZ



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

    Код:
    $asMask = IniReadSection("Settings.ini", "File Mask")
    $sMask = ''
    For $i = 1 To $asMask[0][0]
        $sMask &= $asMask[$i][1] & '|'
    Next
    $sMask = "(?mi)^.*(?:" & StringTrimRight($sMask, 1) & ").*$\s*"

     
    Параметры без кавычек.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 02:31 11-06-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    Спасибо Вам большое. Последний вопрос, каким образом добавить к строке:

    Код:
    $sMask = "(?mi)^.*(?:" & StringTrimRight($sMask, 1) & ").*$\s*"

    переменные AutoIt, -
    Код:
    @ScriptName
    и
    Код:
    @ScriptDir
    ?
     
    Еще небольшие уточнения по старому скрипту, верны ли записи:
    Вариант №1:
    Код:
    $sMask = "(?mi)^.*(?:" & @ScriptName & "|" & @ScriptDir & "ntoskrnl.exe|KDCOM.dll" & ").*$\s*" ;; Маска для поиска текстовых строк

    Вариант №2:
    Код:
    Opt('ExpandVarStrings', 1)
    $sMask = "(?mi)^.*(?:@ScriptName|@ScriptDir|ntoskrnl.exe|KDCOM.dl).*$\s*" ;; Маска для поиска текстовых строк.

     
    Только что проверил, ни первый, ни второй вариант не работает.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 03:15 11-06-2014 | Исправлено: Artem_Butenko, 03:58 11-06-2014
    NIKZZZZ



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

    Цитата:
    Только что проверил, ни первый, ни второй вариант не работает.

    В @ScriptName и @ScriptDir содержатся символы, которые являются служебными для  StringRegExpReplace, их необходимо экранировать.
     
     

    Код:
    $asMask = IniReadSection("Settings.ini", "File Mask")
    $sMask = ''
    For $i = 1 To $asMask[0][0]
        $sMask &= $asMask[$i][1] & '|'
    Next
    $sMask=StringRegExpReplace($sMask, "[\\\.\(\)\{\}\*\+\?\$]", "\\\0")
    $sMask = "(?mi)^.*(?:" & StringTrimRight($sMask, 1) & ").*$\s*"

     
    Для примера:  

    Код:
    $sMask = @ScriptName & "|" & @ScriptDir & "ntoskrnl.exe|KDCOM.dll"
    $sMask=StringRegExpReplace($sMask, "[\\\.\(\)\{\}\*\+\?\$]", "\\\0")
    $sMask = "(?mi)^.*(?:" & $sMask & ").*$\s*"

     
     
    Добавлено:
    К стати, наверно правильнее

    Код:
    $sMask = @ScriptName & "|" & @ScriptDir & "\ntoskrnl.exe|" & @ScriptDir & "\KDCOM.dll"
    $sMask=StringRegExpReplace($sMask, "[\\\.\(\)\{\}\*\+\?\$]", "\\\0")
    $sMask = "(?mi)^.*(?:" & $sMask & ").*$\s*"
     

    Исправил ошибку.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 09:47 11-06-2014 | Исправлено: NIKZZZZ, 14:22 11-06-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    Спасибо Вам огромное, сегодня вечерком опробую все. Можно будет завершить свой проект "ThinApp File Cleaner".

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 17:49 11-06-2014
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Забыл заэкранировать   квадратные скобки.

    Код:
    $sMask=StringRegExpReplace($sMask, "[\\\.\(\)\{\}\[\]\*\+\?\$]", "\\\0")  


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:52 13-06-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    Прошу меня простить, возник еще один "сумасшедший" вопрос. Переменная @ScriptName задает полное имя файла скрипта с расширением.
    Казалось бы простой скрипт в одну строчку не справляется с поставленной задачей:

    Код:
    FileDelete(@WindowsDir & "\Prefetch\" & @ScriptName & "*.pf")

     
    Поясню, В каталоге "C:\WINDOWS\Prefetch\" может быть создан "*.pf-файл" вида:
    FILE.EXE-28F301A9.pf - тогда скрипт работает нормально, понятно, - "@ScriptName = FILE.EXE". А если встречаем файл вида FILE1222323.EX-28F301A9.pf, где из-за длинны имени файла скрипта "отсекается" расширение, скрипт уже не работает, подскажите, пожалуйста выход из этой ситуации.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 14:51 16-06-2014 | Исправлено: Artem_Butenko, 14:53 16-06-2014
    dialmak



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Отбрось расширение  

    Код:
    FileDelete(@WindowsDir & "\Prefetch\" & StringRight ( @ScriptName, 4 ) & "*.pf")


    Код:
    FileDelete(@WindowsDir & "\Prefetch\" & StringLeft (@ScriptName,StringLen ( @ScriptName ) -4) & "*.pf")

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 15:09 16-06-2014 | Исправлено: dialmak, 15:44 16-06-2014
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Как я понял из примера, имя обрезается до 14 символов.

    Код:
    FileDelete(@WindowsDir & "\Prefetch\" & StringLeft(@ScriptName,14) & "*-????????.pf")

     
    Добавлено:
    Artem_Butenko
    Посмотрел , нет ограничений ???
    Пример - SEARCHPROTOCOLHOST.EXE-DDF28657.pf  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:17 16-06-2014 | Исправлено: NIKZZZZ, 15:29 16-06-2014
       

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