При поступлении новой почты в Бате предусмотрены два вида сигнализации: визуальная - включение 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