Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - [решено] HTA + VBS | Чем отлаживать VBS в теле HTA

Ответить
Настройки темы
VBS/WSH/JS - [решено] HTA + VBS | Чем отлаживать VBS в теле HTA

Аватара для vxor

Старожил


Сообщения: 206
Благодарности: 3


Конфигурация

Профиль | Отправить PM | Цитировать


Чем можно отладить текст 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>

Отправлено: 13:14, 26-02-2011

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


http://lmgtfy.com/?q=hta+debug

почему vbs? - на js можно написать всё то же самое, но это более полезный опыт, по js больше документации, код js можно повторно использовать в гораздо большем количестве случаев

Отправлено: 14:49, 26-02-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для vxor

Старожил


Сообщения: 206
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Busla:
http://lmgtfy.com/?q=hta+debug »
Это ссылка на гугл? В случайном порядке выбрал VBS, (ибо кроме pascal ничего не знаю) и начал решение задачи. Надо заканчивать.. В след. раз выберу что-нибудь более сильное. Спасибо за ответ!

Отправлено: 21:57, 26-02-2011 | #3


Пользователь


Сообщения: 120
Благодарности: 22

Профиль | Цитировать


Цитата xor++:
Чем можно отладить текст VBS-скрипта, в теле HTA приложения? »
наверное MsgBox, Debug.Assert и Debug.Print, на крайняк с помощью лог-файлов (ИМХО самое удобное Debug.Assert)

Отправлено: 08:40, 03-03-2011 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


KnRSU, разве объект «Debug» доступен в контексте «mshta.exe»?

Отправлено: 13:02, 03-03-2011 | #5


Пользователь


Сообщения: 120
Благодарности: 22

Профиль | Цитировать


Iska, прошу прощения Вы правы, подсознательно просто провел аналогию с VB
xor++, самое простое использование лог файла для отладки (можно даже некий аналог back-trace состряпать)
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:02, 04-03-2011 | #6


Аватара для vxor

Старожил


Сообщения: 206
Благодарности: 3

Профиль | Отправить PM | Цитировать


Понял. Спасибо за ответы!! Использую msgbox

Понял. Спасибо за ответы!! Использую Primal Script для редактирования и HTAEdit для отладки. Также использую msgbox.

Отправлено: 16:03, 05-03-2011 | #7


Пользователь


Сообщения: 120
Благодарности: 22

Профиль | Цитировать


xor++, кстати в HTAEdit есть встроенный отладчик, что само собой снимает поставленный вопрос, просто укажите в коде точку останова и запускайте по кнопке Start

Последний раз редактировалось KnRSU, 10-03-2011 в 11:22. Причина: орфографическая ошибка


Отправлено: 10:18, 09-03-2011 | #8


Аватара для vxor

Старожил


Сообщения: 206
Благодарности: 3

Профиль | Отправить PM | Цитировать


KnRSU, спасибо за ответ!! Просто когда я задавал этот вопрос я еще не знал про HTAEdit.

Отправлено: 11:17, 10-03-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - [решено] HTA + VBS | Чем отлаживать VBS в теле HTA

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Обращение к i-му чекбоксу на форме HTA в VBScript vxor Программирование и базы данных 4 10-02-2011 13:01
VBS/WSH/JS - HTA приложение в терминале (RemoteApp) salikoff Скриптовые языки администрирования Windows 0 18-10-2010 09:24
VBS/WSH/JS - Помогите редактировать Autorun_Disable.vbs на Autorun_Enable.vbs nod201 Скриптовые языки администрирования Windows 0 05-12-2009 05:44
VBS/WSH/JS - виснет hta в назначенных заданиях pva Программирование и базы данных 4 07-04-2009 12:15
Установка Линукс (Red Hta 7.3) Cobalt Общий по Linux 6 13-09-2002 20:54




 
Переход