|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - [решено] HTA + VBS | Чем отлаживать VBS в теле HTA |
|
VBS/WSH/JS - [решено] HTA + VBS | Чем отлаживать VBS в теле HTA
|
Старожил Сообщения: 206 |
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать http://lmgtfy.com/?q=hta+debug
почему vbs? - на js можно написать всё то же самое, но это более полезный опыт, по js больше документации, код js можно повторно использовать в гораздо большем количестве случаев |
Отправлено: 14:49, 26-02-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Цитата Busla:
|
|
Отправлено: 21:57, 26-02-2011 | #3 |
Пользователь Сообщения: 120
|
Цитата xor++:
|
|
Отправлено: 08:40, 03-03-2011 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать KnRSU, разве объект «Debug» доступен в контексте «mshta.exe»?
|
|
Отправлено: 13:02, 03-03-2011 | #5 |
Пользователь Сообщения: 120
|
Iska, прошу прощения Вы правы, подсознательно просто провел аналогию с VB
xor++, самое простое использование лог файла для отладки (можно даже некий аналог back-trace состряпать) |
Отправлено: 07:02, 04-03-2011 | #6 |
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Понял. Спасибо за ответы!! Использую msgbox
Понял. Спасибо за ответы!! Использую Primal Script для редактирования и HTAEdit для отладки. Также использую msgbox. |
Отправлено: 16:03, 05-03-2011 | #7 |
Пользователь Сообщения: 120
|
xor++, кстати в HTAEdit есть встроенный отладчик, что само собой снимает поставленный вопрос, просто укажите в коде точку останова и запускайте по кнопке Start
|
Последний раз редактировалось KnRSU, 10-03-2011 в 11:22. Причина: орфографическая ошибка Отправлено: 10:18, 09-03-2011 | #8 |
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать KnRSU, спасибо за ответ!! Просто когда я задавал этот вопрос я еще не знал про HTAEdit.
|
Отправлено: 11:17, 10-03-2011 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|