МАЛЕНЬКИЙ, НО ОЧЕНЬ ПОЛЕЗНЫЙ СКРИПТ

(JAWS и технологии Com/Automation)
Дата публикации:2004
Twitter Facebook Vkontakte

Вероятно, для многих пользователей программы 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 изложена в руководстве по программированию на этом языке. Здесь же кратко напомним основные правила:

  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 и скопировать ссылку в строку адреса. С отправкой письма возни будет ещё больше - надо загрузить почтовую программу, создать новое письмо и скопировать нужный адрес в поле "Кому". Очевидно, что всё это нуждается в некотором упрощении. Здесь как раз и пригодятся способности 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 позволяет обойти все эти препятствия.



Распространение материалов сайта означает, что распространитель принимает условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2017
Rambler's Top100