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

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

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

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

   

AddXL

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

AutoIt3

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

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

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Справочник по командам rundll32
  • Русский справочник по API-функциям
  • Помощь по Регулярным выражениям
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf)
     
    Инструметы для 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:
  • Коллекция AutoIt скриптов от Sanja Alone
  • Коллекция скриптов на http://msfn.org
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Desktop Icons Restorator - Скрипт-Программа для сохранения/восстановления позиции иконок р.стола.
  • CaptureIt - Утилита предназначена для захвата изображений с вашего экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста
  • Скрипт расскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger)
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значёк в области уведомления)
  • Пример создания своего мастера (Wizard)
  • Метод позволяющий запускать код VBS не создавая временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за б.обмена с заменой неподдерживаемых в имени файла символов
  • Пример использования меню с иконками (ModernMenu.au3) -> Список программ в меню значка в системном трее
     
  • Как по PID процесса вычислить путь запускаемого файла
  • Получение IP по подключенному сокету
     
    Отдельные функции (UDF):
  • Функции Отключения/Подключения к Интернету
  • Функция проверки подключения к Интернету
  • Функция для получения структуры директории включая подкаталоги
  • Функция для поиска в файлах
  • Функция для смены разрешения экрана
  • Функция для смены раскладки клавиатуры в определённом окне
  • Функция для получения списка процессов с допол. инфой (путь к исполняемому файлу и др.)
  • Функции и пример для отображения детального процесса закачки файла
  • Функция (и пример использования) для отображения стильного диалога “О Программе” - [Усовершенствованная версия]
  • Функция возвращает пронумерованный список всех классов определённого окна + функция получения хендлов для этих классов
  • Функция для получения заголовка окна (или его идентификатора) по ID процесса (PID)
  • Функция _StringIsUTF8Format() + _StringToUTF() - Первая проверяет если строка содержится в UTF-8 формате, вторая преобразовывает строку в UTF-8 формат
  • Функция _FileOpenDialogEx - Возвращает массив (или строку) с полными путями к выбранным файлам
  • _AU3_Lib* Функции - Предназначены для обработки подключаемых библиотек через #include
  • Функция транслитерации строки
  • Расширенная библиотека для работы с реестром
     
    За шапкой следит ViSiToR  

  • Всего записей: 6 | Зарегистр. 24-11-2005 | Отправлено: 13:20 24-11-2005 | Исправлено: Maz, 11:50 17-04-2017
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 10:37 22-10-2008
    Цитата:
    В смысле отключена возможность выполнять скрипты?

    Не сами скрипты, а COM объекты. Как отключить специально точно не знаю, никогда небыло такой необходимости

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:13 22-10-2008
    Maza Faka



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

    Цитата:
    Как отключить специально точно не знаю

    Ну вот, тогда как ты можешь утверждать, что мой пример может не сработать?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:06 22-10-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, плиз.
    Имею такой файл (incomeletters.txt)

    Код:
    +OK POP Ya! v1.0na
    USER delta2-greit
    +OK password, please.
    PASS ******
    +OK 4 message(s) 49782 bytes.
    STAT
    +OK 4 49782
    LIST
    +OK 4 49782
    1 12443
    2 12447
    3 12449
    4 12443
    .
    UIDL 1
    +OK 1 317a487b85a13d2606349c0aa4b9e731
    RETR 1
    +OK 12443 octets.
    Received: from smtp4.yandex.ru (smtp4.yandex.ru [213.180.223.136])
        by mxback1.yandex.ru (Postfix) with ESMTP id 7451263FA2
        for <delta2-greit[сами_знаете_что]yandex.ru>; Wed, 22 Oct 2008 16:20:56 +0400 (MSD)
    Received: from 57-172.dialup.primorye.ru ([81.2.57.172]:54791 "EHLO
            a62fc6637610461" smtp-auth: "delta-greit" TLS-CIPHER: <none>
            TLS-PEER-CN1: <none>) by mail.yandex.ru with ESMTP id S966850AbYJVMU4
            (ORCPT <rfc822;delta2-greit[сами_знаете_что]yandex.ru>);
            Wed, 22 Oct 2008 16:20:56 +0400
    X-Yandex-Spam: 1  
    X-Yandex-Front: smtp4
    X-Yandex-TimeMark: 1224678056
    X-BornDate: 1154552400
    X-Yandex-Karma: 0
    X-Yandex-KarmaStatus: 0
    X-MsgDayCount: 37
    X-Comment: RFC 2476 MSA function at smtp4.yandex.ru logged sender identity as: delta-greit
    Date:   Wed, 22 Oct 2008 23:20:47 +1100
    From:   delta-greit[сами_знаете_что]yandex.ru
    To:     delta2-greit[сами_знаете_что]yandex.ru
    X-Mailer: Blat v2.6.2 w/GSS encryption, a Win32 SMTP/NNTP mailer http://www.blat.net
    Message-ID: <01c93440$Blat.v2.6.2$9cf5817a$cb4daf3883a[сами_знаете_что]yandex.ru>
    Subject: =?Windows-1251?B?8e/g8ejh7iDn4CDv7uzu+fw=?=
    MIME-Version: 1.0
    Content-Type: multipart/mixed;
     boundary="=_BlatBoundary-bFJAaaP70OBdEaKcFnAtU"
     
    This is a multi-part message in MIME format.
     
    --=_BlatBoundary-bFJAaaP70OBdEaKcFnAtU
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/plain; charset=Windows-1251
     
    =CF=F0=E8=E2=E5=F2
    =EA=E0=EA =E4=E5=EB=E0=3F2
     
    --=_BlatBoundary-bFJAaaP70OBdEaKcFnAtU
    Content-Type: application/octet-stream;
     name="2_Slavinka4_per_7.zip"
    Content-Disposition: ATTACHMENT;
     filename="2_Slavinka4_per_7.zip"
    Content-Transfer-Encoding: BASE64
     
    4sdjlskjuwerYYIOIJOIU&%%&Zw0AAKIdAAAJAH0ARGVsdGEuZGFsU0RoAKwAAAAACAAIFZz
    Y2RgaRFhYGAwYIAAHyBmZAUzWUWBxD4WO6MvAbtK2J9aa39hxC3HyMTAwMSQwMACkhWQYPjP
    AgCTAAAAmx4AAAAA
     
    --=_BlatBoundary-bFJAaaP70OBdEaKcFnAtU--
    .
    UIDL 2
    +OK 2 aaca04fdd9bf08647bb98d69dd15d97c
    RETR 2
    +OK 12447 octets.
    Received: from smtp11.yandex.ru (smtp11.yandex.ru [213.180.223.93])
        by mxback1.yandex.ru (Postfix) with ESMTP id 5DE5D63F9C
        for <delta2-greit[сами_знаете_что]yandex.ru>; Wed, 22 Oct 2008 16:20:55 +0400 (MSD)
    Received: from 57-172.dialup.primorye.ru ([81.2.57.172]:54023 "EHLO
            a62fc6637610461" smtp-auth: "delta-greit" TLS-CIPHER: <none>
            TLS-PEER-CN1: <none>) by mail.yandex.ru with ESMTP id S5095627AbYJVMUr
            (ORCPT <rfc822;delta2-greit[сами_знаете_что]yandex.ru>);
            Wed, 22 Oct 2008 16:20:47 +0400
    X-Yandex-Spam: 1  
    X-Yandex-Front: smtp11
    X-Yandex-TimeMark: 1224678047
    X-BornDate: 1154552400
    X-Yandex-Karma: 0
    X-Yandex-KarmaStatus: 0
    X-MsgDayCount: 36
    X-Comment: RFC 2476 MSA function at smtp11.yandex.ru logged sender identity as: delta-greit
    Date:   Wed, 22 Oct 2008 23:20:39 +1100
    From:   delta-greit[сами_знаете_что]yandex.ru
    To:     delta2-greit[сами_знаете_что]yandex.ru
    X-Mailer: Blat v2.6.2 w/GSS encryption, a Win32 SMTP/NNTP mailer http://www.blat.net
    Message-ID: <01c93440$Blat.v2.6.2$98143142$a94e3fea18c[сами_знаете_что]yandex.ru>
    Subject: =?Windows-1251?B?8e/g8ejh7iDn4CDv7uzu+fw=?=
    MIME-Version: 1.0
    Content-Type: multipart/mixed;
     boundary="=_BlatBoundary-haVy4pDehw3lAso0xJE3V"
     
    This is a multi-part message in MIME format.
     
    --=_BlatBoundary-haVy4pDehw3lAso0xJE3V
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/plain; charset=Windows-1251
     
    =CF=F0=E8=E2=E5=F2
    =EA=E0=EA =E4=E5=EB=E0=3F2
     
    --=_BlatBoundary-haVy4pDehw3lAso0xJE3V
    Content-Type: application/octet-stream;
     name="2_Slavinka3_per_7.zip"
    Content-Disposition: ATTACHMENT;
     filename="2_Slavinka3_per_7.zip"
    Content-Transfer-Encoding: BASE64
     
    3UEsDBBQAAAAIABE8fDeSyHbW4827348jdfkashdfdlskjdauZGFsU0RoAKwAAAAACAAIFZz
    Y2RgaRFhYGAwYIAAHyBmZAUzWUWBxD4WO6MvAbtK2J9aa3fkjasflkjlkjfsfMACkhWQYPjP
    AgCTAAAAmx4AAAAA
     
    --=_BlatBoundary-haVy4pDehw3lAso0xJE3V--
    .
    UIDL 3
    +OK 3 2db3021994ccef945d58a32680951d0c
    RETR 3
    +OK 12449 octets.
    Received: from smtp10.yandex.ru (smtp10.yandex.ru [213.180.223.92])
        by mxback24.yandex.ru (Postfix) with ESMTP id 871232D69DE
        for <delta2-greit[сами_знаете_что]yandex.ru>; Wed, 22 Oct 2008 16:20:45 +0400 (MSD)
    Received: from 57-172.dialup.primorye.ru ([81.2.57.172]:53255 "EHLO
            a62fc6637610461" smtp-auth: "delta-greit" TLS-CIPHER: <none>
            TLS-PEER-CN1: <none>) by mail.yandex.ru with ESMTP id S5882066AbYJVMUk
            (ORCPT <rfc822;delta2-greit[сами_знаете_что]yandex.ru>);
            Wed, 22 Oct 2008 16:20:40 +0400
    X-Yandex-Spam: 1  
    X-Yandex-Front: smtp10
    X-Yandex-TimeMark: 1224678040
    X-BornDate: 1154552400
    X-Yandex-Karma: 0
    X-Yandex-KarmaStatus: 0
    X-MsgDayCount: 35
    X-Comment: RFC 2476 MSA function at smtp10.yandex.ru logged sender identity as: delta-greit
    Date:   Wed, 22 Oct 2008 23:20:31 +1100
    From:   delta-greit[сами_знаете_что]yandex.ru
    To:     delta2-greit[сами_знаете_что]yandex.ru
    X-Mailer: Blat v2.6.2 w/GSS encryption, a Win32 SMTP/NNTP mailer http://www.blat.net
    Message-ID: <01c93440$Blat.v2.6.2$936e7bd4$f501d8017b9[сами_знаете_что]yandex.ru>
    Subject: =?Windows-1251?B?8e/g8ejh7iDn4CDv7uzu+fw=?=
    MIME-Version: 1.0
    Content-Type: multipart/mixed;
     boundary="=_BlatBoundary-PYzZdEWPkCEywvp8l49Ot"
     
    This is a multi-part message in MIME format.
     
    --=_BlatBoundary-PYzZdEWPkCEywvp8l49Ot
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/plain; charset=Windows-1251
     
    =CF=F0=E8=E2=E5=F2
    =EA=E0=EA =E4=E5=EB=E0=3F2
     
    --=_BlatBoundary-PYzZdEWPkCEywvp8l49Ot
    Content-Type: application/octet-stream;
     name="2_Slavinka2_per_7.zip"
    Content-Disposition: ATTACHMENT;
     filename="2_Slavinka2_per_7.zip"
    Content-Transfer-Encoding: BASE64
     
    2UEsDBBQAAAAIABE8fDeSyHbWZw0AAKIdAAAJAH0ARGVsdGEuZGFsU0RoAKwAAAAACAAIFZz
    Y2RgaRFhYGAwYIAAHyBmZAUzWUWBxD4WO6MvAbtK2J9aa39hxC3HyMTAwMSQwMACkhWQYPjP
    fkdf;k3i&*^*^*&YOjiojUYYTRooiijuZGFsU0QEAKwAAABVVAUAB/GMTEdQSwUGAAAAAAIA
    AgCTAAAAmx4AAAAA
     
    --=_BlatBoundary-PYzZdEWPkCEywvp8l49Ot--
    .
    UIDL 4
    +OK 4 77c142d48fbdf7746f1a04b0859a4b76
    RETR 4
    +OK 12443 octets.
    Received: from smtp4.yandex.ru (smtp4.yandex.ru [213.180.223.136])
        by mxback1.yandex.ru (Postfix) with ESMTP id 8186863F9A
        for <delta2-greit[сами_знаете_что]yandex.ru>; Wed, 22 Oct 2008 16:20:34 +0400 (MSD)
    Received: from 57-172.dialup.primorye.ru ([81.2.57.172]:52487 "EHLO
            a62fc6637610461" smtp-auth: "delta-greit" TLS-CIPHER: <none>
            TLS-PEER-CN1: <none>) by mail.yandex.ru with ESMTP id S966864AbYJVMUc
            (ORCPT <rfc822;delta2-greit[сами_знаете_что]yandex.ru>);
            Wed, 22 Oct 2008 16:20:32 +0400
    X-Yandex-Spam: 1  
    X-Yandex-Front: smtp4
    X-Yandex-TimeMark: 1224678032
    X-BornDate: 1154552400
    X-Yandex-Karma: 0
    X-Yandex-KarmaStatus: 0
    X-MsgDayCount: 34
    X-Comment: RFC 2476 MSA function at smtp4.yandex.ru logged sender identity as: delta-greit
    Date:   Wed, 22 Oct 2008 23:20:23 +1100
    From:   delta-greit[сами_знаете_что]yandex.ru
    To:     delta2-greit[сами_знаете_что]yandex.ru
    X-Mailer: Blat v2.6.2 w/GSS encryption, a Win32 SMTP/NNTP mailer http://www.blat.net
    Message-ID: <01c93440$Blat.v2.6.2$8eb815f0$9e4495ab3c5[сами_знаете_что]yandex.ru>
    Subject: =?Windows-1251?B?8e/g8ejh7iDn4CDv7uzu+fw=?=
    MIME-Version: 1.0
    Content-Type: multipart/mixed;
     boundary="=_BlatBoundary-1tBs7TKxSj65ODJWxah5u"
     
    This is a multi-part message in MIME format.
     
    --=_BlatBoundary-1tBs7TKxSj65ODJWxah5u
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/plain; charset=Windows-1251
     
    =CF=F0=E8=E2=E5=F2
    =EA=E0=EA =E4=E5=EB=E0=3F2
     
    --=_BlatBoundary-1tBs7TKxSj65ODJWxah5u
    Content-Type: application/octet-stream;
     name="2_Slavinka1_per_7.zip"
    Content-Disposition: ATTACHMENT;
     filename="2_Slavinka1_per_7.zip"
    Content-Transfer-Encoding: BASE64
     
    1UEsDBBQAAAAIABE8fDeSyHbWZw0AAKIdAAAJAH0AasdasdE23423424oAKwAAAAACAAIFZz
    AAAAAAAAACAAtoELDgAAQWN0aW9uMTIjkasdlkajsldkasdVVAUAB/GMTEdQSwUGAAAAAAIA
    AgCTAAAAmx4AAAAA
     
    --=_BlatBoundary-1tBs7TKxSj65ODJWxah5u--
    .
    QUIT
    +OK shutting down.
    0  

     
    Требуется:
    1. найти все строки, содержащие подстроку "filename" и записать все что в кавычках в этой строке в переменную (с этим справился, благодаря подсказке MazaFaka с рэгэкспами) и запомнить номер строки
    2. Создать текстовые файлы, чьи имена равны значениям переменных из п.1 и записать в них содержимое аттачей. Т.е. встретилась нам строка с "filename", запомнили имя аттача, бежим по файлу далее, как встретилась первая пустая строка, начинаем писать строки в текстовый файл (или специальный массив) и делаем это до тех пор, пока не встретиться следующая пустая строка.
    Иными словами должно получиться 4 текстовых файла:
    2_Slavinka4_per_7.zip.txt

    Код:
    4sdjlskjuwerYYIOIJOIU&%%&Zw0AAKIdAAAJAH0ARGVsdGEuZGFsU0RoAKwAAAAACAAIFZz
    Y2RgaRFhYGAwYIAAHyBmZAUzWUWBxD4WO6MvAbtK2J9aa39hxC3HyMTAwMSQwMACkhWQYPjP
    AgCTAAAAmx4AAAAA
     

    2_Slavinka3_per_7.zip.txt

    Код:
    3UEsDBBQAAAAIABE8fDeSyHbW4827348jdfkashdfdlskjdauZGFsU0RoAKwAAAAACAAIFZz
    Y2RgaRFhYGAwYIAAHyBmZAUzWUWBxD4WO6MvAbtK2J9aa3fkjasflkjlkjfsfMACkhWQYPjP
    AgCTAAAAmx4AAAAA
     

    2_Slavinka2_per_7.zip.txt

    Код:
    2UEsDBBQAAAAIABE8fDeSyHbWZw0AAKIdAAAJAH0ARGVsdGEuZGFsU0RoAKwAAAAACAAIFZz
    Y2RgaRFhYGAwYIAAHyBmZAUzWUWBxD4WO6MvAbtK2J9aa39hxC3HyMTAwMSQwMACkhWQYPjP
    fkdf;k3i&*^*^*&YOjiojUYYTRooiijuZGFsU0QEAKwAAABVVAUAB/GMTEdQSwUGAAAAAAIA
    AgCTAAAAmx4AAAAA
     

    2_Slavinka1_per_7.zip.txt

    Код:
    1UEsDBBQAAAAIABE8fDeSyHbWZw0AAKIdAAAJAH0AasdasdE23423424oAKwAAAAACAAIFZz
    AAAAAAAAACAAtoELDgAAQWN0aW9uMTIjkasdlkajsldkasdVVAUAB/GMTEdQSwUGAAAAAAIA
    AgCTAAAAmx4AAAAA
     

     
    На данный момент написал только вот это. Дальше ступор
     
    getemail.au3 :
    Код:
    ; #include <Array.au3>
    #include
    <File.au3>
    $POP3RecvArgs = "pop3recv.exe -s pop.yandex.ru -p 110 -u delta2-greit -w не_скажу -o incomeletters.txt -uidl -dw"
     
    _GetMail ($POP3RecvArgs)
     
     
    Func
    _GetMail ($CMDstring)
       
    ConsoleWrite ("Скачиваю письма" & @CRLF)
    ;     RunWait ($POP3RecvArgs, @ScriptDir, @SW_HIDE)
       
    ConsoleWrite ("Обрабатываю письма" & @CRLF)
       
    Local $aAllLetters
       
    _FileReadToArray("incomeletters.txt", $aAllLetters)
       
    For $q = 0 to UBound ($aAllLetters) - 1
           
    If StringInStr ($aAllLetters[$q], 'filename="', 2) Then
               
    $DauName =
    StringRegExpReplace($aAllLetters[$q], '.*\"(.*)\".*', '\1')
               
    ConsoleWrite ("Строка №" & $q & " Имя аттача " & $DauName & @CRLF)
    ;             _MakeAttachArrays ($q, $DauName, $aAllLetters)
           
    EndIf
         
        Next
         
     EndFunc
    ; ==> _GetMail
     

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 17:36 22-10-2008 | Исправлено: Tipulatoid, 17:41 22-10-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 14:06 22-10-2008
    Цитата:
    тогда как ты можешь утверждать, что мой пример может не сработать?

    Я же написал...
     
    09:20 22-10-2008
    Цитата:
    я не раз сталкивался с явлением когда скрипты в системе отключены.

     
    Имелось в виду Wsh в целом, и система была не моя  
     
    Добавлено:
    Tipulatoid 17:36 22-10-2008
    Цитата:
    Иными словами должно получиться 4 текстовых файла

    Вот так примерно:
     

    Код:
     
    $sReadFile = FileRead("incomeletters.txt")
    $aContents = StringRegExp($sReadFile, '(?s)filename="(.*?)".*?\r\n\r\n(.*?)\r\n\r\n', 3)
     
    $sLastFileName = ""
     
    For $i = 0 To UBound($aContents)-1
        If Mod($i, 2) = 0 Then ;Чётное
            $sLastFileName = $aContents[$i] & ".txt"
        Else
            FileWrite($sLastFileName, $aContents[$i])
        EndIf
    Next

     
    ?


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 19:27 22-10-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Да... Волшебные регэкспы. Я ожидал совсем другого кода - цикла, пробегающего по всему массиву. Можно немного усложнить пример?
    Требуется, чтобы аттачи выдирались только из тех писем, что присланы с известного скрипту адреса. Т.е. надо добавить в массив $aContents адрес, выдранный из строк From:   delta-greit[сами_знаете_что]yandex.ru Причем предусмотреть вариант, что адрес может быть заключен в знаки <>

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 01:31 23-10-2008 | Исправлено: Tipulatoid, 03:17 23-10-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Появилась необходимость привязки процесса к определенному ядру. Нашел нужную функцию, в хелпе нихрена не понятно. На форуме в единственном топике опять ничего не понял. Вот что сделал по той инфе из топика:
     
    #Include <WinAPI.au3>
     
    $calc = Run('calc.exe')
    $cpu = _WinAPI_SetProcessAffinityMask($calc, BitOR(1,4))
    MsgBox(0, '', $cpu)
     
    Не работает.
    Кто-нибудь может человеческим языком объяснить, как это делается?
    Вообще, мне нужно привязать процесс к одному ядру 0 - 3.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 02:48 23-10-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid 01:31 23-10-2008
    Цитата:
    Требуется, чтобы аттачи выдирались только из тех писем, что присланы с известного скрипту адреса.

    Т.е проверять их?
     

    Код:
     
    $sAllowed_Email = "delta-greit[сами_знаете_что]yandex.ru"
    $sReadFile = FileRead("incomeletters.txt")
    $aContents = StringRegExp($sReadFile, '(?s)From: +(.*?)\s+.*?filename="(.*?)".*?\r\n\r\n(.*?)\r\n\r\n', 3)
     
    $iUbound = UBound($aContents)-1
     
    For $i = 0 To $iUbound
        ;Каждые 3 единицы проверяем от кого, и если совпадает пишем в файл
        If Mod($i, 3) = 0 And $i+2 <= $iUbound And $aContents[$i] = $sAllowed_Email Then _
            FileWrite($aContents[$i+1] & ".txt", $aContents[$i+2])
    Next

     
    timsky 02:48 23-10-2008
    Цитата:
    Не работает.

    Для начала, вместо PID'а (идентификатор процесса) нужно передавать Handle процесса (через OpenProcess?), также желательно ожидать процесс (ProcessWait)... Мне вот лично больше интересует возможность привязки процесса к другому, чтобы тот относился к нему как к дочернему процессу ... или это оно и есть?

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

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



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

    Цитата:
    Для начала, вместо PID'а (идентификатор процесса) нужно передавать Handle процесса (через OpenProcess?), также желательно ожидать процесс (ProcessWait)...

    Ох блин. Точно. Теперь извращаться чтобы получить его хендл придется
    У меня этих одинаковых процессов не меньше 10-ти, так что ProcessWait бесполезен, хендл по имени окна тоже бесполезен...

    Цитата:
    Мне вот лично больше интересует возможность привязки процесса к другому, чтобы тот относился к нему как к дочернему процессу ... или это оно и есть?

    А зачем тебе это?
    Это для распределения нагрузки м/у ядрами вручную и жестко.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 04:57 23-10-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    timsky 04:57 23-10-2008
    Цитата:
     одинаковых процессов не меньше 10-ти, так что ProcessWait бесполезен

    ProcessWait() на PID:
     

    Код:
    $calc = Run('calc.exe')
    ProcessWait($calc)

     

     

    Цитата:
    А зачем тебе это?

    Для запуска приложения для браузера (Opera), оно получает заголовок окна по родительскому процессу, нужно запустить с определёнными параметрами и задать "родителя", т.к в последних версиях Opera есть баг(?) с командой запуска внешних приложении.

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Странно... в хелпе про ПИД не написано: The name of the process to check
     
    И еще вопрос:
    В форму браузера для загрузки файла из-за граничений IE приходится слать при помощи Send. Для этого к тому же приходится делать окно IE видимым и активным. Есть какой-нибудь трюк для обхода всего этого цирка...
    Я сейчас делаю так:
    1) делаю броузер видимым и активным
    2) Кидаю нужное в буфер и шлю CTRL+V, чтобы Send отрабатывал быстрее, а не набирал текст у меня на глазах
    3) Скрываю броузер
     
    Может быть есть более хитрый и удобный способ?
     
    Добавлено:

    Цитата:
    Для запуска приложения для браузера (Opera), оно получает заголовок окна по родительскому процессу, нужно запустить с определёнными параметрами и задать "родителя", т.к в последних версиях Opera есть баг(?) с командой запуска внешних приложении.

    Это наверное только через ВИН АПИ.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 05:14 23-10-2008 | Исправлено: timsky, 05:15 23-10-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Visitor  
    Круто. Это работает на данном примере. Однако в большинстве случаев такие строки выглядят примерно так
    Код:
    From:  =?windows-1251?HYTGIkjhkhsdg <delta-greit[сами_знаете_что]yandex.ru>

    Это тоже верная строка, и аттачи должны выдираться.
    И еще. Я не шарю в рэгэкспах, но похоже, ты забил вот здесь $aContents = StringRegExp($sReadFile, '(?s)From: +(.*?)\s+.*?filename="(.*?)".*?\r\n\r\n(.*?)\r\n\r\n', 3)
    нахождение подстроки From: в любом месте строки. Для пущей надежности хотелось бы добавить то условие, что подстрока From: обязана быть в начале строки

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 08:49 23-10-2008 | Исправлено: Tipulatoid, 08:57 23-10-2008
    Maza Faka



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

    Цитата:
    Появилась необходимость привязки процесса к определенному ядру.

    Заинтересовало У меня на одной из машин установлен процессор с технологией "hyper-threading" (с программной эмуляцией второго ядра). В общем вот, что получилось:

    Код:
    #include <WinAPI.au3>
     
    Global Const $PROCESS_ALL_ACCESS = 0x1F0FFF
     
    $sPID = Run("notepad.exe")
    ProcessWait($sPID)
     
    $hProc = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, False, $sPID)
    $aRet = _WinAPI_GetProcessAffinityMask($hProc)
     
    MsgBox(0, "", $aRet[0] & @LF & _
                  $aRet[1] & @LF & _
                  $aRet[2] & @LF) ;Смотрим, что нам вернула функция _WinAPI_GetProcessAffinityMask, если индексы 1 и 2 равны 1, _
                                  ;то значит процессор одноядерный и дальнейшие телодвижения бессмысленны
     
    ;_WinAPI_SetProcessAffinityMask($hProc, 0x01) ;Задаём соотвествие для 1-го ядра
    ;_WinAPI_SetProcessAffinityMask($hProc, 0x02) ;Задаём соотвествие для 2-го ядра

    _WinAPI_SetProcessAffinityMask($hProc, 0x03) ;Задаём соотвествие для обеих ядер
     
    _WinAPI_CloseHandle($hProc)

    Вроде бы работает, во всяком случае в диспетчере задач соответствие отображается корректно
     
    Добавлено:
    timsky
    Да, чуть не забыл, инфа на русском:
    GetProcessAffinityMask
    SetProcessAffinityMask
     
    Добавлено:

    Цитата:
    В форму браузера для загрузки файла из-за граничений IE приходится слать при помощи Send

    А не проще ли загрузить файл используя функцию InetGet()?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:50 23-10-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли подружить RunWait с StdoutRead? В хелпе и на офф. форуме нашел только связку Run + StdoutRead В моем примере (см. выше) пытаюсь обойтись без промежуточного файла incomeletters.txt. Т.е. напрямую читать вывод утилиты pop3recv.exe , скачивающей письма и затем обрабатывать этот вывод кодом, предложенным Visitor

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 10:47 23-10-2008 | Исправлено: Tipulatoid, 10:50 23-10-2008
    Maza Faka



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

    Цитата:
    Можно ли подружить RunWait с StdoutRead?

    Можно в цикле отслеживать наличие процесса функцией ProcessExists

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 12:45 23-10-2008
    arr1val

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

    Всего записей: 43 | Зарегистр. 01-02-2008 | Отправлено: 12:50 23-10-2008
    timsky



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

    Цитата:
    А не проще ли загрузить файл используя функцию InetGet()?

    Это как? Вот например, я слепил аплоадер файлов на rapidshare.com и хочу, чтобы он в фоне все это делал. Как при помощи InetGet это реализовать не представляю себе.
    Даже если на рапиде этот трюк как-то можно приладить - мне все равно это нужно для более сложной софтины, которая очень много действий делает при помощи _IE...().
    Да и вообще неужели это никак по другому не обойти? Вот для примера мой аплоадер на рапиду:

    Код:
    #include <IE.au3>
    #include <Constants.au3>
     
    AutoItSetOption('TrayAutoPause', 0)
    AutoItSetOption("TrayOnEventMode", 1)
    AutoItSetOption('TrayIconDebug', 1)
    AutoItSetOption('WinTitleMatchMode', 2)
    TrayItemSetText($TRAY_ITEM_PAUSE, "Pause")
    TrayItemSetText($TRAY_ITEM_EXIT, "Exit")
     
    If $CmdLineRaw = '' Then Exit
     
    ;======= Wait for finish of running copy ==========
     
    While WinExists(@ScriptName)
        WinWaitClose(@ScriptName)
        Sleep(1000)
    WEnd
     
    AutoItWinSetTitle(@ScriptName)
     
    ;========= Reading CONFIG ========
     
    $debug = IniRead(@ScriptDir & '\config.ini', 'Main', 'Debug', '')
    If $debug = '' Or $debug = 0 Then
        $debug = 0
    Else
        $debug = 1
    EndIf
     
    $tip = IniRead(@ScriptDir & '\config.ini', 'Main', 'Tip', '')
    If $tip = '' Or $tip = 0 Then
        $tip = 10000
    Else
        $tip = $tip * 1000
    EndIf
     
    ;============= MAIN ===============
     
    TraySetToolTip('Rapida Uploader')
     
    Global $rapida, $file
     
    $file
    = StringReplace($CmdLineRaw, '"', '')
    ;MsgBox(64, $CmdLineRaw, $file)
     
    _IELoadWaitTimeout(3600000)
     
    Submit()
     
    While 1
        $body = _IEBodyReadText($rapida)
        Select
            Case
    StringInStr($body, 'to delete file')
                $link = StringRegExp($body, '.*(http://rapidshare.com/files/.*)\r\n.*', 1)
                $downLink = $link[0]
                $link = StringRegExp($body, '.*?killcode=(.*)\r\n.*', 1)
                $delLink = $downLink & '?killcode=' & $link[0]
                If @error Then
                    MsgBox(16, 'WTF???', 'Can not get links!')
                    ExitLoop
                EndIf

                $toFile = $downLink & @CRLF & $delLink
                $dump
    = FileOpen($file & '.txt', 2)
                FileWrite($dump, $toFile)
                FileClose($dump)
                ClipPut($downLink)
                TrayTip('Dowload Link is in ClipBoard.', 'Download and Delete links are saved in ' & @CRLF & $file & '.txt', 5, 1)
                Sleep($tip)
                ExitLoop
            Case
    StringInStr($body, 'no file chosen')
                _IEAction($rapida, 'quit')
                Submit()
            Case Else
                MsgBox(16, '', 'WTF?')
                _IEAction($rapida, 'quit')
                Submit()
        EndSelect
        Sleep(500)
    WEnd
     
    _IEAction($rapida, 'quit')
     
    Func Submit()
        $rapida = _IECreate('http://www.rapidshare.com/', 0, $debug)
        $form = _IEFormGetObjByName($rapida, 'ul')
        $fileBox = _IEFormElementGetObjByName($form, 'filecontent')
        $clip = ClipPut($file)
        _IEAction($fileBox, 'focus')
     
        If $debug = 0 Then _IEAction($rapida, 'visible')
        Send('^v')
        If $debug = 0 Then _IEAction($rapida, 'invisible')
     
        _IEFormSubmit($form, 0)
        _IELoadWait($rapida)
    EndFunc   ;==>Submit

     
    Так вот MsgBox(16, 'WTF???', 'Can not get links!') происходит довольно часто, если я в процессе аплоада работаю, а если еще и буфер обмена глюкнет из-за пунты - вообще жопа.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 14:24 23-10-2008 | Исправлено: timsky, 14:28 23-10-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Так?
    test.au3 :
    Код:
    #include <Constants.au3>
     
    $POP3RecvArgs = "pop3recv.exe -s pop.yandex.ru -p 110 -u delta2-greit -w не_скажу -uidl -dw"
     
    $foo = Run ($POP3RecvArgs, @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
     
       
    While ProcessExists ("pop3recv.exe") <> 0
           
    Sleep
    (10)
           
    $line =
    StdoutRead($foo)
    ;         If @error Then ExitLoop
           
    If $line <> "" Then  
               
    ConsoleWrite ($line & @CRLF)
               
    FileWriteLine ("test.txt", $line)
           
    EndIf
        WEnd

     
    Это работает. А нет вероятности "проспать" какую-либо строку? Если Sleep (10) убрать, то проц грузится на 100%

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 14:43 23-10-2008 | Исправлено: Tipulatoid, 14:49 23-10-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Совершенно не нужно проверять ProcessExists, достаточно проверить @error после StdoutRead пример:
     

    Код:
    #include <Constants.au3>
     
    $foo = Run(@ComSpec & " /c dir c:\windows", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
    $line=""
    While 1
        $line &= StdoutRead($foo)
        If @error Then ExitLoop
    Wend
    MsgBox(0, "STDOUT read:", $line)

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:52 23-10-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Ну, да, точно, чего я мудрю? Просто пример из справки.
    NIKZZZZ, Maza Faka спасибо
    PS Только проц этот код грузит на 100%. Sleep (10) можно добавить? Не просплю ли какую строку вывода?

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 15:14 23-10-2008 | Исправлено: Tipulatoid, 15:18 23-10-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid 08:49 23-10-2008
    Цитата:
    Это тоже верная строка, и аттачи должны выдираться.

    После Form + добавь (?:.*?<|), а после (.*?) добавь (?:>|), но также нужно перенести (?s) после проверки «From:»...
     

    Цитата:
    Для пущей надежности хотелось бы добавить то условие, что подстрока From: обязана быть в начале строки

    Почитай справку по RegExp, статьи с шапки ... начало строки может обозначаться символом ^ и $ если в начале условия добавить (?m)
     

    Код:
     
    $sAllowed_Email = "delta-greit[сами_знаете_что]yandex.ru"
    $sReadFile = FileRead("incomeletters.txt")
    $aContents = StringRegExp($sReadFile, '(?m)^From: +(?:.*?<|)(.*?)(?:>|)(?s)\s+.*?filename="(.*?)".*?\r\n\r\n(.*?)\r\n\r\n', 3)
     
    $iUbound = UBound($aContents)-1
     
    For $i = 0 To $iUbound
        ;Каждые 3 единицы проверяем от кого, и если совпадает пишем в файл
        If Mod($i, 3) = 0 And $i+2 <= $iUbound And $aContents[$i] = $sAllowed_Email Then _
            FileWrite($aContents[$i+1] & ".txt", $aContents[$i+2])
    Next

     
    Добавлено:
    timsky 05:14 23-10-2008
    Цитата:
     в хелпе про ПИД не написано

    Точно, там даже подчёркивается что это единственная Process-функция которая не работает с PID'ами    
    Тогда можно в цикле подождать:
     

    Код:
     
    $iCalc_PID = Run("Calc.exe")
    $iRet = _ProcessWaitEx($iCalc_PID)
     
    MsgBox(0, "", $iRet)
     
    Func _ProcessWaitEx($sProcName_PID, $iWait=-1)
        Local $iTimer = 0
        If $iWait > 0 Then $iTimer = TimerInit()
     
        While Not ProcessExists($sProcName_PID)
            Sleep(10)
     
            If $iTimer > 0 And TimerDiff($iTimer)/1000 > $iTimer Then ExitLoop
        WEnd
     
        Return
    ProcessExists($sProcName_PID)
    EndFunc

     
    Tipulatoid 15:14 23-10-2008
    Цитата:
    Sleep (10) можно добавить?

    Можно Sleep(1).

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

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

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

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)
    Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru