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

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



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

    Цитата:
    Если найти больший инкремент заранее
    Выйгрышь при текущем раскладе увеличение скорости на 20% (предыдущие разы были минимум 4-кратное ускорение)

    Код:
    Local $iMin = 100
    Local $iMax = 700
    Local $Sum = 753967.76 ; Сумма
    Local $kx = 4507 ; коэффициент
    Local $ky = 109 ; коэффициент
     
    $timer = TimerInit()
    For $Yx = 1 To 100
        $Xy = ($Sum - $Yx * $kx) / $ky
    Next
    MsgBox(0, "Время выполнения", 'Время : ' & Round(TimerDiff($timer), 2) & ' мсек')

    пока мне тоже лень переписывать.
     

    Цитата:
    в твоем последнем скрипте х и у перепутаны местами
    ну так-то у нас в условии х и y определяются только коэфициентами то результирующие значения лучше имена колонок сменить. Думаю embrace909 пользуется тем же принципом ожидаемых результатов. Ведь конечная формула $c1] * $k2 меня тоже смутила, то есть для красоты коэфициенты надо как бы поменять названиями, так как существенно роли они в решении они не играют, они же не явные значения, а на основе ожидаемых результатов выставить названия колонок. Проверил строкой
    Код:
    MsgBox(0, 'Сообщение', $aRes[$i][$c1] & ' * ' & $k2 & ' + ' & $aRes[$i][$c2] & ' * ' & $k1 & ' = ' & $aRes[$i][2])
    да ты прав имена колонок неправильные.
    Была ещё идея значения Max и Min в инициализации цикла менять местами, а то в одном случае правая колонка идёт на убыль, а левая колонка на возрастания, в другом случае наоборот, а красивее когда всегда правая колонка идёт на возрастание.
    Но эти вещи наживные, без спортивного интереса.
    Надеюсь он сначала щётки продаст по цене мобильников, потом мобильники по цене мобильников.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 15:42 20-04-2013 | Исправлено: AZJIO, 15:48 20-04-2013
    Ister_Les



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите, можно ли извлечь из файла, упакованного с помощью Aut2Exe исходный код?

    Всего записей: 147 | Зарегистр. 03-06-2010 | Отправлено: 13:17 21-04-2013
    Daniyar91

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

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 16:36 21-04-2013
    77599073587



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как открыть файл с расширением CFG удалить все содержимое и вставить сой текст ?

    Всего записей: 31 | Зарегистр. 12-02-2013 | Отправлено: 15:15 22-04-2013
    Zloy_Gelud



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

    Код:
    Local $sCFGPath = @ScriptDir & "\File.cfg"
    Local $hFile = FileOpen($sCFGPath, 2)
    If ($hFile <> -1) Then
        FileWrite($hFile, "Я новый текст")
        FileClose($hFile)
    EndIf

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 15:25 22-04-2013
    77599073587



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud - благодарю за помощь

    Всего записей: 31 | Зарегистр. 12-02-2013 | Отправлено: 09:05 23-04-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, подскажите пожалуйста, может кто-нибудь писал для своих нужд вспомогательную программку получения всех "FileInstall" в указанном каталоге, включая его подкаталоги. Желательно, чтобы программа могла затем автоматически генерировать "DirCreate" для всех каталогов, в указанном пользователем корневом каталоге.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 09:39 23-04-2013 | Исправлено: Artem_Butenko, 09:43 23-04-2013
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Artem_Butenko
    Два варианта:
     
    1) Генерирует и добавляет для текущего скрипта список FileInstall'ов:

    Код:
    _FileDirInstall(@ScriptDir & '\Resources', @TempDir)
     
    ;===== YOUR SCRIPT CONTENT GOES HERE =====
     
     
     
    ;===== YOUR SCRIPT CONTENT GOES HERE =====
     
     
    Func _FileDirInstall($sDirPath, $sDest, $nFlag = 0, $sMask = '*', $iSubDirs = 0, $sIncludeName = -1)
        Local $aList, $aMacros, $sMacros, $sData, $sReadScript, $hFile
     
        If @Compiled Then
            Return SetError(-1)
        EndIf
     
        If StringStripWS($sIncludeName, 8) = '' Then
            $sIncludeName = 'InstalledDir'
        ElseIf $sIncludeName = -1 Then
            $sIncludeName = 'InstalledDir_' & StringRegExpReplace($sDirPath, '^.*\\', '')
        EndIf
     
        $sIncludeName &= '.fdi'
     
        $aList = __FileSearch($sDirPath, $sMask, 1, $iSubDirs, 0)
     
        If @error Then
            Return SetError(1)
        EndIf
     
        $aMacros = _
            StringSplit( _
                'AppDataCommonDir|DesktopCommonDir|DocumentsCommonDir|FavoritesCommonDir|ProgramsCommonDir|StartMenuCommonDir|' & _
                'StartupCommonDir|AppDataDir|DesktopDir|MyDocumentsDir|FavoritesDir|ProgramsDir|StartMenuDir|StartupDir|UserProfileDir|' & _
                'HomeDrive|HomePath|HomeShare|ProgramFilesDir|CommonFilesDir|WindowsDir|SystemDir|TempDir', _
            '|')
     
        For $i = 1 To $aMacros[0]
            $sMacros = Execute('@' & $aMacros[$i])
     
            If $sDest = $sMacros Then
                $sDest = StringReplace($sDest, $sMacros, '@' & $aMacros[$i])
            EndIf
        Next
     
        For $i = 1 To $aList[0]
            If $iSubDirs = 1 Then
                $sData &= 'FileInstall("' & $aList[$i] & '", ' & $sDest & ' & "\' & StringRegExpReplace($aList[$i], '^.*\\', '') & '", ' & $nFlag & ')' & @CRLF
            Else
                $sData &= 'FileInstall("' & $sDirPath & '\' & $aList[$i] & '", ' & $sDest & ' & "\' & $aList[$i] & '", ' & $nFlag & ')' & @CRLF
            EndIf
        Next
     
        If $sData = '' Then
            Return SetError(2)
        EndIf
     
        $hFile = FileOpen(@ScriptDir & '\' & $sIncludeName, 2)
        FileWrite($hFile, '#include-once' & @CRLF & @CRLF & $sData)
        FileClose($hFile)
     
        $sReadScript = FileRead(@ScriptFullPath)
     
        If Not StringInStr($sReadScript, '#include "' & $sIncludeName & '"' & @CRLF) Then
            $hFile = FileOpen(@ScriptFullPath, 2)
            FileWrite($hFile, '#include "' & $sIncludeName & '"' & @CRLF & $sReadScript)
            FileClose($hFile)
        EndIf
     
        Return 1
    EndFunc
     
    Func __FileSearch($sPath, $sFileMask = "*", $iFlag = 0, $iSubDir = 1, $iSort = 0)
        Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sFiles
     
        If Not StringInStr(FileGetAttrib($sPath), "D") Then
            Return SetError(1, 0, 0)
        EndIf
     
        If $iSubDir = 1 Then
            $sAttrib &= ' /S'
        EndIf
     
        If $iSort = 1 Then
            $sAttrib &= ' /O:N'
        EndIf
     
        Switch $iFlag
            Case 1
                $sAttrib &= ' /A-D'
            Case 2
                $sAttrib &= ' /AD'
            Case Else
                $sAttrib &= ' /A'
        EndSwitch
     
        $sOut = StringToBinary('0' & @CRLF, 2)
        $sPath = StringRegExpReplace($sPath, '\\+$', '')
        $sFileMask = StringRegExpReplace($sFileMask, '^;+|;+$', '')
        $sFileMask = StringRegExpReplace($sFileMask, ';{2,}', ';')
        $aMasks = StringSplit($sFileMask, ';')
     
        For $i = 1 To $aMasks[0]
            If StringStripWS($aMasks[$i], 8) = "" Then
                ContinueLoop
            EndIf
     
            $sFiles &= '"' & $sPath & '\' & $aMasks[$i] & '"'
     
            If $i < $aMasks[0] Then
                $sFiles &= ';'
            EndIf
        Next
     
        $hDir = Run(@ComSpec & ' /U /C DIR ' & $sFiles & ' /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)
     
        While 1
            $sRead = StdoutRead($hDir, False, True)
     
            If @error Then
                ExitLoop
            EndIf
     
            If $sRead <> "" Then
                $sOut &= $sRead
            EndIf
        Wend
     
        $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
     
        If @error Or UBound($aOut) < 2 Then
            Return SetError(2, 0, 0)
        EndIf
     
        $aOut[0] = UBound($aOut)-1
        Return $aOut
    EndFunc

     
    2) Генерирует список FileInstall'ов и возвращает его в переменной:

    Код:
    #include <File.au3>
     
    $sRet_FI_Lines = _FileInstallGetFolder("C:\Temp", "D:\Dest", 0, "*.txt")
    ConsoleWrite("+Return:" & @CRLF & $sRet_FI_Lines & @CRLF & @CRLF & "!Error = " & @error & @CRLF & @CRLF)
     
    ;~ MsgBox(64, "Return #1:", $sRet_FI_Lines & @CRLF & @CRLF & "!Error = " & @error)
     
    $sRet_FI_Lines = _FileInstallGetFolder(_PathFull(@AutoItExe & "\.."), "$aDest[$i]", 1, "*.exe")
    ConsoleWrite("+Return:" & @CRLF & $sRet_FI_Lines & @CRLF & @CRLF & "!Error = " & @error & @CRLF & @CRLF)
     
    ;~ MsgBox(64, "Return #2:", $sRet_FI_Lines & @CRLF & @CRLF & "!Error = " & @error)
     
    Func _FileInstallGetFolder($sSource, $sDest, $nFlag = 0, $sMask = "*", $nCompiled = False)
        Local $hSearch, $sNext_File, $sRet_FI_Lines = ""
     
        If (Not $nCompiled) Or ($nCompiled And @Compiled) Then
            $hSearch = FileFindFirstFile($sSource & "\" & $sMask)
            If $hSearch = -1 Then Return SetError(1, 0, "")
     
            ;Check if it's a $Var (or $Array[$i][N]...)
            Local $iAddAsVar = StringRegExp($sDest, "\A(\$\w+(\[(\$\w+|\d+)\])*?|@\w+)$")
     
            While 1
                $sNext_File = FileFindNextFile($hSearch)
                If @error Then
                    ExitLoop ;No more files
                EndIf
     
                If $sSource = @ScriptDir And $sNext_File = @ScriptName Then
                    ContinueLoop
                EndIf
     
                If $iAddAsVar Then
                    $sRet_FI_Lines &= 'FileInstall("' & $sSource & '\' & $sNext_File & '", ' & _
                        $sDest & ' & "\' & $sNext_File & '", ' & $nFlag & ')' & @CRLF
                Else
                    $sRet_FI_Lines &= 'FileInstall("' & $sSource & '\' & $sNext_File & '", "' & _
                        $sDest & '\' & $sNext_File & '", ' & $nFlag & ')' & @CRLF
                EndIf
            WEnd
     
            FileClose($hSearch)
        EndIf
     
        If $sRet_FI_Lines = "" Then Return SetError(2, 0, "")
        Return StringStripWS($sRet_FI_Lines, 3)
    EndFunc


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:15 23-04-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
     
    Пожалуйста, поясните, как следует применять данные скрипты?

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 17:34 24-04-2013
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Artem_Butenko 17:34 24-04-2013
       
    Цитата:
    как следует применять данные скрипты?

    Первый как есть, добавив свой код в блок YOUR SCRIPT CONTENT GOES HERE, и указав путь к папке с подключаемыми скриптами в первой строчке.
    Во втором нужно вызывать функцию _FileInstallGetFolder для получения списка FileInstall'ов (возвращает список строк разделённые @CRLF).

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:33 24-04-2013
    Artem_Butenko



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

    Код:
    #Include <Includes\FileOperations.au3>
     
    $FileList =_FO_FileSearch(@ScriptDir & '\Resources', '*', True, 125, 1, 0)&@CRLF
    ;$FileList &=_FO_FileSearch('', '*', True, 125, 1, 0)&@CRLF
     
    $FileList &=_FO_FileSearch(@ScriptDir & '\Resources', '*', True, 125, 1, 0)
    $file = FileOpen(@ScriptDir & '\FileList.txt',2)
    FileWrite($file, $FileList)
    FileClose($file)

     
    Он выводит список файлов в указанном каталоге (например, "Resources") и его подкаталогах. Пожалуйста, поясните, можно ли выводить список файлов в указанном каталоге и его подкаталогах на основе данного скрипта в следующей конструкции:
     

    Код:
    FileInstall('.\Resources\File.exe', $sExclusiveTempPath & '\File.exe', 1)

     
    И, можно ли, построить список подкаталогов в той же папке "Resources", по следующей схеме:
     

    Код:
    DirCreate($sExclusiveTempPath & '\Folder')

     
    Буду очень признателен Вашей помощи.
     
    Добавлено:
    ViSiToR
     

    Цитата:
    Генерирует и добавляет для текущего скрипта список FileInstall'ов

     
    Как я понимаю должен создаваться файлик "InstalledDir_ИмяУказаннойПапки.fdi", но почему-то это не происходит.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 15:06 26-04-2013 | Исправлено: Artem_Butenko, 15:09 26-04-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    embrace909
    Удалось на Си написать вычисление, но что то счётчик времени показывает 0.0000
     
    Artem_Butenko

    Цитата:
    И, можно ли, построить список подкаталогов в той же папке "Resources", по следующей схеме:  

    Да список каталогов тоже есть _FO_FolderSearch. А вообще всё это есть в справке с примерами.
     
    Обновил RegExp
    Добавлено: Раскрывающийся список для вставки элементов регулярного выражения (настраивается через ini-файл).
    Вместо кнопки "Открыть" раскрывающаяся кнопка выбора библиотеки, запоминает последнюю открытую библиотеку.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 20:50 26-04-2013 | Исправлено: AZJIO, 08:26 29-04-2013
    77599073587



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите сценарий, задача состоит в том что бы с помощью скрипта можно была подключиться к сетевому принтеру

    Всего записей: 31 | Зарегистр. 12-02-2013 | Отправлено: 09:00 29-04-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, я по поводу моих вопросов выше. Спасибо AZJIO навел на мысль в использовании инклюдов: Array.au3, FileOperations.au3 и функции _FO_FolderSearch. В итоге получилось следующее:
     

    Код:
    #include <Includes\Array.au3>
    #include <Includes\FileOperations.au3>
     
    ;; Получение списка папок в указанном каталоге и его подкаталогах.
     
    ;; Папки в в каталоге "Resources" с записью в текстовый файл:
    ;;   - "FoldersList.txt" - общий для всей папки "Resources"  список ее подпапок;
    ;;   - "FoldersList (x86).txt" - список папок в подкаталоге "x86";
    ;;   - "FoldersList (x64).txt" - список папок в подкаталоге "x64".
    $timer = TimerInit()
    $FolderList = _FO_FolderSearch(@ScriptDir & '\Resources', '*', True, 125, 0, 0)
    $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
    ;MsgBox(0, $timer & ' - относительные пути', $FolderList)
    $file = FileOpen(@ScriptDir & '\FoldersList.txt',2)
    FileWrite($file, $FolderList)
    FileClose($file)
    $timer = TimerInit()
    $FolderList = _FO_FolderSearch(@ScriptDir & '\Resources\x86', '*', True, 125, 0, 0)
    $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
    ;MsgBox(0, $timer & ' - относительные пути', $FolderList)
    $file = FileOpen(@ScriptDir & '\FoldersList (x86).txt',2)
    FileWrite($file, $FolderList)
    FileClose($file)
    $timer = TimerInit()
    $FolderList = _FO_FolderSearch(@ScriptDir & '\Resources\x64', '*', True, 125, 0, 0)
    $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
    ;MsgBox(0, $timer & ' - относительные пути', $FolderList)
    $file = FileOpen(@ScriptDir & '\FoldersList (x64).txt',2)
    FileWrite($file, $FolderList)
    FileClose($file)
     
    ;; Получение списка файлов в указанном каталоге и его подкаталогах.
     
    ;; Файлы в в каталоге "Resources" с записью в текстовый файл:
    ;;   - "FilesList.txt" - общий для всей папки "Resources" и ее подпапок список файлов;
    ;;   - "FilesList (x86).txt" - список файлов в подкаталоге "x86";
    ;;   - "FilesList (x64).txt" - список файлов в подкаталоге "x64".
    $FileList =_FO_FileSearch(@ScriptDir & '\Resources', '*', True, 125, 0, 0)
    $file = FileOpen(@ScriptDir & '\FilesList.txt',2)
    FileWrite($file, $FileList)
    FileClose($file)
    $FileList =_FO_FileSearch(@ScriptDir & '\Resources\x86', '*', True, 125, 0, 0)
    $file = FileOpen(@ScriptDir & '\FilesList (x86).txt',2)
    FileWrite($file, $FileList)
    FileClose($file)
    $FileList =_FO_FileSearch(@ScriptDir & '\Resources\x64', '*', True, 125, 0, 0)
    $file = FileOpen(@ScriptDir & '\FilesList (x64).txt',2)
    FileWrite($file, $FileList)
    FileClose($file)

     
    Получаю содержимое текстовых документов, например "FoldersList.txt":
    x64
    x64\2
    x86
    x86\1
     
    и "FilesList.txt"
    File1.zip
    File12.zip
    x64\File3.zip
    x86\File4.zip
     
    Можно ли оптимизировать данный скрипт на стадии записи результатов, а именно:
    - для функции DirCreate (создание структуры всех каталогов с подкаталогами).
    DirCreate($sExclusiveTempPath & '\Найденная папка\Найденная подпапка')
    - для FileInstall (для всех найденных в данном каталоге и его подкаталогах файлов).
    FileInstall('.\Resources\Найденная папка\Найденный.файл', $sExclusiveTempPath & '\Найденная папка\Найденный.файл'', 1)

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 21:59 29-04-2013 | Исправлено: Artem_Butenko, 22:29 29-04-2013
    Sinclair83

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, все. помогите пожалуйста решить следующую задачу:
    есть консольное окно cmd.exe (запущено из-под winxp), в котором выводятся результаты работы некоторой программы. нужно с помощью autoit скопировать содержимое dos-окна (текст) и произвести поиск по этому тексту заданного слова. в теме по bat'никам мне подсказали как это можно сделать, но есть некоторый косметический недостаток (промаргивает окно). есть ли вариант более чистый?
    вот код копирования текста из окна с заданным заголовком в заданное место.
    use: script.exe "title of interesting window" "path to writing file"

    Код:
     
    $ActiveWindow=WinGetTitle("[Active]")
    if (WinActivate($CmdLine[1])) then
    Send("!{SPACE}{UP}{UP}{UP}{RIGHT}{UP}{UP}{UP}{ENTER}{ENTER}")
    FileWrite ($CmdLine[2],ClipGet())
    WinActivate($ActiveWindow)
    EndIf
     

    здесь хоть и кратковременно, но отчетливо виден процесс вызова контекстного меню.
    можно ли как-то обойти это? по-тихому копировать текст из интересующего окна.

    Всего записей: 757 | Зарегистр. 07-01-2009 | Отправлено: 21:06 01-05-2013
    dialmak



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sinclair83
    Прикольный ник. Многое напоминает.
     
    Можно по разному сделать. Как именно зависит от того нужно ли видеть окно cmd и стандартный вывод и что должно вызывать cmd. Ниже пару примеров.
    1. Например через StdoutRead()
    То есть запустить cmd в скрытом окне и вывод консоли StdoutRead() обработать в Autoit.
    Пример вывода dir

    Код:
    #include <Constants.au3>
    #include <Encoding.au3>
    Global $iPID = Run(@ComSpec & ' /c dir', "", @SW_HIDE, $STDERR_MERGED)
                Global $sOut
                ProcessWaitClose($iPID)
                While 1
                    $sOut = StdoutRead($iPID)
                    If @error Then ExitLoop
                    Sleep(100)
                    MsgBox(0,"",_Encoding_OEM2ANSI($sOut))
                WEnd

     
    2. Можно сделать вывод в файл и потом открыть файл через FileOpen и обрабатывать  в Autoit
    Global $iPID = Run(@ComSpec & ' /c dir > 1.txt 2>&1', "", @SW_HIDE)
     
    Есть ещё куча вариантов...
     

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 21:51 01-05-2013 | Исправлено: dialmak, 21:59 01-05-2013
    Sinclair83

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

    Цитата:
    Прикольный ник

    Вы правильно поняли (ZX-Spectrum).
    еще раз все по-порядку: есть bat'ник, в котором прописан старт консольного приложения в этом же окне (start /b). это приложение время от времени выводит на экран некоторый текст. работает постоянно. единственное само дос-окно может быть как в свернутом, так и в развернутом виде. батник также не прекращает своей работы, а занимается запуском через определенное время (в цикле) autoit-script'a, который в свою очередь ищет нужную строку в этом окне. после каждого цикла производится проверка кода возврата. если строка найдена, то происходит вываливание из цикла.
    Добавлено:

    Цитата:
    То есть запустить cmd в скрытом окне...

    скрывать окно не нужно. нужно только в сайлент-режиме изъять текст из окна.

    Всего записей: 757 | Зарегистр. 07-01-2009 | Отправлено: 22:20 01-05-2013 | Исправлено: Sinclair83, 22:32 01-05-2013
    dialmak



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

    Цитата:
    есть bat'ник, в котором прописан старт консольного приложения

    Дык вроде проще делать всё в autoit и выкинуть батник, все стандартные выводы обрабатывать через StdoutRead(), а что там в каком виде неважно, лучше вообще скрыть через @SW_HIDE.

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 22:32 01-05-2013
    Sinclair83

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

    Всего записей: 757 | Зарегистр. 07-01-2009 | Отправлено: 22:43 01-05-2013
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Добрый вечер, Sinclair83, dialmak
    Прошу прощения, что вмешиваюсь в разговор.
    Ув. Sinclair83 при описании упустил одну деталь, которую упоминал при мне - "в окне консоли время от времени появляются/дополняются/затираются цифры, буквы, символы." Командная строка, батники, сценарии (bat, cmd).
    Я это понял, как то, что информация выдается не через StdOut, а через прямое изменение буфера экрана. Т.е нужен именно перехват буфера экрана. Как тестовую программу использовал FAR.

    Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 23:02 01-05-2013
       

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