Книга: 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>
- 9.4.1. Реализация графа в виде матрицы смежности
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Реализация языка SQL
- 9.2.1. Более строгая реализация стека
- 9.2 Реализация массива ftAID на платформе Windows NT
- 5.2.3. Действия с объектами Numbers
- 12.6. Обращение к объектам, отображенным в память
- Реализация семафоров в Linux
- 16.8. Реализация отношений в Core Data
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
- 10.16. Реализация с использованием семафоров System V
- Реализация очередей отложенных действий