Книга: Windows Script Host для Windows 2000/XP

Реализация объекта DateArc.wsc на VBScript

Реализация объекта DateArc.wsc на VBScript

Различие между компонентами-сценариями, написанными на языках JScript и VBScript, проявляется только в секции <script> WSC-файлов. Во-первых, естественным образом меняется синтаксис описанных внутри контейнера <script> функций. Во-вторых, в WSC-файле, написанном с помощью VBScript, отсутствует описание внутреннего объекта, который генерируется программой Windows Script Component Wizard и имеет поля и методы, совпадающие с объявленными внутри элемента <public> (см. листинг 10.3).

Объяснение этому очень простое — в VBScript нельзя создавать свои внутренние объекты.

Полностью содержимое файла DateArcVB.wsc, который реализует СОМ-объект DateArc.WSC с помощью VBScript, приведено в листинге 10.5.

Листинг 10.5. СОМ-объект DateArc.WSC (VBScript)

<?xml version="1.0" encoding="windows-1251"?>
<component>
 <registration description="DateArc" progid="DateArc.WSC"
  version="1.00" classid="{424ac2bc-5732-4dea-be17-0211af99cd79}">
 <script language="VBScript">
  <![CDATA[
Dim WshShell
Function Register()
 'Создаем объект WshShell
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup "Компонент зарегистрирован в системе",0,_
  "Компонент для архивирования файлов",vbInformation
End Function
Function Unregister()
 'Создаем объект WshShell
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup "Компонент удален из системы",0,_
  "Компонент для архивирования файлов",vbInformation
End Function
  ]]>
  </script>
 </registration>
 <public>
  <property name="SFrom">
   <get/>
   <put/>
  </property>
  <property name="SArch">
   <get/>
   <put/>
  </property>
  <property name="SPref">
   <get/>
   <put/>
  </property>
  <property name="SMask">
   <get/>
   <put/>
  </property>
  <property name="SErrMess">
   <get/>
  </property>
  <method name="FilesToArchiv">
  </method>
 </public>
 <script language="VBScript">
  <![CDATA[
Dim SFrom    'Исходный каталог для архивирования
Dim SArch    'Каталог, в котором будет создаваться архив
Dim SPref    'Префикс файла
Dim SMask    'Маска, по которой отбираются файлы для
             'архивирования
Dim SErrMess 'Текст сообщения об ошибке
'Чтение и запись свойства SFrom
Function get_SFrom()
 get_SFrom = SFrom
End Function
Function put_SFrom(newValue)
 SFrom = newValue
End Function
'Чтение и запись свойства SArch
Function get_SArch()
 get_SArch = SArch
End Function
Function put_SArch(newValue)
 SArch = newValue
End Function
'Чтение и запись свойства SPref
Function get_SPref()
 get_SPref = SPref
End Function
Function put_SPref(newValue)
 SPref = newValue
End Function
'Чтение и запись свойства SMask
Function get_SMask()
 get_SMask = SMask
End Function
Function put_SMask(newValue)
 SMask = newValue
End Function
'Чтение свойства SErrMess
Function get_SErrMess()
 get_SErrMess = SErrMess
End Function
'Вспомогательная функция для символьного представления даты
Function NowIs()
 Dim d,s,s1
 s=""
 s1=""
 'Определяем текущую дату
 d=Date()
 'Выделяем номер месяца
 s=s & Month(d)
 'Если месяц представляется одним символом, добавляем слева "0"
 If Len(s)=1 Then
  s="0" & s
 End If
 'Выделяем в дате день
 s1=s1 & Day(d)
 'Если день представляется одним символом, добавляем слева "0"
 If Len(s1)=1 Then
  s1="0" & s1
 End If
 s=s & s1
 'Возвращаем сформированную строку
 NowIs=s
End Function
'Проверка доступности каталогов
Function CheckPath()
 Dim FSO
 'Создаем объект FileSystemObject
 Set FSO=CreateObject("Scripting.FileSystemObject")
 'Проверяем доступность исходного каталога
 If Not FSO.FolderExists(SFrom) Then
  'Исходный каталог не существует
  'Формируем строку с информацией об ошибке
  SErrMess="Не найден исходный каталог " & SFrom
  CheckPath=false
 End If
 'Проверяем доступность каталога для архивирования
 If Not FSO.FolderExists(SArch) Then
  'Каталог для архивирования не существует
  'Формируем строку с информацией об ошибке
  SErrMess="Не найден каталог для хранения архивов " & SArch
  CheckPath=false
 End If
 'Если оба каталога существуют, возвращаем true
 CheckPath=true
End Function
'Архивирование файлов из исходного каталога
Function FilesToArchiv()
 Dim WshShell,SComLine,RetCode,SFName,FSO
 'Если хотя бы один из каталогов не существует, возвращаем false
 If Not CheckPath() Then
  FilesToArchiv=false
 End If 
 'Создаем объект FileSystemObject
 Set FSO=CreateObject("Scripting.FileSystemObject")
 'Создаем объект WshShell
 Set WshShell=CreateObject("WScript.Shell")
 'Формируем имя файла-архива
 SFName=SPref & NowIs() & ".arj"
 'Формируем командную строку для запуска архиватора arj.exe
 SComLine="%COMSPEC% /c arj.exe a "
 SComLine=SComLine & FSO.BuildPath(SArch,SFName)+" "
 SComLine=SComLine & FSO.BuildPath(SFrom,SMask)
 'Запускаем архиватор arj.exe
 RetCode = WshShell.Run(SComLine, 1, true)
 'Анализируем код возврата для arj.exe
 If 0=RetCode Then
  'Выполнение arj.exe завершилось без ошибок
  FilesToArchiv=true
 Else
  'Формируем строку с информацией об ошибке
  SErrMess="Ошибка ARJ.EXE! Код " & RetCode
  FilesToArchiv=false
 End If
End Function
  ]]>
 </script>
</component>
 

Оглавление книги


Генерация: 1.285. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз