Отправляет email-рассылки с помощью сервиса Sendsay

[TC] МАЛЕНЬКИЙ, НО ОЧЕНЬ ПОЛЕЗНЫЙ СКРИПТ (JAWS иCOM-технологии)

Анатолий Камынин, i_ch***@r*****.ru

МАЛЕНЬКИЙ, НО ОЧЕНЬ ПОЛЕЗНЫЙ СКРИПТ
(JAWS иCOM-технологии)

Вероятно, для многих пользователей программы JAWS не является секретом
тот факт, что существует целый класс приложений, с коими JAWS
взаимодействует, изпользуя технологию COM (прежде эта технология
именовалась технологией OLE). Примерами таких приложений являются
Microsoft Internet Explorer (tm), Microsoft Word(tm) и другие программы,
входящие в пакет MS Office(tm). Взаимодействуя с этими программами,
JAWS не "читает" информацию с экрана, а обращается за ней напрямую к
приложению. При этом приложение выступает в качестве COM-сервера, а
JAWS -- в качестве COM-клиента. Используя специальный интерфейс, JAWS
получает доступ к свойствам и методам (процедурам) COM-сервера и может
управлять им. Благодаря такому механизму, работая с Microsoft Internet
Explorer(tm), пользователь JAWS может просмотреть списки всех ссылок,
всех фреймов и всех заголовков на web-страничке. Кстати, рядовой
пользователь Microsoft Internet Explorer(tm), не имеющий программы JAWS,
такие списки получить не может.

Какая же польза от всего этого?

Дело в том, что разработчики JAWS не только сами воспользовались
COM-технологией, но и встроили поддержку COM-объектов в язык сценариев
JAWS. Для этого они ввели специальный тип переменной - object и функцию
инициализации COM-сервера -- CreateObject(). Подробно работа
сCOM-объектами в языке сценариев JAWS изложена в руководстве по
программированию на этом языке. Здесь же кратко напомним основные
правила:

1. имя переменной, указывающей на COM-объект, отделяется от свойства
или метода этого объекта символом точки (.), причем никаких пробелов ни
до, ни после символа точки быть не должно.). Например, в следующем
листинге показано, как, присвоив свойству Visible значение true, можно
сделать видимым объект Internet Explorer:

var
object ie
Let ie = CreateObject("InternetExplorer.Application")
Let Ie.Visible = true;

2. все строки, в которых есть обращение к свойствам или методам
COM-объекта, должны заканчиваться точкой с запятой (;), причем никаких
пробелов перед точкой с запятой быть не должно (см. листинг выше);
3. в названиях свойств и методов COM-объектов важен регистр букв, то
есть нельзя, как это допускается в языке сценариев JAWS, заменять
строчные буквы прописными и наоборот.

Теперь попробуем извлечь из всего сказанного хоть какую-нибудь выгоду.
Представим себе такую ситуацию, когда в обычном текстовом файле
пользователю попадается ссылка на web-страничку или адрес электронной
почты. Если пользователь желает по этой ссылке перейти на страничку, то
он должен загрузить, например, Microsoft Internet Explorer(tm) и
скопировать ссылку в строку адреса. С отправкой письма возни будет еще
больше - надо загрузить почтовую программу, создать новое письмо и
скопировать нужный адрес в поле "Кому". Очевидно, что все это нуждается
в некотором упрощении. Здесь как раз и пригодятся способности JAWS
работать с COM-объектами. Сделаем так, чтобы можно было выделить в
тексте ссылку и сразу же перейти по ней на web-страничку. Если же это
окажется почтовый адрес, то пусть загрузится диалог для создания нового
письма, в котором уже будет стоять нужный адрес в поле "Кому". В случае,
когда выделенный текст не является ни ссылкой, ни адресом электронной
почты, должен загружаться диалог для создания нового письма, в тело
которого уже помещен выделенный текст. Понадобится же для воплощения
задуманного всего лишь один COM-объект: "InternetExplorer.Application".
Этот объект существует в среде MS Windows(tm) том случае, если
установлен Microsoft Internet Explorer(tm).

Дабы не перегружать статью отступлениями от основной темы, вновь
отсылаем пользователя к руководству по программированию на языке
сценариев JAWS, где подробно рассказано, что и в какой
последовательности надо делать, чтобы создать новый скрипт. Напомним
лишь, что простое копирование скрипта из этой статьи в файл default.jss
(а именно в него следует поместить скрипт) положительных результатов не
даст. Кроме того, не забудьте ассоциировать со скриптом клавиатурную
комбинацию.

Листинг скрипта (для JAWS 4.5):

Script GoToURL()
var
string str,
object o

;получаем выделенный текст
Let str =GetSelectedText ()

;инициализируем нужный COM-объект
Let o = CreateObject ("InternetExplorer.Application")

;проверяем, начинается ли выделенный текст с http://
If StringContains (str, "http://")==1 Then
SayString("Загружается страничка по адресу: "+str)
o.Navigate(str);
Let o.Visible=true;

;проверяем, является ли выделенный текст почтовым адресом
Elif StringContains (str, "@") Then
SayString("Почтовая ссылка: " + str)
o.Navigate("MailTo: "+str);

;в противном случае - используем выделенный текст в качестве текста для письма
Else
SayString("Создается черновик письма")
o.Navigate("MailTo: ?body="+str);
EndIf
EndScript

Для работы этого скрипта следует в тексте выделить нужную ссылку или
почтовый адрес и нажать комбинацию клавиш, ассоциированную с этим
скриптом.

Небольшой комментарий для тех, кто уже сталкивался с программированием
COM-объектов. Разумеется, можно было воспользоваться еще одним
COM-объектом для создания писем, иными словами, вызвать
Outlook.Application. Однако, во-первых, пользователь может работать с
другой почтовой программой, а во -вторых, название этого COM-объекта
зависит от его версии, поэтому возможны неудачи при его инициализации.
Изящная подстановка почтовой ссылки (MailTo:) в качестве адреса для
Microsoft Internet Explorer(tm) позволяет обойти все эти препятствия.

Напоследок, как это принято в конце серьезного разговора , -- короткая
шутка.
Маленький мальчик, у которого не хватает зуба и который немного
присвистывает, спрашивает у отца:
-- Пап, а сто такое ОФЦЫ?
-- Это JAWS, набранный кириллицей, сынок... - отвечает отец.

Ответить   Vladimir Dovydenkov Thu, 15 Jul 2004 00:50:24 +0400 (#190939)