<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: конструирование и выдача диалогов с помощью HTA]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1803&amp;type=atom" />
	<updated>2008-07-11T09:35:27Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=1803</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: конструирование и выдача диалогов с помощью HTA]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=12454#p12454" />
			<content type="html"><![CDATA[<p>Предыдущий пример с функцией. Добавлено закрытие диалога по Escape и возможность вызова <em>модального</em> окна выбора папок. Чтобы получить хэндл окна для его передачи функции BrowseForFolder (чтобы сделать окно выбора папок модальным), на форму вставляется объект MSScriptControl.<br /></p><div class="codebox"><pre><code>Option Explicit
Dim ExitDo, oHTA, oDict, oBody, oElem, oText
Dim val_1, val_2, val_3, ok, strHTML
&#039;==================================================================================================
Function GetHTADialog(ByRef Params)
    Dim oFSO, oWshShell, oWindows, oTextStream, oWnd, oWindow
    Dim sHTAFileName, ID, N
    
    Set oFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
    Set oWshShell = CreateObject(&quot;WScript.Shell&quot;)
    Set oWindows = CreateObject(&quot;Shell.Application&quot;).Windows
    
    &#039; формирование имени будущего файла HTA
    sHTAFileName = oWshShell.ExpandEnvironmentStrings(&quot;%TEMP%&quot;) &amp; &quot;\&quot; &amp; oFSO.GetTempName() &amp; &quot;.hta&quot;
    &#039; создание файла HTA
    Set oTextStream = oFSO.CreateTextFile(sHTAFileName, True)
    &#039; заполнение файла HTA
    With oTextStream
        .WriteLine &quot;&lt;HTML&gt;&lt;HEAD&gt;&quot;
        .WriteLine &quot;&lt;OBJECT classid=&quot;&quot;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&quot;&quot;&quot;
        .WriteLine &quot;    id=&quot;&quot;WebBrowserTemplate&quot;&quot; width=&quot;&quot;0&quot;&quot; height=&quot;&quot;0&quot;&quot;&gt;&lt;/OBJECT&gt;&quot;
        .WriteLine &quot;&lt;OBJECT id=&quot;&quot;MSScriptControl&quot;&quot; style=&quot;&quot;display:none&quot;&quot; classid=&quot;&quot;clsid:0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC&quot;&quot;&gt;&quot;
        .WriteLine &quot;    &lt;PARAM name=&quot;&quot;AllowUI&quot;&quot; value=1&gt;&lt;PARAM name=&quot;&quot;UseSafeSubSet&quot;&quot; value=1&gt;&lt;/OBJECT&gt;&quot;
        .WriteLine &quot;&lt;TITLE&gt;&lt;/TITLE&gt;&quot;
        .WriteLine &quot;&lt;SCRIPT language=vbscript&gt;&quot;
        .WriteLine &quot;If IsObject(window) Then&quot;
        .WriteLine &quot;    window.attachevent &quot;&quot;onload&quot;&quot;, GetRef(&quot;&quot;Main&quot;&quot;)&quot;
        .WriteLine &quot;    document.attachevent &quot;&quot;onkeydown&quot;&quot;, GetRef(&quot;&quot;Document_onkeydown_event&quot;&quot;)&quot;
        .WriteLine &quot;End If&quot;
        .WriteLine &quot;Sub Main&quot;
        .WriteLine &quot;    CommandLine = Document.all.tags(&quot;&quot;APPLICATION&quot;&quot;)(0).CommandLine&quot;
        .WriteLine &quot;    Pos = InstrRev(CommandLine, &quot;&quot; &quot;&quot;)&quot;
        .WriteLine &quot;    CommandLine = Mid(CommandLine, Pos + 1, Len(CommandLine) - Pos)&quot;
        .WriteLine &quot;    If CommandLine = &quot;&quot;&quot;&quot; Then Exit Sub&quot;
        .WriteLine &quot;    Set WebBrowser = Document.GetElementById(&quot;&quot;WebBrowserTemplate&quot;&quot;)&quot;
        .WriteLine &quot;    WebBrowser.RegisterAsBrowser = True&quot;
        .WriteLine &quot;    WebBrowser.style.display = &quot;&quot;none&quot;&quot;&quot;
        .WriteLine &quot;    WebBrowser.RegisterAsDropTarget = False&quot;
        .WriteLine &quot;    WebBrowser.Visible = False&quot;
        .WriteLine &quot;    WebBrowser.PutProperty &quot;&quot;ID&quot;&quot;, Clng(CommandLine)&quot;
        .WriteLine &quot;    WebBrowser.PutProperty &quot;&quot;HWND&quot;&quot;, MSScriptControl.SiteHwnd&quot;
        .WriteLine &quot;End Sub&quot;
        .WriteLine &quot;Function Document_onkeydown_event&quot;
        .WriteLine &quot;    If window.event.keycode = 27 Then window.close()&quot; &#039; закрытие по Esc
        .WriteLine &quot;    If window.event.keycode = 116 Then Document_onkeydown_event = false&quot; &#039; блокировка F5 (refresh)
        .WriteLine &quot;End Function&quot;
        .WriteLine &quot;&lt;/SCRIPT&gt;&quot;
        .WriteLine &quot;&lt;HTA:APPLICATION&quot;
        .WriteLine &quot;APPLICATIONNAME=&quot;&quot;&quot; &amp; Params.Item(&quot;APPLICATIONNAME&quot;) &amp; &quot;&quot;&quot;&quot;
        If Params.Exists(&quot;BORDER&quot;) Then
            .WriteLine &quot;BORDER=&quot;&quot;&quot; &amp; Params.Item(&quot;BORDER&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;BORDER=&quot;&quot;thick&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;BORDERSTYLE&quot;) Then
            .WriteLine &quot;BORDERSTYLE=&quot;&quot;&quot; &amp; Params.Item(&quot;BORDERSTYLE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;BORDERSTYLE=&quot;&quot;normal&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;CAPTION&quot;) Then
            .WriteLine &quot;CAPTION=&quot;&quot;&quot; &amp; Params.Item(&quot;CAPTION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;CAPTION=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;CONTEXTMENU&quot;) Then
            .WriteLine &quot;CONTEXTMENU=&quot;&quot;&quot; &amp; Params.Item(&quot;CONTEXTMENU&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;CONTEXTMENU=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;ICON&quot;) Then
            .WriteLine &quot;ICON=&quot;&quot;&quot; &amp; Params.Item(&quot;ICON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;ICON=&quot;&quot;System Application Icon&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;INNERBORDER&quot;) Then
            .WriteLine &quot;INNERBORDER=&quot;&quot;&quot; &amp; Params.Item(&quot;INNERBORDER&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;INNERBORDER=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;MAXIMIZEBUTTON&quot;) Then
            .WriteLine &quot;MAXIMIZEBUTTON=&quot;&quot;&quot; &amp; Params.Item(&quot;MAXIMIZEBUTTON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;MAXIMIZEBUTTON=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;MINIMIZEBUTTON&quot;) Then
            .WriteLine &quot;MINIMIZEBUTTON=&quot;&quot;&quot; &amp; Params.Item(&quot;MINIMIZEBUTTON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;MINIMIZEBUTTON=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;NAVIGABLE&quot;) Then
            .WriteLine &quot;NAVIGABLE=&quot;&quot;&quot; &amp; Params.Item(&quot;NAVIGABLE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;NAVIGABLE=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SCROLL&quot;) Then
            .WriteLine &quot;SCROLL=&quot;&quot;&quot; &amp; Params.Item(&quot;SCROLL&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SCROLL=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SCROLLFLAT&quot;) Then
            .WriteLine &quot;SCROLLFLAT=&quot;&quot;&quot; &amp; Params.Item(&quot;SCROLLFLAT&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SCROLLFLAT=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SELECTION&quot;) Then
            .WriteLine &quot;SELECTION=&quot;&quot;&quot; &amp; Params.Item(&quot;SELECTION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SELECTION=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SHOWINTASKBAR&quot;) Then
            .WriteLine &quot;SHOWINTASKBAR=&quot;&quot;&quot; &amp; Params.Item(&quot;SHOWINTASKBAR&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SHOWINTASKBAR=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SINGLEINSTANCE&quot;) Then
            .WriteLine &quot;SINGLEINSTANCE=&quot;&quot;&quot; &amp; Params.Item(&quot;SINGLEINSTANCE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SINGLEINSTANCE=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SYSMENU&quot;) Then
            .WriteLine &quot;SYSMENU=&quot;&quot;&quot; &amp; Params.Item(&quot;SYSMENU&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SYSMENU=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;VERSION&quot;) Then
            .WriteLine &quot;VERSION=&quot;&quot;&quot; &amp; Params.Item(&quot;VERSION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;VERSION=&quot;&quot;1.0&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;WINDOWSTATE&quot;) Then
            .WriteLine &quot;WINDOWSTATE=&quot;&quot;&quot; &amp; Params.Item(&quot;WINDOWSTATE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;WINDOWSTATE=&quot;&quot;normal&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;ID&quot;) Then
            .WriteLine &quot;ID=&quot;&quot;&quot; &amp; Params.Item(&quot;ID&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;ID=&quot;&quot;oHTA&quot;&quot;&quot;
        End If
        .WriteLine &quot;/&gt;&quot;
        .WriteLine &quot;&lt;/HEAD&gt;&lt;BODY&gt;&lt;/BODY&gt;&lt;/HTML&gt;&quot;
        .Close
    End With
    Randomize
    ID = Clng(Rnd * 100000)
    oWshShell.Run sHTAFileName &amp; &quot; &quot; &amp; ID
    &#039; поиск окна HTA
    Set oWnd = Nothing
    For N = 1 to 5000
        For Each oWindow in oWindows
            If oWindow.GetProperty(&quot;ID&quot;) = ID Then
                Set oWnd = oWindow
                Exit For
            End If
        Next
        If Not oWnd Is Nothing Then Exit For
        WScript.Sleep 100
    Next
    &#039; удаление файла HTA
    oFSO.DeleteFile sHTAFileName, True
    &#039; возвращаем ссылку на окно HTA
    Set GetHTADialog = oWnd
End Function
&#039;==================================================================================================
Sub HTA_OnUnload
    ExitDo = True
End Sub
Sub CloseHTA
    oHTA.document.parentWindow.close
End Sub
Sub OK_HTA
    val_1 = oHTA.document.parentWindow.input_1.value
    val_2 = oHTA.document.parentWindow.input_2.value
    val_3 = oHTA.document.parentWindow.input_3.value
    oHTA.document.parentWindow.close
    ok = True
End Sub
Sub BrowseFolder
    Dim oFolder, oShellApp, oFSO
    Set oShellApp = CreateObject(&quot;Shell.Application&quot;)
    Set oFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
    Set oFolder = oShellApp.BrowseForFolder(oHTA.GetProperty(&quot;HWND&quot;), &quot;Выбор папки&quot;, 81, &quot;&quot;)
    If Not oFolder Is Nothing Then
        If oFSO.FolderExists(oFolder.Self.Path) Then
            oHTA.document.parentWindow.input_3.value = oFolder.Self.Path
        End If
    End If
End Sub
&#039;==================================================================================================
Set oDict = CreateObject(&quot;Scripting.Dictionary&quot;)
oDict.Add &quot;CONTEXTMENU&quot;, &quot;no&quot;
oDict.Add &quot;INNERBORDER&quot;, &quot;no&quot;
oDict.Add &quot;SCROLL&quot;, &quot;no&quot;
oDict.Add &quot;BORDER&quot;, &quot;dialog&quot;
oDict.Add &quot;BORDERSTYLE&quot;, &quot;raised&quot;
oDict.Add &quot;MAXIMIZEBUTTON&quot;, &quot;no&quot;
oDict.Add &quot;MINIMIZEBUTTON&quot;, &quot;no&quot;
ok = False
Set oHTA = GetHTADialog(oDict)
If oHTA Is Nothing Then
    WScript.Echo &quot;Не удалось получить связь с окном HTA.&quot;
    WScript.Quit
End If
&#039; назначаем обработчик события выгрузки (закрытия) формы
oHTA.document.body.onunload = GetRef(&quot;HTA_OnUnload&quot;)
&#039; задаём размеры формы
oHTA.document.parentWindow.resizeTo 350, 320
&#039; задаём заголовок окна
oHTA.document.title = &quot;Заголовок диалога&quot;
&#039; получаем объет тела HTML-документа
Set oBody = oHTA.document.getElementsByTagName(&quot;body&quot;)(0)
&#039; задаём цвет фона
oBody.bgcolor = &quot;#E0E0E0&quot;
&#039; формируем строку HTML-кода
strHTML = &quot;&quot;
strHTML = strHTML &amp; &quot;&lt;P&gt;Введите текстовое значение:&lt;/P&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;INPUT id=input_1 size=50&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;P&gt;Выберите файл:&lt;/P&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;INPUT id=input_2 type=file size=37&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;P&gt;Выберите папку:&lt;/P&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;INPUT id=input_3 size=37&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;BUTTON id=bBrowse&gt;Обзор...&lt;/BUTTON&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;BR&gt;&lt;BR&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;BUTTON id=bOK&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;О&#039;кей&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/BUTTON&gt;&quot;
strHTML = strHTML &amp; &quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;
strHTML = strHTML &amp; &quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;
strHTML = strHTML &amp; &quot;&lt;BUTTON id=bCancel&gt;Отменить&lt;/BUTTON&gt;&quot;
&#039; записываем HTML-код в тело документа
oBody.innerHTML = strHTML
&#039; назначение событий кнопкам
oHTA.document.parentWindow.bOK.onclick = GetRef(&quot;OK_HTA&quot;)
oHTA.document.parentWindow.bCancel.onclick = GetRef(&quot;CloseHTA&quot;)
oHTA.document.parentWindow.bBrowse.onclick = GetRef(&quot;BrowseFolder&quot;)
Do &#039; ожидание закрытия окна HTA
    WScript.Sleep 100
Loop Until ExitDo
If ok Then
    WScript.Echo &quot;Введено текстовое значение: &quot; &amp; val_1
    WScript.Echo &quot;Выбран файл: &quot; &amp; val_2
    WScript.Echo &quot;Выбрана папка: &quot; &amp; val_3
Else
    WScript.Echo &quot;Окно HTA было закрыто кнопкой &quot;&quot;Отменить&quot;&quot;.&quot;
End If</code></pre></div><p>Автор идеи - <strong>alexii</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-07-11T09:35:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=12454#p12454</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: конструирование и выдача диалогов с помощью HTA]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=12378#p12378" />
			<content type="html"><![CDATA[<p>Функция, которая возвращает ссылку на объект окна HTA. В качестве аргумента принимает словарь с параметрами тега HTA. Получаем ссылку на объект окна HTA и формируем диалоговую форму с двумя полями ввода с помощью объектной модели DOM:<br /></p><div class="codebox"><pre><code>Option Explicit
Dim ExitDo, oHTA, oDict, oBody, oElem, oText
Dim val_1, val_2, ok
&#039;==================================================================================================
Function GetHTADialog(ByRef Params)
    Dim oFSO, oWshShell, oWindows, oTextStream, oWnd, oWindow
    Dim sHTAFileName, ID, N
    
    Set oFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
    Set oWshShell = CreateObject(&quot;WScript.Shell&quot;)
    Set oWindows = CreateObject(&quot;Shell.Application&quot;).Windows
    
    &#039; формирование имени будущего файла HTA
    sHTAFileName = oWshShell.ExpandEnvironmentStrings(&quot;%TEMP%&quot;) &amp; &quot;\&quot; &amp; oFSO.GetTempName() &amp; &quot;.hta&quot;
    &#039; создание файла HTA
    Set oTextStream = oFSO.CreateTextFile(sHTAFileName, True)
    &#039; заполнение файла HTA
    With oTextStream
        .WriteLine &quot;&lt;HTML&gt;&lt;HEAD&gt;&quot;
        .WriteLine &quot;&lt;OBJECT classid=&quot;&quot;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&quot;&quot;&quot;
        .WriteLine &quot;id=&quot;&quot;WebBrowserTemplate&quot;&quot; width=&quot;&quot;0&quot;&quot; height=&quot;&quot;0&quot;&quot;&gt;&quot;
        .WriteLine &quot;&lt;/OBJECT&gt;&lt;TITLE&gt;&lt;/TITLE&gt;&quot;
        .WriteLine &quot;&lt;SCRIPT language=vbscript&gt;&quot;
        .WriteLine &quot;If IsObject(window) Then&quot;
        .WriteLine &quot;    window.attachevent &quot;&quot;onload&quot;&quot;, GetRef(&quot;&quot;Main&quot;&quot;)&quot;
        .WriteLine &quot;    document.attachevent &quot;&quot;onkeydown&quot;&quot;, GetRef(&quot;&quot;Document_onkeydown_event&quot;&quot;)&quot;
        .WriteLine &quot;End If&quot;
        .WriteLine &quot;Sub Main&quot;
        .WriteLine &quot;    CommandLine = Document.all.tags(&quot;&quot;APPLICATION&quot;&quot;)(0).CommandLine&quot;
        .WriteLine &quot;    Pos = InstrRev(CommandLine, &quot;&quot; &quot;&quot;)&quot;
        .WriteLine &quot;    CommandLine = Mid(CommandLine, Pos + 1, Len(CommandLine) - Pos)&quot;
        .WriteLine &quot;    If CommandLine = &quot;&quot;&quot;&quot; Then Exit Sub&quot;
        .WriteLine &quot;    Set WebBrowser = Document.GetElementById(&quot;&quot;WebBrowserTemplate&quot;&quot;)&quot;
        .WriteLine &quot;    WebBrowser.RegisterAsBrowser = True&quot;
        .WriteLine &quot;    WebBrowser.style.display = &quot;&quot;none&quot;&quot;&quot;
        .WriteLine &quot;    WebBrowser.RegisterAsDropTarget = False&quot;
        .WriteLine &quot;    WebBrowser.Visible = False&quot;
        .WriteLine &quot;    WebBrowser.PutProperty &quot;&quot;ID&quot;&quot;, Clng(CommandLine)&quot;
        .WriteLine &quot;End Sub&quot;
        .WriteLine &quot;Function Document_onkeydown_event&quot; &#039; блокировка F5 (refresh)
        .WriteLine &quot;    If window.event.keycode = 116 Then Document_onkeydown_event = false&quot;
        .WriteLine &quot;End Function&quot;
        .WriteLine &quot;&lt;/SCRIPT&gt;&quot;
        .WriteLine &quot;&lt;HTA:APPLICATION&quot;
        .WriteLine &quot;APPLICATIONNAME=&quot;&quot;&quot; &amp; Params.Item(&quot;APPLICATIONNAME&quot;) &amp; &quot;&quot;&quot;&quot;
        If Params.Exists(&quot;BORDER&quot;) Then
            .WriteLine &quot;BORDER=&quot;&quot;&quot; &amp; Params.Item(&quot;BORDER&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;BORDER=&quot;&quot;thick&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;BORDERSTYLE&quot;) Then
            .WriteLine &quot;BORDERSTYLE=&quot;&quot;&quot; &amp; Params.Item(&quot;BORDERSTYLE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;BORDERSTYLE=&quot;&quot;normal&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;CAPTION&quot;) Then
            .WriteLine &quot;CAPTION=&quot;&quot;&quot; &amp; Params.Item(&quot;CAPTION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;CAPTION=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;CONTEXTMENU&quot;) Then
            .WriteLine &quot;CONTEXTMENU=&quot;&quot;&quot; &amp; Params.Item(&quot;CONTEXTMENU&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;CONTEXTMENU=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;ICON&quot;) Then
            .WriteLine &quot;ICON=&quot;&quot;&quot; &amp; Params.Item(&quot;ICON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;ICON=&quot;&quot;System Application Icon&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;INNERBORDER&quot;) Then
            .WriteLine &quot;INNERBORDER=&quot;&quot;&quot; &amp; Params.Item(&quot;INNERBORDER&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;INNERBORDER=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;MAXIMIZEBUTTON&quot;) Then
            .WriteLine &quot;MAXIMIZEBUTTON=&quot;&quot;&quot; &amp; Params.Item(&quot;MAXIMIZEBUTTON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;MAXIMIZEBUTTON=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;MINIMIZEBUTTON&quot;) Then
            .WriteLine &quot;MINIMIZEBUTTON=&quot;&quot;&quot; &amp; Params.Item(&quot;MINIMIZEBUTTON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;MINIMIZEBUTTON=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;NAVIGABLE&quot;) Then
            .WriteLine &quot;NAVIGABLE=&quot;&quot;&quot; &amp; Params.Item(&quot;NAVIGABLE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;NAVIGABLE=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SCROLL&quot;) Then
            .WriteLine &quot;SCROLL=&quot;&quot;&quot; &amp; Params.Item(&quot;SCROLL&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SCROLL=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SCROLLFLAT&quot;) Then
            .WriteLine &quot;SCROLLFLAT=&quot;&quot;&quot; &amp; Params.Item(&quot;SCROLLFLAT&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SCROLLFLAT=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SELECTION&quot;) Then
            .WriteLine &quot;SELECTION=&quot;&quot;&quot; &amp; Params.Item(&quot;SELECTION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SELECTION=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SHOWINTASKBAR&quot;) Then
            .WriteLine &quot;SHOWINTASKBAR=&quot;&quot;&quot; &amp; Params.Item(&quot;SHOWINTASKBAR&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SHOWINTASKBAR=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SINGLEINSTANCE&quot;) Then
            .WriteLine &quot;SINGLEINSTANCE=&quot;&quot;&quot; &amp; Params.Item(&quot;SINGLEINSTANCE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SINGLEINSTANCE=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SYSMENU&quot;) Then
            .WriteLine &quot;SYSMENU=&quot;&quot;&quot; &amp; Params.Item(&quot;SYSMENU&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SYSMENU=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;VERSION&quot;) Then
            .WriteLine &quot;VERSION=&quot;&quot;&quot; &amp; Params.Item(&quot;VERSION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;VERSION=&quot;&quot;1.0&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;WINDOWSTATE&quot;) Then
            .WriteLine &quot;WINDOWSTATE=&quot;&quot;&quot; &amp; Params.Item(&quot;WINDOWSTATE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;WINDOWSTATE=&quot;&quot;normal&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;ID&quot;) Then
            .WriteLine &quot;ID=&quot;&quot;&quot; &amp; Params.Item(&quot;ID&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;ID=&quot;&quot;oHTA&quot;&quot;&quot;
        End If
        .WriteLine &quot;/&gt;&quot;
        .WriteLine &quot;&lt;/HEAD&gt;&lt;BODY&gt;&lt;/BODY&gt;&lt;/HTML&gt;&quot;
        .Close
    End With
    Randomize
    ID = Clng(Rnd * 100000)
    oWshShell.Run sHTAFileName &amp; &quot; &quot; &amp; ID
    &#039; поиск окна HTA
    Set oWnd = Nothing
    For N = 1 to 1000
        For Each oWindow in oWindows
            If oWindow.GetProperty(&quot;ID&quot;) = ID Then
                Set oWnd = oWindow
                Exit For
            End If
        Next
        If Not oWnd Is Nothing Then Exit For
    Next
    &#039; удаление файла HTA
    oFSO.DeleteFile sHTAFileName, True
    &#039; возвращаем ссылку на окно HTA
    Set GetHTADialog = oWnd
End Function
&#039;==================================================================================================
Sub HTA_OnUnload
    ExitDo = True
End Sub
Sub CloseHTA
    oHTA.document.parentWindow.close
End Sub
Sub OK_HTA
    val_1 = oHTA.document.parentWindow.input_1.value
    val_2 = oHTA.document.parentWindow.input_2.value
    oHTA.document.parentWindow.close
    ok = True
End Sub
&#039;==================================================================================================
Set oDict = CreateObject(&quot;Scripting.Dictionary&quot;)
oDict.Add &quot;CONTEXTMENU&quot;, &quot;no&quot;
oDict.Add &quot;INNERBORDER&quot;, &quot;no&quot;
oDict.Add &quot;SCROLL&quot;, &quot;no&quot;
oDict.Add &quot;BORDER&quot;, &quot;dialog&quot;
oDict.Add &quot;BORDERSTYLE&quot;, &quot;raised&quot;
oDict.Add &quot;MAXIMIZEBUTTON&quot;, &quot;no&quot;
oDict.Add &quot;MINIMIZEBUTTON&quot;, &quot;no&quot;
ok = False
Set oHTA = GetHTADialog(oDict)
If oHTA Is Nothing Then
    WScript.Echo &quot;Не удалось получить связь с окном HTA.&quot;
    WScript.Quit
End If
&#039; назначаем обработчик события выгрузки (закрытия) формы
oHTA.document.body.onunload = GetRef(&quot;HTA_OnUnload&quot;)
&#039; задаём размеры формы
oHTA.document.parentWindow.resizeTo 350, 250
&#039; получаем объет тела HTML-документа
Set oBody = oHTA.document.getElementsByTagName(&quot;body&quot;)(0)
&#039; задаём цвет фона
oBody.bgcolor = &quot;#E0E0E0&quot;
&#039; создаём текстовый элемент
oHTA.document.title = &quot;Ввод значений&quot;
Set oElem = oHTA.Document.createElement(&quot;p&quot;)
Set oText = oHTA.Document.createTextNode(&quot;Введите текстовое значение:&quot;)
oElem.appendChild oText
oBody.appendChild oElem
&#039; создаём текстовое поле ввода
Set oElem = oHTA.Document.createElement(&quot;input&quot;)
oElem.setAttribute &quot;width&quot;, &quot;320&quot;
oElem.setAttribute &quot;id&quot;, &quot;input_1&quot;
oBody.appendChild oElem
&#039; создаём текстовый элемент
Set oElem = oHTA.Document.createElement(&quot;p&quot;)
Set oText = oHTA.Document.createTextNode(&quot;Выберите файл:&quot;)
oElem.appendChild oText
oBody.appendChild oElem
&#039; создаём поле выбора файла
Set oElem = oHTA.Document.createElement(&quot;input&quot;)
oElem.setAttribute &quot;type&quot;, &quot;file&quot;
oElem.setAttribute &quot;width&quot;, &quot;320&quot;
oElem.setAttribute &quot;id&quot;, &quot;input_2&quot;
oBody.appendChild oElem
&#039; создаём разделители
Set oElem = oHTA.Document.createElement(&quot;br&quot;)
oBody.appendChild oElem
Set oElem = oHTA.Document.createElement(&quot;br&quot;)
oBody.appendChild oElem
&#039; создаём кнопку
Set oElem = oHTA.Document.createElement(&quot;button&quot;)
oElem.setAttribute &quot;value&quot;, &quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;О&#039;кей&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;
oElem.onclick = GetRef(&quot;OK_HTA&quot;)
oBody.appendChild oElem
&#039; создаём текстовый элемент
Set oText = oHTA.Document.createTextNode(&quot;             &quot;)
oBody.appendChild oText
&#039; создаём кнопку
Set oElem = oHTA.Document.createElement(&quot;button&quot;)
oElem.setAttribute &quot;value&quot;, &quot;Отменить&quot;
oElem.onclick = GetRef(&quot;CloseHTA&quot;)
oBody.appendChild oElem
Do &#039; ожидание закрытия окна HTA
    WScript.Sleep 100
Loop Until ExitDo
If ok Then
    WScript.Echo &quot;Введено текстовое значение: &quot; &amp; val_1
    WScript.Echo &quot;Выбран файл: &quot; &amp; val_2
Else
    WScript.Echo &quot;Окно HTA было закрыто кнопкой &quot;&quot;Отменить&quot;&quot;.&quot;
End If</code></pre></div><p>Другой вариант предыдущего примера. Делаем ту же диалоговую форму, но с помощью передачи строки HTML-кода:<br /></p><div class="codebox"><pre><code>Option Explicit
Dim ExitDo, oHTA, oDict, oBody, oElem, oText
Dim val_1, val_2, ok, strHTML
&#039;==================================================================================================
Function GetHTADialog(ByRef Params)
    Dim oFSO, oWshShell, oWindows, oTextStream, oWnd, oWindow
    Dim sHTAFileName, ID, N
    
    Set oFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
    Set oWshShell = CreateObject(&quot;WScript.Shell&quot;)
    Set oWindows = CreateObject(&quot;Shell.Application&quot;).Windows
    
    &#039; формирование имени будущего файла HTA
    sHTAFileName = oWshShell.ExpandEnvironmentStrings(&quot;%TEMP%&quot;) &amp; &quot;\&quot; &amp; oFSO.GetTempName() &amp; &quot;.hta&quot;
    &#039; создание файла HTA
    Set oTextStream = oFSO.CreateTextFile(sHTAFileName, True)
    &#039; заполнение файла HTA
    With oTextStream
        .WriteLine &quot;&lt;HTML&gt;&lt;HEAD&gt;&quot;
        .WriteLine &quot;&lt;OBJECT classid=&quot;&quot;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&quot;&quot;&quot;
        .WriteLine &quot;id=&quot;&quot;WebBrowserTemplate&quot;&quot; width=&quot;&quot;0&quot;&quot; height=&quot;&quot;0&quot;&quot;&gt;&quot;
        .WriteLine &quot;&lt;/OBJECT&gt;&lt;TITLE&gt;&lt;/TITLE&gt;&quot;
        .WriteLine &quot;&lt;SCRIPT language=vbscript&gt;&quot;
        .WriteLine &quot;If IsObject(window) Then&quot;
        .WriteLine &quot;    window.attachevent &quot;&quot;onload&quot;&quot;, GetRef(&quot;&quot;Main&quot;&quot;)&quot;
        .WriteLine &quot;    document.attachevent &quot;&quot;onkeydown&quot;&quot;, GetRef(&quot;&quot;Document_onkeydown_event&quot;&quot;)&quot;
        .WriteLine &quot;End If&quot;
        .WriteLine &quot;Sub Main&quot;
        .WriteLine &quot;    CommandLine = Document.all.tags(&quot;&quot;APPLICATION&quot;&quot;)(0).CommandLine&quot;
        .WriteLine &quot;    Pos = InstrRev(CommandLine, &quot;&quot; &quot;&quot;)&quot;
        .WriteLine &quot;    CommandLine = Mid(CommandLine, Pos + 1, Len(CommandLine) - Pos)&quot;
        .WriteLine &quot;    If CommandLine = &quot;&quot;&quot;&quot; Then Exit Sub&quot;
        .WriteLine &quot;    Set WebBrowser = Document.GetElementById(&quot;&quot;WebBrowserTemplate&quot;&quot;)&quot;
        .WriteLine &quot;    WebBrowser.RegisterAsBrowser = True&quot;
        .WriteLine &quot;    WebBrowser.style.display = &quot;&quot;none&quot;&quot;&quot;
        .WriteLine &quot;    WebBrowser.RegisterAsDropTarget = False&quot;
        .WriteLine &quot;    WebBrowser.Visible = False&quot;
        .WriteLine &quot;    WebBrowser.PutProperty &quot;&quot;ID&quot;&quot;, Clng(CommandLine)&quot;
        .WriteLine &quot;End Sub&quot;
        .WriteLine &quot;Function Document_onkeydown_event&quot; &#039; блокировка F5 (refresh)
        .WriteLine &quot;    If window.event.keycode = 116 Then Document_onkeydown_event = false&quot;
        .WriteLine &quot;End Function&quot;
        .WriteLine &quot;&lt;/SCRIPT&gt;&quot;
        .WriteLine &quot;&lt;HTA:APPLICATION&quot;
        .WriteLine &quot;APPLICATIONNAME=&quot;&quot;&quot; &amp; Params.Item(&quot;APPLICATIONNAME&quot;) &amp; &quot;&quot;&quot;&quot;
        If Params.Exists(&quot;BORDER&quot;) Then
            .WriteLine &quot;BORDER=&quot;&quot;&quot; &amp; Params.Item(&quot;BORDER&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;BORDER=&quot;&quot;thick&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;BORDERSTYLE&quot;) Then
            .WriteLine &quot;BORDERSTYLE=&quot;&quot;&quot; &amp; Params.Item(&quot;BORDERSTYLE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;BORDERSTYLE=&quot;&quot;normal&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;CAPTION&quot;) Then
            .WriteLine &quot;CAPTION=&quot;&quot;&quot; &amp; Params.Item(&quot;CAPTION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;CAPTION=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;CONTEXTMENU&quot;) Then
            .WriteLine &quot;CONTEXTMENU=&quot;&quot;&quot; &amp; Params.Item(&quot;CONTEXTMENU&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;CONTEXTMENU=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;ICON&quot;) Then
            .WriteLine &quot;ICON=&quot;&quot;&quot; &amp; Params.Item(&quot;ICON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;ICON=&quot;&quot;System Application Icon&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;INNERBORDER&quot;) Then
            .WriteLine &quot;INNERBORDER=&quot;&quot;&quot; &amp; Params.Item(&quot;INNERBORDER&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;INNERBORDER=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;MAXIMIZEBUTTON&quot;) Then
            .WriteLine &quot;MAXIMIZEBUTTON=&quot;&quot;&quot; &amp; Params.Item(&quot;MAXIMIZEBUTTON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;MAXIMIZEBUTTON=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;MINIMIZEBUTTON&quot;) Then
            .WriteLine &quot;MINIMIZEBUTTON=&quot;&quot;&quot; &amp; Params.Item(&quot;MINIMIZEBUTTON&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;MINIMIZEBUTTON=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;NAVIGABLE&quot;) Then
            .WriteLine &quot;NAVIGABLE=&quot;&quot;&quot; &amp; Params.Item(&quot;NAVIGABLE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;NAVIGABLE=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SCROLL&quot;) Then
            .WriteLine &quot;SCROLL=&quot;&quot;&quot; &amp; Params.Item(&quot;SCROLL&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SCROLL=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SCROLLFLAT&quot;) Then
            .WriteLine &quot;SCROLLFLAT=&quot;&quot;&quot; &amp; Params.Item(&quot;SCROLLFLAT&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SCROLLFLAT=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SELECTION&quot;) Then
            .WriteLine &quot;SELECTION=&quot;&quot;&quot; &amp; Params.Item(&quot;SELECTION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SELECTION=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SHOWINTASKBAR&quot;) Then
            .WriteLine &quot;SHOWINTASKBAR=&quot;&quot;&quot; &amp; Params.Item(&quot;SHOWINTASKBAR&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SHOWINTASKBAR=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SINGLEINSTANCE&quot;) Then
            .WriteLine &quot;SINGLEINSTANCE=&quot;&quot;&quot; &amp; Params.Item(&quot;SINGLEINSTANCE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SINGLEINSTANCE=&quot;&quot;no&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;SYSMENU&quot;) Then
            .WriteLine &quot;SYSMENU=&quot;&quot;&quot; &amp; Params.Item(&quot;SYSMENU&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;SYSMENU=&quot;&quot;yes&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;VERSION&quot;) Then
            .WriteLine &quot;VERSION=&quot;&quot;&quot; &amp; Params.Item(&quot;VERSION&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;VERSION=&quot;&quot;1.0&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;WINDOWSTATE&quot;) Then
            .WriteLine &quot;WINDOWSTATE=&quot;&quot;&quot; &amp; Params.Item(&quot;WINDOWSTATE&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;WINDOWSTATE=&quot;&quot;normal&quot;&quot;&quot;
        End If
        If Params.Exists(&quot;ID&quot;) Then
            .WriteLine &quot;ID=&quot;&quot;&quot; &amp; Params.Item(&quot;ID&quot;) &amp; &quot;&quot;&quot;&quot;
        Else
            .WriteLine &quot;ID=&quot;&quot;oHTA&quot;&quot;&quot;
        End If
        .WriteLine &quot;/&gt;&quot;
        .WriteLine &quot;&lt;/HEAD&gt;&lt;BODY&gt;&lt;/BODY&gt;&lt;/HTML&gt;&quot;
        .Close
    End With
    Randomize
    ID = Clng(Rnd * 100000)
    oWshShell.Run sHTAFileName &amp; &quot; &quot; &amp; ID
    &#039; поиск окна HTA
    Set oWnd = Nothing
    For N = 1 to 1000
        For Each oWindow in oWindows
            If oWindow.GetProperty(&quot;ID&quot;) = ID Then
                Set oWnd = oWindow
                Exit For
            End If
        Next
        If Not oWnd Is Nothing Then Exit For
    Next
    &#039; удаление файла HTA
    oFSO.DeleteFile sHTAFileName, True
    &#039; возвращаем ссылку на окно HTA
    Set GetHTADialog = oWnd
End Function
&#039;==================================================================================================
Sub HTA_OnUnload
    ExitDo = True
End Sub
Sub CloseHTA
    oHTA.document.parentWindow.close
End Sub
Sub OK_HTA
    val_1 = oHTA.document.parentWindow.input_1.value
    val_2 = oHTA.document.parentWindow.input_2.value
    oHTA.document.parentWindow.close
    ok = True
End Sub
&#039;==================================================================================================
Set oDict = CreateObject(&quot;Scripting.Dictionary&quot;)
oDict.Add &quot;CONTEXTMENU&quot;, &quot;no&quot;
oDict.Add &quot;INNERBORDER&quot;, &quot;no&quot;
oDict.Add &quot;SCROLL&quot;, &quot;no&quot;
oDict.Add &quot;BORDER&quot;, &quot;dialog&quot;
oDict.Add &quot;BORDERSTYLE&quot;, &quot;raised&quot;
oDict.Add &quot;MAXIMIZEBUTTON&quot;, &quot;no&quot;
oDict.Add &quot;MINIMIZEBUTTON&quot;, &quot;no&quot;
ok = False
Set oHTA = GetHTADialog(oDict)
If oHTA Is Nothing Then
    WScript.Echo &quot;Не удалось получить связь с окном HTA.&quot;
    WScript.Quit
End If
&#039; назначаем обработчик события выгрузки (закрытия) формы
oHTA.document.body.onunload = GetRef(&quot;HTA_OnUnload&quot;)
&#039; задаём размеры формы
oHTA.document.parentWindow.resizeTo 350, 250
&#039; получаем объет тела HTML-документа
Set oBody = oHTA.document.getElementsByTagName(&quot;body&quot;)(0)
&#039; задаём цвет фона
oBody.bgcolor = &quot;#E0E0E0&quot;
&#039; формируем строку HTML-кода
strHTML = &quot;&quot;
strHTML = strHTML &amp; &quot;&lt;P&gt;Введите текстовое значение:&lt;/P&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;INPUT id=input_1 size=50&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;P&gt;Выберите файл:&lt;/P&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;INPUT id=input_2 type=file size=37&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;BR&gt;&lt;BR&gt;&quot;
strHTML = strHTML &amp; &quot;&lt;BUTTON id=bOK&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;О&#039;кей&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/BUTTON&gt;&quot;
strHTML = strHTML &amp; &quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;
strHTML = strHTML &amp; &quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;
strHTML = strHTML &amp; &quot;&lt;BUTTON id=bCancel&gt;Отменить&lt;/BUTTON&gt;&quot;
&#039; записываем HTML-код в тело документа
oBody.innerHTML = strHTML
&#039; назначение событий кнопкам
oHTA.document.parentWindow.bOK.onclick = GetRef(&quot;OK_HTA&quot;)
oHTA.document.parentWindow.bCancel.onclick = GetRef(&quot;CloseHTA&quot;)
Do &#039; ожидание закрытия окна HTA
    WScript.Sleep 100
Loop Until ExitDo
If ok Then
    WScript.Echo &quot;Введено текстовое значение: &quot; &amp; val_1
    WScript.Echo &quot;Выбран файл: &quot; &amp; val_2
Else
    WScript.Echo &quot;Окно HTA было закрыто кнопкой &quot;&quot;Отменить&quot;&quot;.&quot;
End If</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-07-09T19:31:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=12378#p12378</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: конструирование и выдача диалогов с помощью HTA]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=12286#p12286" />
			<content type="html"><![CDATA[<p>Улучшенный вариант предыдущего.<br />1) В панели задач больше не появляется пустой заголовок. Создание объекта WebBrowser сделано через Document.write.<br />2) Оптимизирована работа с коллекцией ShellApplication.Windows.<br />3) Заблокировано нажатие F5 на форме HTA, приводящее к обновлению формы (обрабатывается событие Document.onkeydown).<br /><strong>start.vbs</strong><br /></p><div class="codebox"><pre><code>Option Explicit

Dim WebBrowser,Window,Document,ExitDo

Set WebBrowser = Run(&quot;form.hta&quot;)

Set Document = WebBrowser.Document
Set Window = Document.ParentWindow
Document.title = &quot;Form1&quot;
Document.body.onunload = GetRef(&quot;window_onunload&quot;)
Window.CommandButton1.onclick=GetRef(&quot;GetVars&quot;)

Sub GetVars
    MsgBox Window.InputBox1.value &amp; vbCrlf &amp; Window.InputBox2.value
    window.close
End Sub

Sub Window_onunload
    ExitDo = True
End Sub

&#039;// Цикл ожидания события
Do
    WScript.Sleep 100
Loop Until ExitDo


&#039;// Функция запуска HTA
Function Run(filename)
    Set Run = Nothing
        
    Dim WshShell
    Set WshShell = CreateObject(&quot;Wscript.Shell&quot;)
    
    Dim ID
    
    Randomize
    &#039;// Создаём уникальный ID и передаём в 
    ID = Clng(Rnd * 100000)
    
    WshShell.Run filename &amp; &quot; &quot; &amp; ID
    Dim Windows,Counter
    Set Windows = CreateObject(&quot;Shell.Application&quot;).Windows

    For Counter = 1 to 1000
        For Each Window in Windows
            if Window.GetProperty(&quot;ID&quot;) = ID Then
                Set Run = Window
                Exit Function
            End if
        Next
    Next
    Err.Raise vbObjectError + 1,&quot;Run&quot;,&quot;Не удалось получить связь с окном HTA&quot;
End Function</code></pre></div><p><strong>connector.vbs</strong><br /></p><div class="codebox"><pre><code>if IsObject(Window) Then
    Document.write &quot;&lt;OBJECT id=&quot;&quot;WebBrowser&quot;&quot; classid=&quot;&quot;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&quot;&quot;&gt;&lt;PARAM name=&quot;&quot;RegisterAsBrowser&quot;&quot; value=1&gt;&lt;/OBJECT&gt;&quot;
    Document.attachevent &quot;onkeydown&quot;,GetRef(&quot;Document_onkeydown_event&quot;)
    window.attachevent &quot;onload&quot;,GetRef(&quot;onload_event&quot;)
End if

Sub onload_event
    CommandLine = Document.all.tags(&quot;APPLICATION&quot;)(0).CommandLine
    Pos = InstrRev(CommandLine,&quot; &quot;)
    CommandLine = mid(CommandLine,Pos + 1,Len(CommandLine)-Pos)
    if CommandLine = &quot;&quot; Then Exit Sub
    WebBrowser.RegisterAsBrowser = True
    WebBrowser.style.display = &quot;none&quot;
    WebBrowser.RegisterAsDropTarget = False
    WebBrowser.Visible = False
    WebBrowser.PutProperty &quot;ID&quot;,Clng(CommandLine)
End Sub

Function Document_onkeydown_event
    if window.event.keycode = 116 Then Document_onkeydown_event = false
End Function</code></pre></div><p><strong>form.hta</strong><br /></p><div class="codebox"><pre><code>&lt;!- Скрипт для создания соединения с VBS -!&gt;
&lt;SCRIPT language=vbscript src=&quot;connector.vbs&quot;&gt;&lt;/SCRIPT&gt;
&lt;!- Скрипт для создания соединения с VBS -!&gt;

&lt;SCRIPT language=vbscript&gt;
Window.ResizeTo 400,200
&lt;/SCRIPT&gt;

&lt;HTA:APPLICATION
ID=&quot;APPLICATION&quot;
APPLICATIONNAME=&quot;Application&quot;
BORDER=&quot;dialog&quot;
BORDERSTYLE=&quot;normal&quot;
CAPTION=&quot;yes&quot;
ICON=&quot;&quot;
MAXIMIZEBUTTON=&quot;no&quot;
MINIMIZEBUTTON=&quot;no&quot;
SHOWINTASKBAR=&quot;yes&quot;
SINGLEINSTANCE=&quot;no&quot;
SYSMENU=&quot;yes&quot;
VERSION=&quot;1.0&quot;
WINDOWSTATE=&quot;normal&quot; 
INNERBORDER=&quot;no&quot;
SCROLL=&quot;no&quot;
CONTEXTMENU=&quot;yes&quot;
/&gt;

&lt;STYLE&gt;
*.*
{
FONT-FAMILY:Verdana;
FONT-SIZE:11;
}
&lt;/STYLE&gt;

&lt;BODY bgcolor=&quot;#D4D0C8&quot;&gt;
    &lt;TABLE width=100% height=100%&gt;
        &lt;TR&gt;&lt;TD&gt;Param1&lt;/TD&gt;&lt;TD&gt;&lt;INPUT width=100% id=&quot;inputBox1&quot;&gt;&lt;/TD&gt;&lt;/TR&gt;
        &lt;TR&gt;&lt;TD&gt;Param2&lt;/TD&gt;&lt;TD&gt;&lt;INPUT width=100% id=&quot;inputBox2&quot;&gt;&lt;/TD&gt;&lt;/TR&gt;
        &lt;TR&gt;&lt;TD colspan=2&gt;&lt;INPUT type=&quot;button&quot; style=&quot;width:100%&quot; id=&quot;CommandButton1&quot; value=&quot;OK&quot;&gt;&lt;/TD&gt;&lt;/TR&gt;
    &lt;/TABLE&gt;
&lt;/BODY&gt;</code></pre></div><p>Автор примеров - <strong>Xameleon</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-07-07T12:10:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=12286#p12286</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: конструирование и выдача диалогов с помощью HTA]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=12215#p12215" />
			<content type="html"><![CDATA[<p>Порядок работы примера:<br />1) Запускается основной скрипт.<br />2) Процедура Run генерирует случайное число и запускает HTA файл, передавая это число параметром.<br />3) В HTA файле создаётся компонент WebBrowser, отсекает переданное число от хвоста commandline и выставляет WebBrowser-у свойство ID с этим числом.<br />4) Основной скрипт в это время ждёт появления WebBrowser-а с таким ID.<br /><strong>start.vbs</strong><br /></p><div class="codebox"><pre><code>Dim WebBrowser,Window,Document

Set WebBrowser = Run(&quot;form.hta&quot;)

Set Document = WebBrowser.Document
Set Window = Document.ParentWindow
Document.body.onunload = GetRef(&quot;window_onunload&quot;)
Window.CommandButton1.onclick=GetRef(&quot;GetVars&quot;)

Sub GetVars
    MsgBox Window.InputBox1.value &amp; vbCrlf &amp; Window.InputBox2.value
    window.close
End Sub

Sub Window_onunload
    ExitDo = True
End Sub

&#039;// Цикл ожидания события
Do
    WScript.Sleep 100
Loop Until ExitDo


&#039;// Функция запуска HTA
Function Run(filename)
    Set Run = Nothing
    
    
    Dim WshShell
    Set WshShell = CreateObject(&quot;Wscript.Shell&quot;)
    
    Dim ID
    
    Randomize
    &#039;// Создаём уникальный ID и передаём в 
    ID = Clng(Rnd * 100000)
    
    WshShell.Run filename &amp; &quot; &quot; &amp; ID

    Set ShellApplication = CreateObject(&quot;Shell.Application&quot;)

    For N=1 to 1000
        For Each Window in ShellApplication.Windows
            if Window.GetProperty(&quot;ID&quot;) = ID Then
                Set Run = Window
                Exit Function
            End if
        Next
    Next
    Err.Raise vbObjectError + 1,&quot;Run&quot;,&quot;Не удалось получить связь с окном HTA&quot;
End Function</code></pre></div><p><strong>connector.vbs</strong><br /></p><div class="codebox"><pre><code>if IsObject(window) Then window.attachevent &quot;onload&quot;,GetRef(&quot;Main&quot;)
Sub Main
    Dim CommandLine,Pos
    CommandLine = Document.all.tags(&quot;APPLICATION&quot;)(0).CommandLine
    Pos = InstrRev(CommandLine,&quot; &quot;)
    CommandLine = mid(CommandLine,Pos + 1,Len(CommandLine)-Pos)
    if CommandLine = &quot;&quot; Then Exit Sub
    Set WebBrowser = Document.createElement(&quot;OBJECT&quot;)
    WebBrowser.classid = &quot;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&quot;
    WebBrowser.RegisterAsBrowser = True
    Document.appendchild WebBrowser
    WebBrowser.PutProperty &quot;ID&quot;,Clng(CommandLine)
End Sub</code></pre></div><p><strong>form.hta</strong><br /></p><div class="codebox"><pre><code>&lt;!--Скрипт для создания соединения с VBS //--!&gt;
&lt;SCRIPT language=vbscript src=&quot;connector.vbs&quot;&gt;&lt;/SCRIPT&gt;
&lt;!--Скрипт для создания соединения с VBS //--!&gt;

&lt;SCRIPT language=vbscript&gt;
Window.ResizeTo 400,200
&lt;/SCRIPT&gt;

&lt;HTA:APPLICATION
ID=&quot;APPLICATION&quot;
APPLICATIONNAME=&quot;Application&quot;
BORDER=&quot;dialog&quot;
BORDERSTYLE=&quot;normal&quot;
CAPTION=&quot;yes&quot;
ICON=&quot;&quot;
MAXIMIZEBUTTON=&quot;no&quot;
MINIMIZEBUTTON=&quot;no&quot;
SHOWINTASKBAR=&quot;yes&quot;
SINGLEINSTANCE=&quot;no&quot;
SYSMENU=&quot;yes&quot;
VERSION=&quot;1.0&quot;
WINDOWSTATE=&quot;normal&quot; 
INNERBORDER=&quot;no&quot;
SCROLL=&quot;no&quot;
CONTEXTMENU=&quot;yes&quot;
/&gt;

&lt;STYLE&gt;
*.*
{
FONT-FAMILY:Verdana;
FONT-SIZE:11;
}
&lt;/STYLE&gt;

&lt;BODY&gt;
    &lt;TABLE width=100% height=100%&gt;
        &lt;TR&gt;&lt;TD&gt;Param1&lt;/TD&gt;&lt;TD&gt;&lt;INPUT width=100% id=&quot;inputBox1&quot;&gt;&lt;/TD&gt;&lt;/TR&gt;
        &lt;TR&gt;&lt;TD&gt;Param2&lt;/TD&gt;&lt;TD&gt;&lt;INPUT width=100% id=&quot;inputBox2&quot;&gt;&lt;/TD&gt;&lt;/TR&gt;
        &lt;TR&gt;&lt;TD colspan=2&gt;&lt;INPUT type=&quot;button&quot; style=&quot;width:100%&quot; id=&quot;CommandButton1&quot; value=&quot;OK&quot;&gt;&lt;/TD&gt;&lt;/TR&gt;
    &lt;/TABLE&gt;
&lt;/BODY&gt;</code></pre></div><p>Примечание: connector.vbs не обязательно должен находиться в отдельном файле, его можно вставить и в саму форму (в код HTA). Вынос этого скрипта имеет смысл, если HTA-форм много.<br />Автор примеров - <strong>Xameleon</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-07-06T09:44:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=12215#p12215</id>
		</entry>
</feed>
