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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)

Модерирует : gyra, Maz

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Widok



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

AutoIt3
(Часть 1)

 
 
Домашняя страница: http://www.autoitscript.com
Страница загрузки: http://www.autoitscript.com/autoit3/downloads.php
 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Учебник по AutoIt для начинающих
  • Видео-руководства на YouTube (англ.)
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf) - Та же книжка online.
  • Справочник по командам rundll32
  • Справка WinAPI (Win 32 API по шагам)
  • Русский справочник по API-функциям
  • Полезная информация по WinAPI на русском
  • Помощь по регулярным выражениям
  • Tutorial on DllCall() & DllStructs - Небольшое (пока?) руководство по использованию функции DllCall*()
     
     
    Ресурсы, посвящённые AutoIt
  • AutoIt в Википедии
  • AutoIt Russian Community - Русское сообщество AutoIt
  • Jabber-конференция для обсуждения мелких вопросов касающихся AutoIt
  • Обзор скриптового языка AutoIt (рус.)
  • AutoIt на Yahoo! Groups
  • Раздел в конфиренции OSzone.net, посвящённый AutoIt
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Коллекция AutoIt-скриптов от Sanja Alone
  • Коллекция AutoIt-скриптов от MSFN (могут быть устаревшие).
  • Коллекция AutoIt-скриптов от AZJIO
     
     
    !!! Полезные советы и заметки - новичкам и не только
     
     
  • Рекомендации по написанию скриптов
     
     
    Инструменты для AutoIt:
  • AutoIt Path Switcher - Переключение пути к папке AutoIt.
  • AutoIt3Wrapper [Страница закачки] - Программа для компиляции скрипта с дополнительными возможностями (добавление значка, описания и т.п).
  • Koda (724 Kb) - Визуализация работы с GUI - аналог Visual Basic.
  • CodeWizard (400 Kb) - нечто простенькое на вариант Koda.
  • AutoItMacroGenerator (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt-код.
  • ScriptWriter (78 Kb) - Аналог AutoItMacroGenerator.
  • API Constants (1042 Kb) - Утилита для просмотра всех констант API-функции и не только.
  • Страница закачки утилит, которые идут в отдельной поставке редактора SciTE.
  • AutoIt-меню для браузера Opera.
     
    Готовые скрипты и программы с открытым кодом на AutoIt:
  • Desktop Icons Restorator - Скрипт-программа для сохранения/восстановления позиции значков рабочего стола.
  • CaptureIt - Утилита для захвата изображений с экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста.
  • Скрипт раскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger) - Последняя версия: AutoItScript Add Debugger
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Чтение и запись данных с/в окна/о SciTE
  • Пример автообновления версии своего приложения
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значок в области уведомлений)
  • Пример создания своего мастера (Wizard)
  • Метод, позволяющий запускать код VBS без создания временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за буфером обмена с заменой неподдерживаемых в имени файла символов
  • Подключение приложения (GUI) к буферу обмена
  • Пример использования меню с значками (ModernMenu.au3) -> Список программ в меню значка в системном трее
  • Пример подсчёта интервала времени между нажатиями клавиш
  • Слежение нажатых элементов в текущем окне (под курсором)
  • Написание instant messaging Бота на AutoIt
  • Способ, позволяющий посылать нажатие клавиши в неактивное окно (не путать со свёрнутым)
  • Сервер <=> Клиент - Пример передачи файла
  • Пример отображения только элементов GUI (без самой оболочки)
  • Модуль, превращающий ваше приложение в Trial-версию
  • Слежение за выделенным текстом и с последующим его помещением в файл
     
    Отдельные функции и библиотеки (UDF):
  • Функции, относящиеся к интернету
  • Функции для работы с процессами и окнами
  • Функции для работы с файлами
  • Функции для GUI/Tray
  • Системные функции
  • Разное (то, что не подпадает под другие категории)
     


     
    За шапкой следит ViSiToR  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 14:47 12-01-2009 | Исправлено: Maz, 11:50 17-04-2017
    Hackproof



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

    Цитата:
    Вот я не знаю как сделать, чтобы при вызове меню и нажатии на мой скрипт, файл отправлялся в папку...


    Код:
    FileCopy($cmdline[1],"C:\myftp\")

    $cmdline[1] - первый аргумент командной строки. $cmdline[2] - второй и тд.
    $CmdLine[0] - количество параметров.
     
    Так можно копировать и два и три файла, отправленные на скрипт.  

    Код:
    For $i=1 to $cmdline[0]
        FileCopy($cmdline[$i],"c:\myftp")
    Next

    Максимальное количество аргументов - 63.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 21:28 31-12-2009 | Исправлено: Hackproof, 21:35 31-12-2009
    MoBiRo

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Большое спасибо! =)

    Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 21:33 31-12-2009 | Исправлено: MoBiRo, 21:38 31-12-2009
    MoBiRo

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот доделал программку, может кому-нибудь пригодиться.  
    Если у вас на компьютере стоит ftp сервер чисто для своих нужд (чтобы вам передали файл на прямую, а не через файлообменник или чтобы скачали ваш так же напрямую), то вам возможно пригодиться этот скриптик.
    При переносе файлов на скомпилированный скрипт, они переносятся в ftp-папку и ихнее имя меняется на транслитированный вариант без пробелов (пробелы заменяются "_"). По окончанию работы программа заносит в буфер обмена список ссылок на ваши файлы и ихний размер, округлённый до тысячных. Другими словами, то, что вы скопировали до запуска скрипта - удалится, вместо этого будет список ссылок. Так же если в папке уже существует файл с подобным именем, то к имени файла добавляется символ "_".
    Чтобы подредактировать скриптик под свои нужды надо прочитать комментарии. Кроме переменный $FTPLocation и $FTPAdress менять ничего не нужно.
     

    Код:
    #Include <File.au3>
     
    Dim $InputCharset [153] = [32, 1105, 1081, 1094, 1091, 1082, 1077, 1085, 1075, 1096, 1097, 1079, 1093, 1098, 1092, 1099, 1074, 1072, 1087, 1088, 1086, 1083, 1076, 1078, 1101, 1103, 1095, 1089, 1084, _
    1080, 1090, 1100, 1073, 1102, 96, 113, 119, 101, 114, 116, 121, 117, 105, 111, 112, 91, 93, 97, 115, 100, 102, 103, 104, 106, 107, 108, 59, 39, 122, 120, 99, 118, 98, 110, 109, 44, 46, 47, 49, 50, 51, _
    52, 53, 54, 55, 56, 57, 48, 45, 61, 92, 33, 64, 35, 36, 37, 94, 38, 42, 40, 41, 95, 43, 124, 1025, 1049, 1062, 1059, 1050, 1045, 1053, 1043, 1064, 1065, 1047, 1061, 1066, 1060, 1067, 1042, 1040, 1055, _
    1056, 1054, 1051, 1044, 1046, 1069, 1071, 1063, 1057, 1052, 1048, 1058, 1068, 1041, 1070, 81, 87, 69, 82, 84, 89, 85, 73, 79, 80, 65, 83, 68, 70, 71, 72, 74, 75, 76, 90, 88, 67, 86, 66, 78, 77]
     
    Dim $OutputCharset [153] = ["_", "e", "i", "c", "u", "k", "e", "n", "g", "sh", "sch", "z", "h", "'", "f", "y", "v", "a", "p", "r", "o", "l", "d", "j", "e", "ya", "ch", "s", "m", "i", "t", "'", "b", _
    "yu", "`", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "1", "2", "3", "4", _
    "5", "6", "7", "8", "9", "0", "-", "=", "\", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "|", "E", "I", "C", "U", "K", "E", "N", "G", "SH", "SCH", "Z", "H", "'", "F", "Y", "V", "A", _
    "P", "R", "O", "L", "D", "J", "E", "YA", "CH", "S", "M", "I", "T", "'", "B", "YU", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", _
    "B", "N","M"]
     
    Dim $FileName          ; имя файла без расширения
    Dim $NameLength     ; длинна имени файла
    Dim $FileNameArray  ; массив, содержащий коды всех символов имени файла
    Dim $FileExt             ; расширение файла
    Dim $FileDrive          ; диск, на котором расположен файл. по сути эта переменная вообще не используется, но без неё появляется ошибка...
    Dim $FileDirectory    ; путь из папок (всё оставшееся кроме названия диска и имени файла). так же нигде не используется
    Dim $FileSize           ; размер файла
    Dim $i, $j, $l            ; счётчики, использующиеся при For
    Dim $FTPFilePath      ; конечный путь, содержащий адрес ftp в интернете и полное имя файла
    Dim $ToClip             ; список из ссылок, который заносится в клипборд
     
    Dim $FTPLocation = "C:\MyFTP\" ; местонахождение папки ftp-сервера на вашем компьютере, место куда копируются файлы
     
    Dim $FTPAdress = "ftp://myftp.ru/" ; адрес, к которому будет приписываться имя файла.
                                                        ; Например, если вы напишите ftp://myftp.ru/, то вы получите сслыки вида:
                                                        ; ftp://myftp.ru/<filename>
                                                        ; если к вашему ip не привязан домен, тогда уберите комментарии у следующего кода:
     
    ;~ #Include <INet.au3>
    ;~ $FTPAdress = "ftp://" & _GetIP() & "/"

     
    For $i = 1 To $cmdline[0]
        _PathSplit($cmdline[$i], $FileDrive, $FileDirectory, $FileName, $FileExt)
        $FileSize = Round (((FileGetSize($cmdline[$i])) / 1048576), 3)
        $NameLength = StringLen($FileName)
        $FileNameArray = StringToASCIIArray($FileName)
        $FileName = ""
        For $j = 0 To $NameLength - 1
            For $l = 0 to 151
                If $FileNameArray[$j] = $InputCharset[$l] Then
                    $FileName = $FileName & $OutputCharset[$l]
                EndIf
            Next
        Next
    While
    FileExists ($FTPLocation & $FileName & $FileExt)
         $FileName = $FileName & "_"
    WEnd
    FileCopy($cmdline[$i], $FTPLocation & $FileName & $FileExt)
    $FTPFilePath = $FTPAdress & $FileName & $FileExt & " ( " & $FileSize & "mb )"
    If $i <> $cmdline[0] Then
        $ToClip = $ToClip & $FTPFilePath & @CRLF
    Else
        $ToClip = $ToClip & $FTPFilePath
    EndIf
    Next

    ClipPut($ToClip)
    TrayTip("FTP Script", "Done", 5, 1)
    Sleep (5000)

    Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 17:55 01-01-2010 | Исправлено: MoBiRo, 08:37 03-01-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли средствами AutoIt3 (без @Comspec) выполнить такую строку:

    Код:
    RunWait (@Comspec&' /C '&@ScriptDir&'\tools\imagex.exe /info "'&$inputwim0&'">"'&$inputtmp0&'\tmp\wim_info.txt"','',@SW_HIDE )

     
    В чём у меня проблемы:
    @ScriptDir&'\tools\imagex.exe  должна быть обрамлена кавычками, иначе должны быть проблемы с путями с пробелами, но когда ставлю кавычки, то не работает даже если пути без пробелов. Обрамляю так:

    Код:
    RunWait (@Comspec&' /C "'&@ScriptDir&'\tools\imagex.exe" /info "'&$inputwim0&'">"'&$inputtmp0&'\tmp\wim_info.txt"','',@SW_HIDE )

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 22:36 02-01-2010 | Исправлено: AZJIO, 22:58 02-01-2010
    ViSiToR



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

    Код:
    RunWait('"' & @ScriptDir & '\tools\imagex.exe" /info "' & $inputwim0 & '">"' & $inputtmp0 & '\tmp\wim_info.txt"', '', @SW_HIDE)

     
    ?

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

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



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

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 23:35 02-01-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 23:35 02-01-2010
    Цитата:
    попробую

    Попробуй также почитать справку по Run
     

    Цитата:
    ConsoleRead, она случайно не передаёт вывод данных консоли в переменную?

    Для этого используется StdoutRead, но при этом в Run нужно указать параметры.

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    проверил, не работает
    Это ведь команда для консольной строки, для оработчика cmd.exe
    текст>wim_info.txt
    Я не пробовал команду Run только из-за того, что в ней у меня и до этого были проблемы, например
    Код:
    Run ( @Comspec&' /C REG LOAD HKLM\PE_SY_HI '&$inputi386z0&'\system32\setupreg.hiv', '', @SW_HIDE )
    у меня не работает без вызова @Comspec.
     
    На счёт StdoutRead придётся долго разбираться, как я понял нужно сначала отправить данные в какой-то там поток, а потом считать их из вывода потока.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 00:13 03-01-2010 | Исправлено: AZJIO, 00:15 03-01-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 00:13 03-01-2010
    Цитата:
    роверил, не работает

    Что именно, как проявляется нерабочесть?
     
    А так:
     

    Код:
    RunWait('"' & @ScriptDir & '\tools\imagex.exe" /info "' & $inputwim0 & '">"' & $inputtmp0 & '\tmp\wim_info.txt"', @ScriptDit & '\tools', @SW_HIDE)

     
    и что такое $inputwim0? есть подозрение что это ID элемента GUI
     

    Цитата:
    На счёт StdoutRead придётся долго разбираться

    А в справке разве нет примера?

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    $inputwim0 - это путь к файлу
    Для imagex.exe нужно указать ключ /info  и путь к файлу, из которого изымается инфа и отправляется в текстовый файл. Нерабочесть в том, что уменя в скрипте если переменная равна ничему, то скрипт выдаёт сообщение с предложением закрыть прогу или повторить цикл извлечеения, но как я понял, если с первого раза не получилось, можно смело делать выход из программы. Скрипт работает стабильно и выдаёт инфу, если всё прошло успешно, если путь указан без пробелов. Естественно я сначала проверил рабочий вариант "путь без пробелов", и уже на нём результата небыло.
     

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

    Код:
    $Runz = RunWait(@Comspec&' /C '&@ScriptDir&'\tools\imagex.exe /info "'&$inputwim0&'"','',@SW_HIDE,$STDOUT_CHILD)
    $line = StdoutRead($Runz)
    MsgBox(0, "инфа", $line)

     
    $STDOUT_CHILD равна 0x2

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 00:45 03-01-2010 | Исправлено: AZJIO, 00:49 03-01-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 00:45 03-01-2010
    Цитата:
    Нерабочесть в том, что уменя в скрипте если переменная равна ничему, то скрипт выдаёт сообщение

    Тогда при чём тут Run?
    И вообще, чтобы измежать проблему с пробелами, можно использовать FileGetShortName.
     

    Цитата:
    пробую так

    А в справке написано так:
     

    Код:
    ; Demonstrates StdoutRead()
    #include <Constants.au3>
     
    Local $foo = Run(@ComSpec & " /c dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
        $line = StdoutRead($foo)
        If @error Then ExitLoop
        MsgBox(0, "STDOUT read:", $line)
    Wend
     
    While
    1
        $line = StderrRead($foo)
        If @error Then ExitLoop
        MsgBox(0, "STDERR read:", $line)
    Wend
     
    MsgBox(0, "Debug", "Exiting...")


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:59 03-01-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо, окончательный вариант:
    Код:
    #include <Constants.au3>
    $foo = Run(@ScriptDir&'\tools\imagex.exe /info "C:\11\мой вим.wim"', @SystemDir, @SW_HIDE, $STDOUT_CHILD)
    $output=''
    While 1
        $line = StdoutRead($foo)
        If @error Then ExitLoop
         $output &= $line
    Wend
        $labelwim0 = StringRegExpReplace($output, "(?s).*<NAME>(.*)</NAME>.*", "\1")
        MsgBox(0, "вот оно", $labelwim0)

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 01:38 03-01-2010 | Исправлено: AZJIO, 02:40 03-01-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил скрипт Пользовательские каталоги
    вот только как бы избавится от проблемки, когда удаляется комбобокс GUICtrlDelete($username) при смене диска и создаётся заново, то прорисовывается только при наведении мышки. Для теста нужно создать папку "Documents and Settings" на ином диске и скопировать в неё "Default User" из своей системы, переименовав в какое нибудь имя.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 19:23 04-01-2010 | Исправлено: AZJIO, 18:48 05-01-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 19:23 04-01-2010
    Цитата:
    удаляется комбобокс GUICtrlDelete($username) при смене диска и создаётся заново

    Зачем?

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

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



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

    Цитата:
    Зачем?
    создаётся новый, с новыми данными. Либо нужно очистить всё в комбобоксе и создать новые данные. Я сделал через полное удаление комбобокса.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 01:56 05-01-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 01:56 05-01-2010
    Цитата:
    нужно очистить всё в комбобоксе и создать новые данные

    Это будет наилучшим решением

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:16 05-01-2010
    frb_noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не могу получить размер файла, лежащего на ФТП сервере, а очень нужно для организации контроля передачи (нестабильный канал). Приведенная ниже конструкция выдает 0, хотя файл в 44Мб однозначно лежит в папке на ФТП.
     

    Код:
    #include<process.au3>
    #include<array.au3>
    #include<date.au3>
    #include<file.au3>
    #include<ftp.au3>
    #include<ftpex.au3>
     
    Opt ("ExpandEnvStrings", 0)
    Opt ("ExpandVarStrings", 1)
    Opt ("MustDeclareVars", 1)
    Dim $server = IniRead("config.ini", "config", "r_server", ""), $filelist
    Dim $username = IniRead("config.ini", "config", "username", "")
    Dim $pass = IniRead("config.ini", "config", "password","")
    Dim $port = IniRead("config.ini", "config", "port","")
    Dim $dllhandle = DllOpen('wininet.dll')
    Global $LocalPath = "\\comp\Почта\OUT\", $Sendto="net send *.*.*.* "
    Dim $LocalFolder=StringMid(_now(),7,4) & "." & StringMid(_now(),4,2)& "." & StringMid(_now(),1,2)
    Dim $Open = _FTPOpen('MyFtp')
    Dim $year = IniRead("config.ini", "config", "year",StringMid(_now(),7,4))
    ;===========================================================================================
    ;===================== проверка на существование еще одного процесса =======================
    ;======================== работает только в откомпилированном виде =========================
    ;===========================================================================================

    Dim $list, $i
    Dim $list = ProcessList(@ScriptName)
    for $i = 1 to $list[0][0]
    next
    If
    $i-1>1 Then
        Exit
    Else
    EndIf

     
                    ;============== конектимся на ФТП =============================================
                        Dim $Conn = _FTPConnect($Open, $server, $username, $pass, $port)
                        If @error Then
                            _RunDOS($Sendto & "Ошибка соединения с ФТП-сервером ! Файл " & $filelist[$z] & " не отправлен !")
                        Else
                        EndIf
                    ;================= получение размера файла на ФТП ===========================
                    _FTP_DirSetCurrent($Conn, "/folder1/folder2/")
                    MsgBox(0, "Size of remote file:", _FTP_FileGetSize($Conn,"arhive.rar"))

     
    Что я криво сделал ?
    Файл arhive.rar находится в папке folder2
     
    ===============================================================
    Нашел грабли. FTPConnect и FTPOpen использовал из старого FTP.au3 а нужно из FTPEx.au3
    Теперь все работает

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 10:14 05-01-2010 | Исправлено: frb_noname, 17:20 05-01-2010
    AZJIO



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

    Цитата:
    Это будет наилучшим решением
    GUICtrlSetData якобы устанавливает новые данные, но я в двух скриптах сталкивался с проблемами, что новые пункты добавляются а старые (потерявшие значение) не удаляются. Вот кусок кода - функция, закомменитировал удаление, перенёс GUICtrlCreateCombo в начало скрипта, в итоге добавление пунктов к уже существующим, а не удаление. Такой же эффект в скрипте gui_qemu.au3, который я выкладывал уже.

    Код:
    GUICtrlDelete($username)
    $bykvadicka081=StringMid(GUICtrlRead ($bykvadicka80), 1,2)
    $aFolderDAS = _FileListToArrayEx($bykvadicka081 & '\Documents and Settings', "", 2, 0)
     
    $x1='-'
    $x2='-'
    $x3='-'
    $x4='-'
    $x5='-'
     
    $z=1
    For $i=2 To $aFolderDAS[0]
        $x=$i-$z
       $aNameUser
    =StringRegExp($aFolderDAS[$i], "(^.*)\\(.*)$", 3)
        If StringRegExp($aNameUser[1], "All Users|Default User|LocalService|NetworkService", 0)=0 and FileExists($bykvadicka081 & '\Documents and Settings\'&$aNameUser[1]&'\NTUSER.DAT') Then
           Assign('x' & $x, $aNameUser[1])
        else
           $z+=1
        EndIf
    Next

     
    $username=GUICtrlCreateCombo ("", 230,40,120,18)
    GUICtrlSetData(-1,'текущий|'&$x1&'|'&$x2&'|'&$x3&'|'&$x4&'|'&$x5, 'текущий')

    Данный кусок кода создаёт список пользователей в комбобоксе, как известно их может быть не более пяти, поэтому пять переменных в GUICtrlSetData переменные генерируются поиском каталогов в Documents and Settings и исключением стандартных, не являющихся пользователями. И проверка наличия NTUSER.DAT в каталоге - фильтр отсеивания.
    Пробежался по "версия для печати", решения не нашёл.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 10:28 05-01-2010 | Исправлено: AZJIO, 10:38 05-01-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 10:28 05-01-2010
    Цитата:
     новые пункты добавляются а старые (потерявшие значение) не удаляются

    Ну так их нужно самому удалить:
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
     
    $hGUI = GUICreate("Test Script", 300, 120)
     
    $sReplaceData = GUICtrlCreateButton("Replace", 20, 20)
     
    $nCombo = GUICtrlCreateCombo("", 20, 70, 260, 20)
    GUICtrlSetData(-1, "Data|More data", "Data")
     
    GUISetState(@SW_SHOW, $hGUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $sReplaceData
                GUICtrlSendMsg($nCombo, $CB_RESETCONTENT, 0, 0)
                GUICtrlSetData($nCombo, "New Data|My Data", "New Data")
        EndSwitch
    WEnd


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:46 05-01-2010
    RagemanT

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли организовать поиск файла по имени?
    Например найти файл(ы) ***.ini на диске C? Известно что в файле ***.ini есть такие строки:

    Код:
    Driver=com.mysql.jdbc.Driver
    URL=***
    Login=***
    Password=***
    MaximumDbConnections=***
    и т.д.

    Всего записей: 10 | Зарегистр. 08-01-2010 | Отправлено: 16:31 08-01-2010 | Исправлено: RagemanT, 16:36 08-01-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

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
    Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru