Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
В this.FilesToArchiv = FilesToArchiv;
}
var SFrom;
var SArch;
var SPref;
var SMask;
var SErrMess;
function get_SFrom() {
В return SFrom;
}
function put_SFrom(newValue) {
В SFrom = newValue;
}
function get_SArch() {
В return SArch;
}
function put_SArch(newValue) {
В SArch = newValue;
}
function get_SPref() {
В return SPref;
}
function put_SPref(newValue) {
В SPref = newValue;
}
function get_SMask() {
В return SMask;
}
function put_SMask(newValue) {
В SMask = newValue;
}
function get_SErrMess(){
В return SErrMess;
}
function FilesToArchiv() {
В return "Temporary Value";
}
В ]]>
В </script>
</component>
Как мы видим из листинга 10.3, при использовании в компоненте-сценарии языка JScript в результате работы мастера внутрь контейнера <script> помещаются:
□ глобальные переменные, которые соответствуют объявленным в элементах <property> свойствам;
□ заготовки функций с префиксами get_ и put_, которые осуществляют чтение и запись свойств объекта;
□ заготовки функций, которые соответствуют объявленным в элементах <method> методам.
РљСЂРѕРјРµ этого, создается экземпляр внутреннего объекта, содержащего те же свойства Рё методы, что были описаны внутри элемента <public> (переменная description). РРјСЏ этого внутреннего объекта совпадает СЃ именем класса описываемого РЎРћРњ-объекта (РІ нашем случае это "DateArc").
ЗамечаниеСоздаваемый мастером внутренний объект нужен только в иллюстративных целях, т.к. здесь наглядно видно, какие именно свойства и методы будет предоставлять клиентам автоматизации компонент-сценарий. Если убрать из контейнера <script> описание внутреннего объекта, это никак не скажется на функционировании объекта-сценария.
Доработка объекта-сценария DateArc.wsc (JScript)
Для получения нужного нам СОМ-объекта из сформированного с помощью Windows Script Component Wizard файла DateArc.wsc нужно выполнить несколько шагов.
Во-первых, для того, чтобы использовать внутри описания СОМ-объекта символы кириллицы, необходимо добавить в директиву <?xml?> аргумент encoding="windows-1251" (без этого в сценарии не удастся даже написать по-русски комментарии):
<?xml version="1.0" encoding="windows-1251"?>
Во-вторых, в контейнер <registration> мы вставим элемент <script> с двумя функциями Register() и Unregister(), которые будут выводить на экран диалоговые окна с соответствующей информацией при регистрации компонента-сценария и его отключении соответственно:
<script language="JScript">
<![CDATA[
var WshShell;
//Рнициализируем константы для диалоговых РѕРєРѕРЅ
var vbInformation=64;
function Register()В {
 //Создаем объект WshShell
В WshShell = new ActiveXObject("WScript.Shell");
 WshShell.Popup("Компонент зарегистрирован в системе",0,
 "Компонент для архивирования файлов",vbInformation);
}
function Unregister()В В {
 //Создаем объект WshShell
В WshShell = new ActiveXObject("WScript.Shell");
 WshShell.Popup("Компонент удален из системы", 0,
 "Компонент для архивирования файлов",vbInformation);
}
]]>
</script>
Затем нам понадобятся две дополнительные функции. Первая из них NowIs() формирует строку формата ММДД, где ММ — текущий месяц, ДД — текущий день:
//Вспомогательная функция для символьного представления даты
function NowIs() {
В var d, s="", s1="";
 //Создаем объект Date (текущая дата)
В d=new Date();
 //Выделяем номер месяца
В s+=(d.getMonth()+1);
 //Если месяц представляется одним символом, добавляем слева "0"
В if (s.length==1) s="0"+s;
 //Выделяем в дате день
В s1+=d.getDate();
 //Если день представляется одним символом, добавляем слева "0"
В if (s1.length==1) s1="0"+s1;
В s+=s1;
 //Возвращаем сформированную строку
В return s;
}
Вторая функция CheckPath() будет проверять наличие исходного каталога и каталога для хранения архивных файлов. Для этого используется метод FolderExists() объекта FileSystemObject. Заметим, что сам объект FileSystemObject нужно создавать не путем вызова метода CreateObject объекта WScript, а с помощью конструкции new ActiveXObject():
FSO=new ActiveXObject("Scripting.FileSystemObject");
т.к. в отличие от обычного сценария WSH в компоненте-сценарии нет встроенного объекта WScript. Если хотя бы один из каталогов не существует, функция CheckPath() запишет соответствующее сообщение в свойство SErrMess и вернет значение false, в противном случае функция CheckPath() возвращает значение true.
//Проверка доступности каталогов
function CheckPath() {
В var FSO;
 //Создаем объект FileSystemObject
В FSO=new ActiveXObject("Scripting.FileSystemObject");
 //Проверяем доступность исходного каталога
В if (!FSO.FolderExists(SFrom)) { //Рсходный каталог РЅРµ существует
 //Формируем строку с информацией об ошибке
 SErrMess="Не найден исходный каталог "+SFrom;
В return false;
В }
 //Проверяем доступность каталога для архивирования
В if (!FSO.FolderExists(SArch)) {
 //Каталог для архивирования не существует
 //Формируем строку с информацией об ошибке