МАЛЕНЬКИЙ, НО ОЧЕНЬ ПОЛЕЗНЫЙ СКРИПТ |
| (JAWS и технологии Com/Automation) |
| Автор: | © Анатолий Камынин |
| Дата публикации: | 2004 |
Вероятно, для многих пользователей программы JAWS не является секретом тот факт, что существует целый класс приложений, с коими JAWS взаимодействует, используя технологию COM (а точнее, технологию OLE Automation). Примерами таких приложений являются Microsoft Internet Explorer ™ , Microsoft Word™ и другие программы, входящие в пакет MS Office™ . Взаимодействуя с этими программами, JAWS не "читает" информацию с экрана, а обращается за ней напрямую к приложению. При этом приложение выступает в качестве COM-сервера, а JAWS -- в качестве COM-клиента. Используя специальный интерфейс, JAWS получает доступ к свойствам и методам (процедурам) COM-сервера и может управлять им. Благодаря такому механизму, работая с Microsoft Internet Explorer™ , пользователь JAWS может просмотреть списки всех ссылок, всех фреймов и всех заголовков на web-страничке.
Кстати, рядовой пользователь Microsoft Internet Explorer™ , не имеющий программы JAWS, такие списки получить не может.
Какая же польза от всего этого?
Дело в том, что разработчики JAWS не только сами воспользовались COM-технологией, но и встроили поддержку COM-объектов в язык сценариев JAWS. Для этого они ввели специальный тип переменной -- object и функцию инициализации COM-сервера -- CreateObject(). Подробно работа сCOM-объектами в языке сценариев JAWS изложена в руководстве по программированию на этом языке. Здесь же кратко напомним основные правила:
var
object ie
Let ie = CreateObject("InternetExplorer.Application")
Let Ie.Visible = true;
Теперь попробуем извлечь из всего сказанного хоть какую-нибудь выгоду. Представим себе такую ситуацию, когда в обычном текстовом файле пользователю попадается ссылка на web-страничку или адрес электронной почты. Если пользователь желает по этой ссылке перейти на страничку, то он должен загрузить, например, Microsoft Internet Explorer™ и скопировать ссылку в строку адреса. С отправкой письма возни будет еще больше - надо загрузить почтовую программу, создать новое письмо и скопировать нужный адрес в поле "Кому". Очевидно, что все это нуждается в некотором упрощении. Здесь как раз и пригодятся способности JAWS работать с COM-объектами. Сделаем так, чтобы можно было выделить в тексте ссылку и сразу же перейти по ней на web-страничку. Если же это окажется почтовый адрес, то пусть загрузится диалог для создания нового письма, в котором уже будет стоять нужный адрес в поле "Кому". В случае, когда выделенный текст не является ни ссылкой, ни адресом электронной почты, должен загружаться диалог для создания нового письма, в тело которого уже помещен выделенный текст. Понадобится же для воплощения задуманного всего лишь один COM-объект: "InternetExplorer.Application". Этот объект существует в среде MS Windows™ том случае, если установлен Microsoft Internet Explorer™ .
Дабы не перегружать статью отступлениями от основной темы, вновь отсылаем пользователя к руководству по программированию на языке сценариев 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
Say("Загружается страничка по адресу: "+str, OT_MESSAGE)
o.Navigate(str);
Let o.Visible=true;
;проверяем, является ли выделенный текст почтовым адресом
Elif StringContains (str, "@") Then
Say("Почтовая ссылка: " + str,OT_MESSAGE)
o.Navigate("MailTo: "+str);
;в противном случае - используем выделенный текст в качестве текста для письма
Else
Say("Создается черновик письма",OT_MESSAGE)
o.Navigate("MailTo: ?body="+str);
EndIf
EndScript
Для работы этого скрипта следует в тексте выделить нужную ссылку или почтовый адрес и нажать комбинацию клавиш, ассоциированную с этим скриптом.
Небольшой комментарий для тех, кто уже сталкивался с программированием COM-объектов. Разумеется, можно было воспользоваться еще одним COM-объектом для создания писем, иными словами, вызвать Outlook.Application. Однако, во-первых, пользователь может работать с другой почтовой программой, а во -вторых, название этого COM-объекта зависит от его версии, поэтому возможны неудачи при его инициализации. Изящная подстановка почтовой ссылки (MailTo:) в качестве адреса для Microsoft Internet Explorer позволяет обойти все эти препятствия.
| Проект осуществлен при поддержке компании RU-CENTER | |||
| Распространение материалов сайта означает, что распространитель принимает условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2012 |
| ||