HTA + VBS | Чем отлаживать VBS в теле HTA
Чем можно отладить текст VBS-скрипта, в теле HTA приложения?? Вообще для HTA существуют какие нибудь отладчики?? Отдельно отлаживать VBS и прикручивать его к HTA для меня не вариант. Спасибо за внимание:)
пример HTA:
Код:
<html>
<head><title>Настройка Среды</title><hta:application id="889988" ApplicationName = "GO!" Border = "Thick" Caption = "yes" Scroll = "no" SingleInstance = "yes" WindowState = "normal" Version = "1.1" ShowInTaskBar = "Yes" MaximizeButton = "No" MinimizeButton = "No" Icon = "tools\ico\Icon2.ico"/></head>
<SCRIPT Language="VBScript" id="SelSomeCBScript"> ' делает чекбокс выбранным если это указано в файле-профиля
</SCRIPT>
<SCRIPT Language="VBScript" id="scrEditSheduleArray"> ' Редактирует Массив-Задание в соответсвтии с текущими показателями чекбоксов
</SCRIPT>
<SCRIPT Language="VBScript" id="scrEditControlArray"> ' Редактирует Чекбоксы в соответсвтии с текущими значениями Массива задания
</SCRIPT>
<script language="VBScript">
Option Explicit
'======= глобальные переменные ====================================================================================
Dim chisloStrok 'тест: число строк в профиле
dim sheduleArray() ' Массив-Задание - глобальный массив, сформированный на основании анализа чекбоксов массив из строк профиля - который записывается в файл c:\currenttask
dim SelectedProfileFile ' выбранный файл профиля (строка)
dim LoadedProfileFile ' загруженный файл профиля - продолжение работы (строка)
Dim SettingsArray() ' Массив настроека программы, первая строка - имя текущего Профиля
'==================================================================================================================
sub main 'главный код программы начало работы программы
LoadedProfileFile = "no define"
startBotton.Disabled = True
If TaskExist Then
LoadedProfileFile = GetProfile
MsgBox "TaskExist. LoadedProfileFile: "&LoadedProfileFile &Chr(13)& "Старт выполнения задач"
ActivateProfile
StartTaskProcess
MsgBox "Все задачи выполнены"
Else
MsgBox "TNE"
filligProfileList ' заполняем лист профилей
End If
end Sub
Sub StartSub1 ' действия по кнопке СТАРТ
startBotton.Disabled = True
listboxProfile.Disabled = True
MsgBox sheduleArray(0) &Chr(13)& sheduleArray(1) &Chr(13)& sheduleArray(2)
EditSheduleArray ' формируем массив задания
ReWriteCurentTask ' записываем его в файл
WriteCurrentProfile ' и создаем на диске C: файл настроек
StartTaskProcess ' стартуем выполнение заданий
' MsgBox "StartTaskProcess"
' MsgBox sheduleArray(0) &Chr(13)& sheduleArray(1) &Chr(13)& sheduleArray(2)
MsgBox "Все задачи выполнены. (без перезагрузки)"
End Sub
sub ActivateProfile ' добавляет чекбоксы на форму, строит скрипт-процедуру их инициации (ActSomeCB) и скрипт-процедуру редактирования Массива-Задания в соответсвтии с чекбоксами
dim ForReading, ProfileFile, objFSO, objFile, stroka, objOption, htmlstr, cnt, strSub, strSubEditSheduleArray, strSubEditControlArray, checkFlag
ForReading = 1
If LoadedProfileFile = "no define" Then
MsgBox "Выбран профиль " & listboxProfile.value
ProfileFile = "profiles\" & listboxProfile.value
Else
MsgBox "Продолжение работы над профилем"
ProfileFile = "c:\currenttask"
SelectedProfileFile = LoadedProfileFile
End If
'====================================== ЗАГОЛОВКИ ПРОЦЕДУР ==========================================================================
strSub = strSub & "Sub ActSomeCB" & vbcrlf 'заголовок процедуры Инициализации Чекбоксов
strSubEditSheduleArray = strSubEditSheduleArray & "Sub EditSheduleArray" & vbcrlf 'заголовок процедуры Редактирования Массива-Задания
strSubEditControlArray = strSubEditControlArray & "Sub EditControlArray" & vbcrlf 'заголовок процедуры Редактирования Массива-Чекбоксов
'КОНЕЦ================================= ЗАГОЛОВКИ ПРОЦЕДУР ==========================================================================
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(ProfileFile, ForReading)
checkFlag=0 'флаг выбора чекбокса
cnt=0 'счетчик чекбоксов
CheckBoxArea.InnerHTML = "" 'поле для чекбоксов - пока не заполнено
Do Until objFile.AtEndOfStream 'для каждой строки файла профиля
stroka = objFile.ReadLine
'получаем имя задания и делаем новый код чекбокса
htmlstr = "<input type=" & chr(34) & "checkbox" & chr(34) & "name=" & chr(34) & "CBox" & cnt & chr(34) & "value=" & chr(34) & "1" & chr(34) & "onclick=" & chr(34) & "onCBChange" & chr(34) & ">" & getTaskName(stroka) 'зарядили именем
'и добавляем его на поле
CheckBoxArea.InnerHTML = CheckBoxArea.InnerHTML & vbcrlf & vbcrlf + htmlstr
'====================================== ТЕЛА ПРОЦЕДУР ==========================================================================
'и если флаг равен 1, то в процедурку инициации добавляем еще одну строку
If getTaskFlag(stroka) = 1 Then strSub = strSub & " CBox"&cnt&".Checked = true" & VbCrLf 'тело процедуры инициализации чекбоксов
If getTaskCFlag(stroka) = 1 Then strSub = strSub & " CBox"&cnt&".Disabled = true" & VbCrLf 'тело процедуры инициализации чекбоксов
'создаем массив равный файлу профиля, чтобы потом его изменить и создать из него файл-задания
redim Preserve sheduleArray(cnt) 'увеличиваем массив в соответствии с новым числом строк
sheduleArray(cnt) = stroka 'и добавляем в него новую строку из профиля
strSubEditSheduleArray = strSubEditSheduleArray & " If CBox"&cnt&".Checked Then sheduleArray("&cnt&")=EditCurrentFlagTo1(sheduleArray("&cnt&"))" & VbCrLf
strSubEditSheduleArray = strSubEditSheduleArray & " If not CBox"&cnt&".Checked Then sheduleArray("&cnt&")=EditCurrentFlagTo0(sheduleArray("&cnt&"))" & VbCrLf
strSubEditControlArray = strSubEditControlArray & " If getTaskCFlag(sheduleArray("&cnt&"))=1 Then CBox"&cnt&".Disabled = true" & VbCrLf '
'КОНЕЦ================================= ТЕЛА ПРОЦЕДУР ==========================================================================
cnt = cnt + 1
Loop
objFile.Close
'====================================== ОКОНЧАНИЯ ПРОЦЕДУР ==========================================================================
' strSub = strSub & "onCBChange()"
strSub = strSub & "End Sub" 'окончание процедуры инициализации чекбоксов
strSubEditSheduleArray = strSubEditSheduleArray & "End Sub" 'окончание процедуры Старта инсталляций
strSubEditControlArray = strSubEditControlArray & "End Sub" 'окончание процедуры Редактирования массива Чекбоксов
'====================================== ОКОНЧАНИЯ ПРОЦЕДУР ==========================================================================
'====================================== ПОСТРОЕНИЯ ПРОЦЕДУР В СКРИПТАХ ==========================================================================
SelSomeCBScript.text = strSub 'строим процедуру инициализации чекбоксов в скрипте
scrEditSheduleArray.text = strSubEditSheduleArray 'строим процедуру редактирования Массива-Задания в скрипте
scrEditControlArray.text = strSubEditControlArray ' строим процедуру редактирования массива Чекбоксов в скрипте
'====================================== ПОСТРОЕНИЯ ПРОЦЕДУР В СКРИПТАХ ==========================================================================
ActSomeCB 'вызываем построенную процедуру ActSomeCB в п построенном скрипе SelSomeCBScript
SelectedProfileFile = listboxProfile.value ' глобальная переменная SelectedProfileFile заполнятеся выбранным из списка профилем
startBotton.Disabled = False
End Sub
'==============================================================
' вспомогательные процедуры и функции
Sub filligProfileList ' Заполняет листбокс списком файлов-профилей в папке profiles
Dim fso, f, f1, fc, prFolder, objOption
prFolder = "profiles"
For Each objOption in listboxProfile.Options 'очистка листбокса
objOption.RemoveNode
Next
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(prFolder)
Set fc = f.Files
For Each f1 in fc
Set objOption = Document.createElement("OPTION")
objOption.Text = f1.name
objOption.Value = f1.name
listboxProfile.Add(objOption)
Next
MsgBox "FPL"
end Sub
Function getTaskPath(str) ' возвращает значение ПУТИ_ЗАДАЧИ
Dim parts
parts = Split(str,"=",-1,1)
getTaskPath = parts(0)
end Function
function getTaskName(str) ' возвращает значение ИМЕНИ_ЗАДАЧИ
Dim parts
parts = Split(str,"=",-1,1)
getTaskName = parts(1)
End Function
function getTaskFlag(str) ' возвращает значение ФЛАГА_ЗАДАЧИ
Dim parts
parts = Split(str,"=",-1,1)
getTaskFlag = parts(2)
end Function
function EditCurrentCFlag(str,CFlag) ' ставит в строчке Массива-Задания CFlag
Dim currentstring
currentstring = getTaskPath(str)&"="&getTaskName(str)&"="&getTaskFlag(str)&"="&CFlag
EditCurrentCFlag = currentstring
end Function
Sub ReWriteCurentTask ' ПереПисывает текущий файл задания из текущего массива-задания
Dim fso, cnt, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.OpenTextFile("c:\currenttask", 2, True)
For cnt = 0 To UBound(sheduleArray)
MyFile.WriteLine(sheduleArray(cnt))
Next
MyFile.Close
End Sub
Sub ReReadCurentTask ' ПереЧитывает текущий файл задания в текущий массив-задания
Dim fso, MyFile, cnt, stroka
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.OpenTextFile("c:\currenttask", 1, False)
cnt = 0
Erase sheduleArray ' очищаем массив задания и заполняем его снова уже из файла задания
Do Until MyFile.AtEndOfStream
stroka = MyFile.ReadLine
ReDim Preserve sheduleArray(cnt)
sheduleArray(cnt) = stroka
cnt = cnt + 1
Loop
MyFile.Close
End Sub
Function GetProfile()
ReadCurrentSettings
GetProfile = sheduleArray(0)
End Function
Function Continue()
ReadCurrentSettings
If sheduleArray(1) = "continue" Then
Continue = True
Else
Continue = False
End If
End Function
Sub ReadCurrentSettings ' получает имя текущего профиля, в файле настроек, заодно заполняет массив настроек
Dim fso, MyFile, cnt, stroka
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.OpenTextFile("c:\CurrentSettings", 1, False)
cnt = 0
Erase SettingsArray ' очищаем массив Настроек программы и заполняем его снова уже из файла Настроек
Do Until MyFile.AtEndOfStream
stroka = MyFile.ReadLine
ReDim Preserve SettingsArray(cnt)
SettingsArray(cnt) = stroka
cnt = cnt + 1
Loop
MyFile.Close
End Sub
Sub WriteCurrentSettings ' Записываем массив Настроек программы в файл
Dim fso, MyFile, cnt
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\CurrentSettings", True) ' создали файл настроек
For cnt = 0 To UBound(SettingsArray)
MyFile.WriteLine(SettingsArray(cnt))
Next
MyFile.Close
end Sub
' КОНЕЦ вспомогательные процедуры и функции
'==============================================================
</script>
<body onload="main">
<input id=runbutton class="button" type="button" value="Заполнить лист профилей" name="fill_profile_button" onClick="filligProfileList" Disabled=True>
<br>
<br>
<select size="6" name="listboxProfile" onChange="ActivateProfile">
</select>
<br>
<br>
<span id="CheckBoxArea"></span>
<br>
<br>
<input id="GoButton" type="button" name="startBotton" value="Start" onclick="StartSub1" />
<br>
<br>
<input type="checkbox"name="BasicCheckbox"value="1" onclick = "onCBChange"> Option 1
<br>
<br>
</body>
</html>
|