???????? ???????????????? ?? ????????

Автоматизация работы Бата с помощью скрипт-языка WinBatch

Здесь лучше не дискутировать. Здесь лучше давать правильные советы.

Автоматизация работы Бата с помощью скрипт-языка WinBatch

Сообщение xxxx1 » Чт май 06, 2004 9:43 am

При поступлении новой почты в Бате предусмотрены два вида сигнализации: визуальная - включение Mail Ticker и анимация иконки и звуковая - выдача звукового фрагмента, но только из wav-файла. Обработчик сообщений Бата позволяет задать действие (запуск приложения) в ответ на каждое прошедшее через фильтр письмо. А как организовать однократный запуск внешнего приложения (или группы действий) по факту прихода хотя бы одного письма? Это может потребоваться при автоматическом запуске Бата по расписанию с выработкой реакции в случае прихода какой-нибудь почты.

Эта проблема распадается на три этапа:
Настройка Бата на работу в автоматическом режиме;
Создание какого-то внешнего признака, появляющегося при приеме хотя бы одного письма;
Написание внешней управляющей программы для опроса этого признака лишь при окончании текущего сеанса связи и для запуска приложения или группы приложений.

Этап 1. Для настройки Бата на автоматический режим работы по расписанию нужно, во-первых, добавить параметры в командную строку вызова /NOLOGO /CHECKALL. Это даст возможность вызвать Бат, опросить почту и тут же выйти при отсутствии новой принятой почты. Во-вторых, нужно установить ряд опций поддержки автоматики (Описание пунктов меню и опций соответствует версиям Бата старше 1.52). Например, для режима доступа к хосту через dial-up:
Ящик/Свойства почтового ящика, окно с тем же именем
раздел "Транспорт" - включена опция "Совмещенная доставка" (полезно иметь, если в процессе работы с принятой почтой на нее и отвечаешь);
раздел "Параметры" - для режима dial-up снять обе опции проверки почтового ящика при запуске и с интервалом (управление идет через командную строку);
раздел "Звук" - можно установить запуск желаемого wav-файла при приходе почты.
Свойства/Подключение и Администрирование, окно с тем же именем
вкладка "Подключение", опция "При соединении с Интернет использовать Средства Удаленного Доступа" включить обе функции "Разрывать связь по окончании передачи почты" и "Использовать установленное соединение". Время между прозвонками (задержка между звонками) поставить минимальное (5-6 сек.).

Этап 2. В качестве признака прихода почты можно использовать параметр времени создания некоторого специального файла, например, Incoming Mail.txt. При инициализации автоматической работы Бата время создания файла устанавливается hh:mm:ss = 00:00:00, при приходе почты специальный обработчик обновляет файл Incoming Mail.txt, ставя реальное время обновления, отличное от точной полуночи. Внешняя программа отлавливает момент завершения очередного сеанса связи по признаку появления и пропадания окна с именем "Установлена связь с <имя_провайдера>" (или "Прием почты" Бата), а уж затем опрашивает время создания файла. Если время создания файла отлично от нуля, значит пришло хотя бы одно письмо и можно запускать внешнее приложение. После этого время создания файла сбрасывается на ноль. Короче, алгоритм обработки файла Incoming Mail.txt выглядит так:

if (hh:mm:ss(Incoming Mail.txt) != 00:00:00) { // пришла новая почта
hh:mm:ss(Incoming Mail.txt) = 00:00:00
запуск всего чего нужно (я запускаю музыкальный rmi-фрагмент)
}

Теперь о том, какой должен быть обработчик события для обновления файла Incoming Mail.txt. Прежде всего, это файл нужно просто где-нибудь создать средствами Проводника, например, в каталоге почтового ящика. Затем создается правило обработки. Перейдите в окно пункта меню Ящик/Настройка сортировщика писем и создайте для Входящей почты новое правило. Например, с именем "Приход новой почты". Это правило нужно поставить первым. Параметры этого правила таковы:
вкладка "Правила": Исходная папка - Inbox, Переместить сообщения в папку - Inbox, сигнальная строка - @ (либо для Отправителя, либо для Получателя). Этот символ присутствует в любом адресе, так что каждое письмо этому правилу будет удовлетворять;
вкладка "Альтернативы": пусто;
вкладка "Действия": активна единственная опция "Экспортировать сообщение в файл" с параметром "Переписать существующий файл". В качестве объекта для экспорта указать уже упоминавшийся файл Incoming Mail.txt;
вкладка "Свойства": сделать активной опцию "Продолжить работу последующих фильтров"

По данному правилу каждое сообщение будет экспортироваться во внешний файл, каждый раз обновляясь (файл всегда будет содержать единственное - последнее - письмо), причем правило не меняет положения исходного письма в папке Inbox и передает управление следующему правилу. Окончательное время создания файла будет соответствовать времени экспорта последнего письма и с вероятностью во много девяток будет отлично от значения полуночи. Файл никогда не переполнится, а операция проверки его времени - простая и быстрая.

Этап 3. И наконец, нужна внешняя управляющая программа для связывания всего этого вместе. Программа должна в циклическом режиме опрашивать факт появления окна удаленной связи с хостом (а можно и окна "Прием почты" Бата) и при закрытии окна (окончание сеанса связи) опрашивать время создания файла Incoming Mail.txt, запуская или нет соответствующую реакцию на приход почты (см. Этап 2). Естественно, этот алгоритм можно реализовать на С++ или Delphi. Но фактически нужен набор пакетно выполняемых под Windows команд (как *.bat файлы в горячо любимом ДОСе). Для этой цели существует несколько написанных приложений (см. www.listsoft.ru). Можно порекомендовать два из них:
ExecutIt фирмы Webster Image, http://www.webster-image.com и
WinBatch фирмы Wilson WindowWare, http://www.windowware.com, http://www.winbatch.com

Обе программы - shareware, так что проблему легализации и поиска кряков каждый решает индивидуально.

Первая программа, ExecutIt, хороша тем, что она работает абсолютно невидимо. Однако в связи с тем, что авторы на некотором этапе бросили ее сопровождение, она имеет глюки и не содержит средств отладки. Функциональные возможности системы команд для скрипта - ниже среднего.

Вторая программа, WinBatch, это просто лебединая песня. Ее функциональные возможности просто потрясают. При инсталлированном пакете написанный скрипт стартует как обычный exe-файл. До 98 года пакет имел простейший отладчик, начиная с версий 98 года выпускается WinBatch Studio - интегрированная оболочка с отладчиком по идеологии Delphi и Visual C++. Программа может управлять всем: окнами, файлами, меню и содержит массу других возможностей. Прекрасно сделанный интерактивный Help (правда на английском). Словом - рекомендую. На многочисленных ftp-серверах пакет хранится с именем wb9?*32i.zip, где ? - соответствует году, а * - букве релиза. Например, очень ходовой был wb96d32i.zip от 1996 года. На конец лета 1999 г. вышел wb99k32i.zip. Существует релиз WinBatch 2000c. Кстати, в принципе, существует и компилятор скриптов WinBatch. Так что отлаженную программу можно превратить в обычный ехе-файл и пользоваться даже при отсутствии установленного WinBatch (для исполнения нужна только одна dll-библиотека). Проблема использования компилятора упирается в проблему получения легальной версии.

На нашем сайте можно скачать WinBatchBat.zip, в который входят:
Bat Development Pub.wbt - основной скрипт файл работы с Батом;
Bat Auto Request Pub.wbt - маленький скрипт для вызова Bat Development.wbt при автоматической работе по расписанию;
Bat Look&Send Pub.wbt - маленький скрипт для вызова Bat Development.wbt при ручном вызове Бата для чтения, обработки почты и написания ответов.

Николай Корнев
http://www.nobat.ru
Аватара пользователя
xxxx1
Xxx...
 
Сообщения: 723
Зарегистрирован: Чт мар 04, 2004 9:36 am


Сообщение xxxx1 » Чт май 06, 2004 9:44 am

Программы запуска

Программа Bat Auto Request Pub.wbt запускается из любого пакета, обеспечивающего работу по расписанию. В ней происходит запись в Clipboard параметров командной строки /NOLOGO/CHECKALL и далее идет вызов файла Bat Development Pub.wbt как подпрограммы.

Поскольку скрипт очень короткий, он приводится ниже:

; Данный скрипт вызывается из любой программы запуска Бата по расписанию
; При этом через Clipboard передается параметр запуска командной строки

ClipPut("/NOLOGO /CHECKALL /SENDALL")
; Запуск The Bat с автоматическим предварительным опросом хоста
Call("c:\Program Files\WinBatch\MySamples\Bat Development Pub.wbt","")

Программа Bat Look&Send Pub.wbt запускается при ручном вызове Бата для чтения, обработки почты и написания ответов, например, путем щелчка по иконке на десктопе или на панели инструментов. В ней происходит запись в Clipboard параметра командной строки /NOLOGO и далее идет вызов файла Bat Development Pub.wbt как подпрограммы. Этот скрипт тоже приводится ниже:

; Данный скрипт вызывается для запуска Бата с целью текущего просмотра
; и обработки почты. Через Clipboard передается параметр командной
; строки, гасящий логотип

ClipPut("/NOLOGO")
; Запуск The Bat без предварительного опроса хоста
Call("c:\Program Files\WinBatch\MySamples\Bat Development Pub.wbt","")

Скрипт Bat Development Pub.wbt реализует основной алгоритм обслуживания программы The Bat!. Ядром является цикл типа While, который существует до тех пор, пока открыто окно The Bat!.

Особенности основного алгоритма

Для понимания алгоритма см. файл Bat Development Pub.wbt и приводимую ниже граф-схему алгоритма. Не бойтесь того, что Вам незнаком скрипт-язык. Его директивы достаточно понятну любому мало-мальски знакомому с программированием человеку.

Для работы используется специальный файл индикатор с именем Incoming Mail.txt, находящийся в каталоге почтового ящика. Обновление файла производится одним из правил сортировки Бата, путем экспорта туда последнего полученного сообщения "Автоматизация запуска Бата и WinBatch". Работа файла индикатора основана на идее, что время создания файла не может быть равно значению 00:00:00. Это и является признаком прихода хотя бы одного письма.

В начале программы происходит проверка существования этого файла. При его отсутствии выдается сообщение, и программа завершается. При наличии файла происходит начальная установка его временной метки в значение 00:00:00 (подпрограмма SetIndFile).

Далее опрашивается Clipboard и запускается The Bat!, если к данному моменту его окно еще не было открыто. В качестве параметра командной строки передается значение из Clipboard. Оно определяет один из двух режимов запуска Бата: с начальным автоматическим опросом почтового хоста или с простым открытием Бата и ожиданием действий пользователя.

После этого следует начальное определение используемых переменных. Одна группа переменных связана с обслуживанием окна "Удаленный доступ", которое появляется в процессе дозвона (те из них, где в имени присутствует слово Ring). Они устанавливаются / сбрасываются в подпрограмме CheckRingSession. Ключевыми переменными являются флаг окончания сеанса дозвона RingSession и счетчик числа сеансов дозвона nRing, значение которого сравнивается с пороговым значением MaxRings. Это позволяет прекратить бесконечный цикл дозвонов, порог для которых ранее отсутствовал в Бате (он появился в версиях, старше 1.50).

Другая группа переменных связана с обслуживанием окна "Установка связи с", которое появляется при успешном соединении с почтовым хостом (те из них, где в имени присутствует слово Remote). Они устанавливаются / сбрасываются в подпрограмме CheckRingSession. Ключевыми переменными являются флаг окончания сеанса связи RemoteSession и счетчик числа сеансов удаленной связи nRemote, значение которого используется для автоматического закрытия Бата после окончания одного или двух сеансов. Это устанавливается индивидуально. В данном варианте программы предполагается, что Бат закрывается средствами скрипта:
После окончания первого сеанса при открытии в режиме работы пользователя с почтой. Предполагается, что пользователь открывает Бат, читает пришедшую почту и подготавливает почту для отправки. После это он вызывает команду отправки почты. Если в сеансе новая почта не поступила, то подается команда закрытия Бата (Alt-X).
После окончания второго сеанса при открытии автоматического опроса по расписанию. Предполагается, что при поступлении почты во время первого сеанса запускается музыкальный фрагмент и Бат остается открытым на экране. Услышав сигнал прихода почты, пользователь анализирует ее, готовит ответы и вызывает команду отправки почты. Если во втором сеансе новая почта не поступила, то подается команда закрытия Бата (Alt-X).

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

После завершения подготовки переменных начинается основной рабочий цикл ожидания While, признаком для которого является существование окна "The Bat!". Пока существует это окно в цикле происходит выполнение следующих действий:
Проверка завершения сеанса дозвона (подпрограмма CheckRingSession), где устанавливается флаг RingSession и счетчик nRing. При превышении установленного порога числа дозвонов MaxRings появляется окно с сообщением, и подается команда Alt-X для закрытия Бата.
Проверка завершения сеанса удаленной связи (подпрограмма CheckRemoteSession), где устанавливается флаг RemoteSession и счетчик nRemote. При успешном установлении связи счетчик числа дозвонов nRing сбрасывается.
Проверка факта прихода хотя бы одного письма при окончании сеанса удаленной связи с хостом (подпрограмма CheckMail), где устанавливается флаг IsMail. При приходе почты Бат раскрывается на экране и делается активным, выводится информационное сообщение и запускается музыкальный mid-фрагмент. При отсутствии новой почты и при превышении заданного порога сеансов MaxRemoteSessions Бат закрывается посылкой команды Alt-X.

При любом способе закрытия Бата цикл While завершается, и завершается весь скрипт. Перед концом проверяется, закрылось ли окно установления связи, и если нет (по каким-то причинам), то оно закрывается, чтобы освободить телефонную линию.

Подпрограммы

В данном алгоритме используются 4 подпрограммы:
CheckRingSession, которая отслеживает появление окна "Удаленный доступ" при процедуре дозвона. В ней устанавливается флаг окончания текущего сеанса дозвона RingSession и счетчик числа прошедших дозвонов nRing..
CheckRemoteSession, которая отслеживает появление окна "Установлена связь с" при процедуре соединения с удаленным хостом. В ней устанавливается флаг окончания текущего сеанса дозвона RemoteSession и счетчик числа прошедших сеансов связи nRemote.
CheckMail, которая при закрытии окна установления связи с хостом анализирует временную метку файла-индикатора и устанавливает флаг прихода почты IsMail и счетчик числа раз поступления новой почты nMail (который, правда, нигде не используется).
SetIndFile, где устанавливается начальное (нулевое) значение временной метки в файле-индикаторе.

Заключение

Целью данного описания была иллюстрация идеи и привлечение внимания к скрипт-языку создания пакетных файлов WinBatch. Возможно, в приведенных текстах программ имеются несоответствия в названиях служебных окон Бата. Это легко корректируется. В ближайшем будущем я надеюсь поместить на сайте готовое откомпилированное решение, которое может использоваться поклонниками Бата, не знакомыми с программированием.
Аватара пользователя
xxxx1
Xxx...
 
Сообщения: 723
Зарегистрирован: Чт мар 04, 2004 9:36 am

Сообщение PS » Чт май 06, 2004 10:52 am

Для замены приведённых в примере shareware-программ можно использовать свободную программу nncron. (для локальной загрузки есть на mss)
Чтобы наши письма доходили до адресатов
Аватара пользователя
PS
Отец Александр
 
Сообщения: 2089
Зарегистрирован: Пн ноя 03, 2003 15:00 pm


Вернуться в Полезная информация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron
Яндекс.Метрика