Чтение онлайн

на главную - закладки

Жанры

Windows Script Host для Windows 2000/XP

Попов Андрей Викторович

Шрифт:

В этой главе мы кратко опишем механизм работы объектов-сценариев и внутреннюю структуру файлов с описанием таких объектов. Также будет подробно разобран пример создания, регистрации и использования объекта-сценария, предназначенного для создания архивных копий файлов.

Технология Windows Script Components

Сразу оговоримся, что мы будем рассматривать только объекты-сценарии, которые являются серверами автоматизации (т.е. предоставляют свои свойства и методы другим приложениям), не затрагивая вопросы разработки специальных объектов

для использования внутри HTML- или ASP-страниц (Active Server Pages). 

Механизм работы объектов-сценариев базируется на технологии ActiveX Scripting, основную роль здесь играет динамическая библиотека Scrobj.dll, которая является оболочкой компонентов-сценариев и отвечает за функционирование файла-сценария в качестве СОМ-объекта. С точки зрения технологии СОМ эта библиотека для объектов-сценариев действует как внутренний сервер (inprocess server). Другими словами, оболочка компонентов-сценариев Scrobj.dll отвечает за то, чтобы при вызове из внешнего приложения метода объекта-сценария или обращении к его свойству запускалась соответствующая функция, описанная в этом сценарии. Для этого на уровне операционной системы незаметно для самого объекта-сценария и для приложения, в котором создается экземпляр этого объекта, производятся следующие действия.

При регистрации объекта-сценария в разделе

HKEY_CLASSES_ROOT\CLSID
системного реестра создается новый подраздел, название которого совпадает с глобальным кодом (CLSID) регистрируемого объекта. В этом новом разделе создается подраздел
InprocServer32
, значением по умолчанию которого является полный путь к библиотеке Scrobj.dll. Кроме
InprocServer32
, создаются подразделы
ProgID
(программный идентификатор объекта) и
ScripletURL
(полный путь к файлу объекта-сценария).

Если создание экземпляра объекта из внешнего приложения происходит с помощью программного идентификатора (ProgID) объекта, то сначала определяется глобальный код (CLSID) этого объекта. Для этого в разделе реестра

HKEY_LOCAL_MACHINE\SOFTWARE\Classes
ищется подраздел с именем, которое совпадает с программным идентификатором объекта (этот подраздел создается при регистрации объекта-сценария), и в качестве глобального кода берется значение параметра
CLSID
из этого подраздела.

По известному глобальному коду объекта происходит поиск раздела с нужным названием в

HKEY_CLASSES_ROOT\CLSID
, после чего определяется значение подраздела
InprocServer32
(путь к библиотеке Scrobj.dll) и загружается оболочка компонентов-сценариев Scrobj.dll.

Библиотека Scrobj.dll загружает указанный в подразделе

ScripletURL
файл со сценарием и перенаправляет вызовы методов объекта в этот сценарий.

Таким образом, нам остается лишь научиться правильным образом создавать файлы с исходным кодом компонентов-сценариев и регистрировать эти файлы в системе в качестве СОМ-объектов.

Компоненты-сценарии, реализованные в технологии Windows Script Components, представляют из себя файлы с расширениями wsc (WSC-файлы), которые содержат специальную XML-разметку (объектная

модель WSC XML), к описанию которой мы и перейдем.

Схема WSC XML

Ранее в главе 3 отмечалось, что объектная модель, которая используется при создании многозадачных сценариев (WS-файлов), была в основном позаимствована из схемы WSC XML, поэтому многие элементы WSC-файлов окажутся вам знакомыми.

В листинге 10.1 приводится несколько упрощенная (некоторые необязательные атрибуты у XML-элементов опущены) схема, поясняющая иерархию и порядок появления элементов в WSC-файле.

Листинг 10.1. Упрощенная схема WSC XML

<?xml version="1.0" encoding="windows-1251"?>

<package>

 <component [id="ComponentID"]>

<registration progid="ProgID" class id="GUID" [description="Description"] [version="Version"]>

<script>

Сценарии подключения и отключения

</script>

</registration>

<public>

<property name="PropertyName">

<get [internalName="getFunctionName"]/>

<put [internalName="getFunctionName"]/>

</property>

<method name= "MethodName" [internalName="FunctionName"]>

<parameter name="ParameterID"/>

</method>

<event name="Name" [dispid="DispID"]/>

</public>

<resource id="ResourceID"> Строка или число </resource>

<object id="ObjID" [classld="clsid:GUID"|progid="ProgID"]/>

<reference [object="ProgiD"|guid="typelibGUID"][version="version"]/>

<script language="language">

<![CDATA[

Код сценария

]]>

</script>

 </component>

 Другие компоненты

</package>

Несколько замечаний относительно количества вхождений различных XML-элементов из листинга 10.1 в WSC-файл:

элемент

<package>
может содержать один или несколько элементов
<component>
;

элемент

<component>
должен содержать один элемент
<registration>
и один элемент
<public>
;

Поделиться:
Популярные книги

Копиист

Поселягин Владимир Геннадьевич
2. Рунный маг
Фантастика:
фэнтези
7.26
рейтинг книги
Копиист

Ваше Сиятельство 4т

Моури Эрли
4. Ваше Сиятельство
Любовные романы:
эро литература
5.00
рейтинг книги
Ваше Сиятельство 4т

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Третий Генерал: Тома I-II

Зот Бакалавр
1. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Третий Генерал: Тома I-II

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.25
рейтинг книги
Паладин из прошлого тысячелетия

Изгой Проклятого Клана. Том 6

Пламенев Владимир
6. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 6

Двойник Короля 4

Скабер Артемий
4. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 4

Черный Маг Императора 19

Герда Александр
19. Черный маг императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 19

Неудержимый. Книга XXVIII

Боярский Андрей
28. Неудержимый
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXVIII

Херсон Византийский

Чернобровкин Александр Васильевич
1. Вечный капитан
Приключения:
морские приключения
7.74
рейтинг книги
Херсон Византийский

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Звездная Кровь. Изгой VII

Елисеев Алексей Станиславович
7. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
технофэнтези
рпг
фантастика: прочее
попаданцы
5.00
рейтинг книги
Звездная Кровь. Изгой VII

Убивать чтобы жить 9

Бор Жорж
9. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 9