<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=7956</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7956&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: Как создать окно ввода с заданным временем ожидания.».]]></description>
		<lastBuildDate>Wed, 08 Nov 2017 22:54:12 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=120959#p120959</link>
			<description><![CDATA[<p>Для облегчения создания окна и обработки событий элементов, добавлены классы-обертки:<br /></p><ul><li><p><strong>clsSmallWrapperForm</strong>, включающий все основные параметры и методы, необходимые для создания окна HTA, установки его размеров, свойств и аттрибутов.</p></li><li><p><strong>clsSmallWrapperHandlers</strong>, имитирующий в своих методах общепринятую структуру VB обработчиков, события элементов пробрасываются в методы этого класса.</p></li></ul><p>По сути - ничего нового, основная идея - дать возможность создания простого GUI для VBS WSH написанием минимального количества строк кода c применением предлагаемых оберток. Код создания формы и элементов управления, обработчиков их событий пишется в общепринятом VB стиле, пользователю не нужно заморачиваться с HTML и DOM. Ну только если самую малость - минимальные знания об элементах HTML, их главных аттрибутах и стилях все же нужны. Можно добавить в <strong>clsSmallWrapperForm</strong> обертки для определенного ряда типичных элементов управления и метод для их создания, это окончательно скрыло бы от глаз пользователя названия тэгов и аттрибутов.</p><div class="codebox"><pre><code>Option Explicit

&#039; Base64-кодированный фоновый рисунок
Const BGI = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWIAAAB2CAYAAADybJlDAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAUjSURBVHja7N05ztxGEIBRjqHciZ34Bn3/w9QNnPsE49QwtPwc9lLd9V4kAdKwyQE+Fjnb6/1+XwCs85tDACDEAEIMgBADCDEAQgwgxAAIMYAQAyDEAEIMgBADCDEAQgwgxACM980hgD28Xq/Td7Hd/PdxzHPri+FBiBPH9hPbBVqIQYh3D+/2YRZiEOIT47tVmIUYhLhCfFMHWYhBiKsFOF2UhRiEuHKAUwRZiEGIBXhxkIUYhFiAFwdZiEGIBXhxjIUYhDhLhCP5OocFWYhBiGeHLaxdiEGI54YsNljj0n0SYhDiEYGLhGtKG2MhBiHOFuCdXiDsEmMhhtoh7hW9SLKOLWMsxFA3xD3iVznA3Y6FEEPNED8NoAB3PC5CDPVCvDLCFT4gcvv4CDHUCvGTEFYKcMw8Vn48FOpYEeG28RQ87cRjIoYaE/GnMdxpCo7O2336eH9f1/WPEIMQr4jwyo8Zt4HbaqOOoRCDEGePcCzc9pQYCzGcHeJZER45ia6ewmP0MfViHZxrxwjHle9XltvoYyTEIMIZIvwkwDNvvfT6/0IMpInw0wn4SYTj4Xa63T4RYjANr4hwj1sQKybhIc+NEIMIz4xwr3vAvSI8eyo2EQNLAphhGo1Ej92EGESyW0AWhbD3fkaHbT86lkIMNc2KcO+3ox3500lCDPWm4ZkRXjnx31lDTDgeP3wcIYZaEZ712Bk+lBG7bFOIoZbYdBsz3g0SC/a/CTGw6lZAlok/xZqEGGrFsg163FW3AnqvY8lULMQg3pkj3JKsYyghhjrT8KhL66oRbr3WI8Qg5OUm0Gz7JMQgxhmDdcoJ4UvrEmKoF9AfPVbbdN+2n8qFGNg5fkfcGhFiIFP82mb72Ho8lhDD+dOrqdxEDCyc6mLAY54+lQsxkDrspvwBx06IQUDtj4kYGDA5xnf+Hpvv07GEGEzHd4LZO5qVXqALIQZ6xaxtuu602xNiYNV03A46FkIM7BuhpNPwVEIM50VvxddBjvqC+hKEGAQ9++PG6U+IEAOzp+M7wS7xHmghBnaajk3EgEA+nI4rT8NCDNy+hO4VQtPxL3xzCIAvTKWz3zOcYRr+a9ZaTcSA2wTf9/usDQkxcCfGMWk7pQgx1PGHUAoxsNafHUM7ajouGXkhBjKFc8RXbQoxUCLGgizEgCB33+60KwIhBgR5ceB9oAPYNWTHvLBnIoa9Js2el9UnRPmIfRViYNol+CZBnh53tyaAE+O/1ScAhRgQ5cWEGBgZwa9OlW3SeqLj2rsdF/eIQQxXif/9OSYdlx73lLuuVYhhL9kvs3sELiau9b9RXnbyEmIg6wln5kln6U84CTGcK/Ptibjx72ZHefpz4cU6YJfwx6Tt3NnPLicIIYY9L9vb5us/Icg/W8OtfRRiOH9KPfXL1mPiND706kCIgenhKRblX/JiHdS5vM/wpUGzPnq81Qt8Qgym1dNPWOmjLMRQayquHPq0URZiMBVXO3GYiIEtYnjy7Yxs+xZCDDXCOipAuwW7fXB8h0/y3r4GZDthZIrwz9bfeh0XIYYzIvfVKNyJx0kfBmmDjnuXbbk1AZzukwjHhG2FEINL/4xTZpUIm4hBjKfGdtXtjZZ4WyHEwOk+jfCSk4YQg6k402S5Y4Tb0+0IMTAyPpF0XWkiLMRgKj5lKn7yy8yx+pgIMYhxlel8dYRDiEGMT5uK23VAhIUYqDgFp4rwdV3X6/1+e0phA6/Xa7dJ9rT3NQ+7B/0vAAAA//8DAERsQ7O6796eAAAAAElFTkSuQmCC&quot;

Dim aItems, i

&#039; Массив, содержащий пункты для списка
aItems = Array(&quot;Пункт A&quot;, &quot;Пункт B&quot;, &quot;Пункт C&quot;, &quot;Пункт D&quot;, &quot;Пункт E&quot;)

&#039; Создание обертки HTA окна
With New clsSmallWrapperForm
	&#039; Настройка окна
	.ShowInTaskbar = &quot;yes&quot;
	.Title = &quot;Тест формы HTA&quot;
	.BackgroundImage = BGI
	.Width = 354
	.Height = 118
	.Visible = False
	&#039; Создание окна
	.Create
	&#039; Назанчение обработчиков
	Set .Handlers = New clsSmallWrapperHandlers
	&#039; Добавление списка
	With .AddElement(&quot;ListBox1&quot;, &quot;SELECT&quot;)
		.size = 6
		.multiple = True
		.style.left = &quot;15px&quot;
		.style.top = &quot;10px&quot;
		.style.width = &quot;250px&quot;
	End With
	.AppendTo &quot;Form&quot;
	&#039; Добавление пунктов в список
	For i = 0 To UBound(aItems)
		.AddElement , &quot;OPTION&quot;
		.AddText aItems(i)
		.AppendTo &quot;ListBox1&quot;
	Next
	&#039; Добавление кнопки OK
	With .AddElement(&quot;Button1&quot;, &quot;INPUT&quot;)
		.type = &quot;button&quot;
		.value = &quot;OK&quot;
		.style.left = &quot;285px&quot;
		.style.top = &quot;10px&quot;
		.style.width = &quot;50px&quot;
		.style.height = &quot;20px&quot;
	End With
	.AppendTo &quot;Form&quot;
	&#039; Добавление кнопки Отмена
	With .AddElement(&quot;Button2&quot;, &quot;INPUT&quot;)
		.type = &quot;button&quot;
		.value = &quot;Отмена&quot;
		.style.left = &quot;285px&quot;
		.style.top = &quot;40px&quot;
		.style.width = &quot;50px&quot;
		.style.height = &quot;20px&quot;
	End With
	.AppendTo &quot;Form&quot;
	&#039; Добавление надписи
	With .AddElement(&quot;Label1&quot;, &quot;SPAN&quot;)
		.style.left = &quot;15px&quot;
		.style.top = &quot;98px&quot;
		.style.width = &quot;350px&quot;
	End With
	.AddText &quot;Выберите пункты&quot;
	.AppendTo &quot;Form&quot;
	&#039; Показать окно
	.Visible = True
	&#039; Ожидание закрытия окна или выбора пунктов пользователем
	Do While .ChkDoc And Not .Handlers.Selected
		WScript.Sleep 100
	Loop
	&#039; Получение результатов из массива .Handlers.SelectedItems
	If .Handlers.Selected Then
		MsgBox &quot;Выбрано &quot; &amp; (UBound(.Handlers.SelectedItems) + 1) &amp; &quot; пункт(ов)&quot; &amp; vbCrLf &amp; Join(.Handlers.SelectedItems, vbCrLf)
	Else
		MsgBox &quot;Окно закрыто&quot;
	End If
	&#039; Остальная часть кода ...
	
End With

Class clsSmallWrapperHandlers
	
	&#039; Класс обработчиков реализует обработку событий
	&#039; Отредактируйте код для обеспечения требуемого поведения
	&#039; Сохраняйте общепринятые для VB имена обработчиков: Public Sub &lt;ID элемента&gt;_&lt;Название события&gt;()
	
	Public oswForm &#039; обязательное свойство
	
	Public Selected
	Public SelectedItems
	
	Private Sub Class_Initialize()
		Selected = False
		SelectedItems = Array()
	End Sub
	
	Public Sub ListBox1_Click()
		Dim vItem
		With CreateObject(&quot;Scripting.Dictionary&quot;)
			For Each vItem In oswForm.Window.ListBox1.childNodes
				If vItem.Selected Then .Item(vItem.innerText) = &quot;&quot;
			Next
			SelectedItems = .Keys()
		End With
		oswForm.Window.Label1.style.color = &quot;buttontext&quot;
		oswForm.Window.Label1.innerText = (UBound(SelectedItems) + 1) &amp; &quot; выбрано&quot;
	End Sub
	
	Public Sub Button1_Click()
		Selected = UBound(SelectedItems) &gt;= 0
		If Selected Then
			oswForm.Window.close
		Else
			oswForm.Window.Label1.style.color = &quot;darkred&quot;
			oswForm.Window.Label1.innerText = &quot;Выберите хотя бы 1 пункт&quot;
		End If
	End Sub
	
	Public Sub Button2_Click()
		oswForm.Window.close
	End Sub
	
End Class

Class clsSmallWrapperForm
	
	&#039; Служебный класс для функциональности HTA окна
	&#039; Не подлежит изменению
	
	&#039; Аттрибуты тэга HTA
	Public Border &#039; thick | dialog | none | thin
	Public BorderStyle &#039; normal | complex | raised | static | sunken
	Public Caption &#039; yes | no
	Public ContextMenu &#039; yes | no
	Public Icon &#039; path
	Public InnerBorder &#039; yes | no
	Public MinimizeButton &#039; yes | no
	Public MaximizeButton &#039; yes | no
	Public Scroll &#039; yes | no | auto
	Public Selection &#039; yes | no
	Public ShowInTaskbar &#039; yes | no
	Public SysMenu &#039; yes | no
	Public WindowState &#039; normal | minimize | maximize
	
	&#039; Свойства формы
	Public Title
	Public BackgroundImage
	Public Width
	Public Height
	Public Left
	Public Top
	Public Self
	
	Dim oWnd
	Dim oDoc
	Dim bVisible
	Dim oswHandlers
	Dim oLastCreated
	
	Private Sub Class_Initialize()
		Set Self = Me
		Set oswHandlers = Nothing
		Border = &quot;thin&quot;
		ContextMenu = &quot;no&quot;
		InnerBorder = &quot;no&quot;
		MaximizeButton = &quot;no&quot;
		Scroll = &quot;no&quot;
		Selection = &quot;no&quot;
	End Sub
	
	Private Sub Class_Terminate()
		On Error Resume Next
		oWnd.Close
	End Sub
	
	Public Sub Create()
		Dim sName, sAttrs, sSignature, oShellWnd, oProc
		sAttrs = &quot;&quot;
		For Each sName In Array(&quot;Border&quot;, &quot;Caption&quot;, &quot;ContextMenu&quot;, &quot;MaximizeButton&quot;, &quot;Scroll&quot;, &quot;Selection&quot;, &quot;ShowInTaskbar&quot;, &quot;Icon&quot;, &quot;InnerBorder&quot;, &quot;BorderStyle&quot;, &quot;SysMenu&quot;, &quot;WindowState&quot;, &quot;MinimizeButton&quot;)
			If Eval(sName) &lt;&gt; &quot;&quot; Then sAttrs = sAttrs &amp; &quot; &quot; &amp; sName &amp; &quot;=&quot; &amp; Eval(sName)
		Next
		If Len(sAttrs) &gt;= 240 Then Err.Raise 450, &quot;&lt;HTA:APPLICATION&quot; &amp; sAttrs &amp; &quot; /&gt;&quot;
		sSignature = Mid(Replace(CreateObject(&quot;Scriptlet.TypeLib&quot;).Guid, &quot;-&quot;, &quot;&quot;), 2, 16)
		Set oProc = CreateObject(&quot;WScript.Shell&quot;).Exec(&quot;mshta &quot;&quot;about:&lt;script&gt;moveTo(-32000,-32000);document.title=&#039;*&#039;&lt;/script&gt;&lt;hta:application&quot; &amp; sAttrs &amp; &quot; /&gt;&lt;object id=&#039;s&#039; classid=&#039;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&#039;&gt;&lt;param name=RegisterAsBrowser value=1&gt;&lt;/object&gt;&lt;script&gt;s.putProperty(&#039;&quot; &amp; sSignature &amp; &quot;&#039;,document.parentWindow);&lt;/script&gt;&quot;&quot;&quot;)
		Do
			If oProc.Status &gt; 0 Then Err.Raise 507, &quot;mshta.exe&quot;
			For Each oShellWnd In CreateObject(&quot;Shell.Application&quot;).Windows
				On Error Resume Next
				Set oWnd = oShellWnd.GetProperty(sSignature)
				If Err.Number = 0 Then
					On Error Goto 0
					With oWnd
						Set oDoc = .document
						With .document
							.open
							.close
							.title = Title
							.getElementsByTagName(&quot;head&quot;)(0).appendChild .createElement(&quot;style&quot;)
							.styleSheets(0).cssText = &quot;* {font:8pt tahoma;position:absolute;}&quot;
							.getElementsByTagName(&quot;body&quot;)(0).id = &quot;Form&quot;
						End With
						.Form.style.background = &quot;buttonface&quot;
						If BackgroundImage &lt;&gt; &quot;&quot; Then
							.Form.style.backgroundRepeat = &quot;no-repeat&quot;
							.Form.style.backgroundImage = &quot;url(&quot; &amp; BackgroundImage &amp; &quot;)&quot;
						End If
						If IsEmpty(Width) Then Width = .Form.offsetWidth
						If IsEmpty(Height) Then Height = .Form.offsetHeight
						.resizeTo .screen.availWidth, .screen.availHeight
						.resizeTo Width + .screen.availWidth - .Form.offsetWidth, Height + .screen.availHeight - .Form.offsetHeight
						If IsEmpty(Left) Then Left = CInt((.screen.availWidth - Width) / 2)
						If IsEmpty(Top) Then Top = CInt((.screen.availHeight - Height) / 2)
						bVisible = IsEmpty(bVisible) Or bVisible
						Visible = bVisible
						.execScript &quot;var smallWrapperThunks = (function(){&quot; &amp;_
							&quot;var thunks,elements={};return {&quot; &amp;_
								&quot;parseHandlers:function(h){&quot; &amp;_
									&quot;thunks=h;for(var key in thunks){var p=key.toLowerCase().split(&#039;_&#039;);if(p.length==2){elements[p[0]]=elements[p[0]]||{};elements[p[0]][p[1]]=key;}}},&quot; &amp;_
								&quot;forwardEvents:function(e){&quot; &amp;_
									&quot;if(elements[e.id.toLowerCase()]){for(var key in e){if(key.search(&#039;on&#039;)==0){var q=elements[e.id.toLowerCase()][key.slice(2)];if(q){eval(e.id+&#039;.&#039;+key+&#039;=function(){thunks.&#039;+q+&#039;()}&#039;)}}}}}}})()&quot;
						If Not oswHandlers Is Nothing Then
							.smallWrapperThunks.parseHandlers oswHandlers
							.smallWrapperThunks.forwardEvents .Form
						End If
					End With
					Exit Sub
				End If
				On Error Goto 0
			Next
			WScript.Sleep 100
		Loop
	End Sub
	
	Public Property Get Handlers()
		Set Handlers = oswHandlers
	End Property
	
	Public Property Set Handlers(oHandlers)
		Dim oElement
		If Not oswHandlers Is Nothing Then Set oswHandlers.oswForm = Nothing
		Set oswHandlers = oHandlers
		Set oswHandlers.oswForm = Me
		If ChkDoc Then
			oWnd.smallWrapperThunks.parseHandlers oswHandlers
			For Each oElement In oDoc.all
				If oElement.id &lt;&gt; &quot;&quot; Then oWnd.smallWrapperThunks.forwardEvents oElement
			Next
		End If
	End Property
	
	Public Sub ForwardEvents(oElement)
		If ChkDoc Then oWnd.smallWrapperThunks.forwardEvents oElement
	End Sub
	
	Public Function AddElement(sId, sTagName)
		Set oLastCreated = oDoc.createElement(sTagName)
		If VarType(sId) &lt;&gt; vbError Then
			If Not(IsNull(sId) Or IsEmpty(sId)) Then oLastCreated.id = sId
		End If
		oLastCreated.style.position = &quot;absolute&quot;
		Set AddElement = oLastCreated
	End Function
	
	Public Function AppendTo(vNode)
		If Not IsObject(vNode) Then Set vNode = oDoc.getElementById(vNode)
		vNode.appendChild oLastCreated
		ForwardEvents oLastCreated
		Set AppendTo = oLastCreated
	End Function
	
	Public Function AddText(sText)
		oLastCreated.appendChild oDoc.createTextNode(sText)
	End Function
	
	Public Property Get Window()
		Set Window = oWnd
	End Property
	
	Public Property Get Document()
		Set Document = oDoc
	End Property
	
	Public Property Get Visible()
		Visible = bVisible
	End Property
	
	Public Property Let Visible(bWindowVisible)
		bVisible = bWindowVisible
		If ChkDoc Then
			If bVisible Then
				oWnd.moveTo Left, Top
			Else
				oWnd.moveTo -32000, -32000
			End If
		End If
	End Property
	
	Public Function ChkDoc()
		On Error Resume Next
		ChkDoc = CBool(TypeName(oDoc) = &quot;HTMLDocument&quot;)
	End Function
	
End Class</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (omegastripes)]]></author>
			<pubDate>Wed, 08 Nov 2017 22:54:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=120959#p120959</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=75388#p75388</link>
			<description><![CDATA[<p><strong>2Xameleon</strong><br />Отличный образчик (а в частности хак с 8856F961-340A-11D0-A96B-00C04FD705A2)! Визуальный аппеаранс окна лучше по сравнению с вышеупомянутым способом.</p><p>Думаю вполне актуальным будет класс, использующий данную технику создания окон, и позволяющий &quot;обернуть&quot; в удобные методы создание пользовательского окна, размещение на нем базовых контролов и доступ к их свойствам и событиям. По крайней мере для тех, кто решает определенные задачи в среде WSH c административными ограничениями - решение получится портабельным, без необходимости регистрации в системе компонентов.<br />PS: Кстати, вопрос о создании пользовательских окон можно найти на любом форуме, затрагивающем WSH.</p>]]></description>
			<author><![CDATA[null@example.com (omegastripes)]]></author>
			<pubDate>Sun, 15 Sep 2013 15:18:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=75388#p75388</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=75356#p75356</link>
			<description><![CDATA[<p>Решил ради интереса тоже попробовать свои силы. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>
Option Explicit

Dim returnValue
returnValue = createInput(&quot;У вас есть 10 секунд на ввод нужного значения или сообщение закроется само собой. B)&quot;,&quot;Заголовок сообщения&quot;,10000)

MsgBox returnValue,vbInformation,&quot;Введённое значение&quot;

&#039;Функция создания окна похожего на inputBox с таймаутом в миллисекундах
Function createInput(prompt,title,timeout)
    Dim content, wnd, status
    &#039;Задаём HTML код окна
    content =  &quot;&lt;html&gt;&quot; &amp;_
                    &quot;&lt;head&gt;&quot; &amp;_
                        &quot;&lt;style&gt;&quot; &amp;_
                            &quot;*{font-family:Tahoma;font-size:13px;}&quot; &amp;_
                            &quot;button,input,span{position:absolute;}&quot; &amp;_
                            &quot;button{width:80px;}&quot; &amp;_
                            &quot;#lblPrompt{left:10px;top:10px;overflow:hidden;width:250px;height:80px;}&quot; &amp;_
                            &quot;#btnOk{left:265px;top:10px;}&quot; &amp;_
                            &quot;#btnCancel{left:265px;top:40px;}&quot; &amp;_
                            &quot;#inpText{top:98px;width:330px;}&quot; &amp;_
                        &quot;&lt;/style&gt;&quot; &amp;_
                    &quot;&lt;/head&gt;&quot; &amp;_
                    &quot;&lt;body bgcolor=#F0F0F0&gt;&quot; &amp;_
                        &quot;&lt;span id=&#039;lblPrompt&#039;&gt;&lt;/span&gt;&quot; &amp;_
                        &quot;&lt;button id=&#039;btnOk&#039; onclick=&#039;window.returnValue=inpText.value;window.status=1&#039;&gt;OK&lt;/button&gt;&quot; &amp;_
                        &quot;&lt;button id=&#039;btnCancel&#039; onclick=&#039;window.status=1;&#039;&gt;Отмена&lt;/button&gt;&quot; &amp;_
                        &quot;&lt;input id=&#039;inpText&#039;&gt;&quot; &amp;_
                    &quot;&lt;/body&gt;&quot; &amp;_
                &quot;&lt;/html&gt;&quot;

    &#039;Создаём нужное нам окошко (без скролов, без меню и т.п)
    Set wnd = createWindow(content,&quot;border=dialog &quot; &amp;_
                                &quot;minimizeButton=no &quot; &amp;_
                                &quot;maximizeButton=no &quot; &amp;_
                                &quot;scroll=no &quot; &amp;_
                                &quot;showIntaskbar=yes &quot; &amp;_
                                &quot;contextMenu=no &quot; &amp;_
                                &quot;selection=no &quot; &amp;_
                                &quot;innerBorder=no&quot;)

    
    &#039;Устанавливаем таймер таймаута
    wnd.execScript &quot;window.setTimeout(&#039;window.close()&#039;,&quot; &amp; Clng(timeout) &amp; &quot;);window.returnValue=&#039;&#039;&quot;

    &#039;Заполняем нужные нам объекты текстом
    With wnd
        &#039;По умолчанию выставляем статус 0 (потом будем проверять его в цикле)
        .status = 0
        &#039;Ставим фокус на кнопку OK
        .btnOk.focus
        &#039;Задаём заголовок окна
        .document.title = title
        &#039;Заполняем поле запроса в окне
        .lblPrompt.innerText = prompt
        &#039;Двигаем окошко на нужные нам координаты (при желании можно отцентрировать по wnd.screenWidth / wnd.screenHeight)
        .moveTo 100, 100
        &#039;Задаём ширину и высоту окошка
        .resizeTo 370, 170
    End With
    
    
    Do
        &#039;Проверяем статус окна
        On Error Resume Next
        status = wnd.status
        &#039;Если окошко закрыли кнопкой [X], то произойдёт ошибка обращения к нему
        If Err.number &lt;&gt; 0 Then 
            On Error Goto 0
            &#039;В этом случае выходим из цикла
            Exit Do
        Else
            &#039;Если же статус равен &quot;1&quot;, то возвращаем из функции заполненное свойство и выходим из цикла
            if status = 1 Then 
                createInput = wnd.returnValue
                Exit Do
            End if
        End if
        WScript.Sleep 100
    Loop
    &#039;По концу функции закрываем окно
    wnd.close
End Function

&#039;Функция создания HTA окна
Function createWindow(content,features)
    Dim wid, we, sw, id, i, doc
    Randomize:wid = Clng(Rnd*100000)
    Set we = CreateObject(&quot;WScript.Shell&quot;).Exec(&quot;mshta about:&quot;&quot;&quot; &amp; _
    &quot;&lt;script&gt;moveTo(-1000,-1000);resizeTo(0,0);&lt;/script&gt;&quot; &amp; _
    &quot;&lt;hta:application id=app &quot; &amp; features &amp; &quot; /&gt;&quot; &amp; _
    &quot;&lt;object id=&quot; &amp; wid &amp; &quot; style=&#039;display:none&#039; classid=&#039;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&#039;&gt;&quot; &amp; _
    &quot;&lt;param name=RegisterAsBrowser value=1&gt;&quot; &amp; _
    &quot;&lt;/object&gt;&quot;&quot;&quot;)
    With CreateObject(&quot;Shell.Application&quot;)
        For i=1 to 1000
            For Each sw in .Windows
                On Error Resume Next
                id = Clng(sw.id)
                On Error Goto 0
                if id = wid Then
                    Set doc = sw.container
                    doc.write CStr(content)
                    Set createWindow = doc.parentWindow
                    Exit Function
                End if
            Next
        Next
    End With
    we.Terminate
    Err.Raise vbObjectError,&quot;createWindow&quot;,&quot;Can&#039;t connect with created window !&quot;
End Function
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Thu, 12 Sep 2013 13:13:27 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=75356#p75356</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=75316#p75316</link>
			<description><![CDATA[<div class="quotebox"><cite>omegastripes пишет:</cite><blockquote><div class="quotebox"><cite>Lucky пишет:</cite><blockquote><div class="codebox"><pre><code>
intext=inputbox(&quot;&quot;)
</code></pre></div><p>может есть другие способы осуществить подобный ввод данных с таймером</p></blockquote></div><p>Вот здесь <a href="http://gallery.technet.microsoft.com/scriptcenter/An-HTA-based-VBScript-36122f57">http://gallery.technet.microsoft.com/sc … t-36122f57</a> есть нечто подобное. Если допилить, вполне сгодится для решения вопроса.</p></blockquote></div><p>OFFTOP: Дожили! ))) Наш c JSman-ом код уже на микрософте публикуют ! )))))</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 10 Sep 2013 10:35:04 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=75316#p75316</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=75157#p75157</link>
			<description><![CDATA[<div class="quotebox"><cite>Lucky пишет:</cite><blockquote><div class="codebox"><pre><code>
intext=inputbox(&quot;&quot;)
</code></pre></div><p>может есть другие способы осуществить подобный ввод данных с таймером</p></blockquote></div><p>Вот здесь <a href="http://gallery.technet.microsoft.com/scriptcenter/An-HTA-based-VBScript-36122f57">http://gallery.technet.microsoft.com/sc … t-36122f57</a> есть нечто подобное. Если допилить, вполне сгодится для решения вопроса.</p>]]></description>
			<author><![CDATA[null@example.com (omegastripes)]]></author>
			<pubDate>Sun, 01 Sep 2013 18:32:51 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=75157#p75157</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68667#p68667</link>
			<description><![CDATA[<p>Наверно. <strong>smaharbA</strong>, спасибо! <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /> будем пробовать что проще...</p><p>Кстати, хороша и идея<br /></p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Вместо отдельного файла ... использовать задание в WSF-файле.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Fri, 18 Jan 2013 18:54:09 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68667#p68667</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68665#p68665</link>
			<description><![CDATA[<p>скорее всего само выполнение внутри объекта это уже &quot;багофича&quot; (</p><p>по тому и выше был предложен вариант &quot;самочтения&quot; и выполнения нужного тела</p><p>наверное всеж таки проще исполюзовать showModalDialog от хтмл, как нибудь встроив его в скрипт</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Fri, 18 Jan 2013 18:30:16 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68665#p68665</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68664#p68664</link>
			<description><![CDATA[<div class="codebox"><pre><code>set s=CreateObject(&quot;MSScriptControl.ScriptControl&quot;)
s.language=&quot;vbscript&quot;
s.AddObject &quot;WScript&quot;,WScript
do while not [флаг]
s.executestatement(&quot;WScript.Timeout=3 : x=inputbox(&quot;&quot;&quot;&quot;) : [флаг]=true&quot;)
[флаг]=s.eval(&quot;[флаг]&quot;)
x=s.eval(&quot;x&quot;)
loop
WScript.Timeout=0
msgbox x
msgbox 123</code></pre></div><p>а то, что после таймаута не выполняется, наверное так и должно быть (</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Fri, 18 Jan 2013 18:29:29 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68664#p68664</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68663#p68663</link>
			<description><![CDATA[<p>А, <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />понял. Ну а вы сами пробовали запускать его? Дело в том, что после истечения <em>timeout</em>, если не ответили на окно запроса <em>inputbox</em>, окошко закрывается и скрипт довыполняет только то, что внутри <em>s.executestatement(&quot;&quot;)</em>, и далее скрипт закрывается, не доходя уже даже до <em>loop</em> или что бы там ни было. <span class="bbu">Цель</span>ю моего введенного цикла была то, что я хотел как-нибудь <span class="bbu">вытащить фокус выполнения сценария</span> из <em>s.executestatement(&quot;&quot;)</em> с помощью <em>Exit do</em>, а не наличие самого цикла.</p><p>А еще, если всё же успеть ввести текст и нажать ОК (ну или просто Отмену) до истечения <em>timeout</em>, скрипт продолжает выполняться нормально, доходит до <em>msgbox</em>, но вот введённый текст опять таки не выходит за пределы <em>s.executestatement(&quot;&quot;)</em>, т.е. выходит пустое окно <em>msgbox</em>.</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Fri, 18 Jan 2013 18:26:14 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68663#p68663</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68660#p68660</link>
			<description><![CDATA[<p>это просто пример применения имен переменных в национальных символах ))<br />могло быть и flag=true</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Fri, 18 Jan 2013 17:30:33 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68660#p68660</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68658#p68658</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>[флаг]=true</p></blockquote></div><p>Не силён. На примере.</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Fri, 18 Jan 2013 17:25:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68658#p68658</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68657#p68657</link>
			<description><![CDATA[<p>по поводу &quot;не создается&quot;<br />\Windows\SysWOW64\wscript.exe c:\d.vbs</p><p>по поводу выхода из цикла - наверное только флаг типа</p><div class="codebox"><pre><code>set s=CreateObject(&quot;MSScriptControl.ScriptControl&quot;)
s.language=&quot;vbscript&quot;
s.AddObject &quot;WScript&quot;,WScript
do while not [флаг]
s.executestatement(&quot;WScript.Timeout=3 : x=inputbox(&quot;&quot;&quot;&quot;) : [флаг]=true&quot;)
[флаг]=s.eval(&quot;[флаг]&quot;)
loop
WScript.Timeout=0
msgbox x
msgbox 123</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Fri, 18 Jan 2013 17:15:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68657#p68657</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68655#p68655</link>
			<description><![CDATA[<p><strong>smaharbA</strong>, интересное решение однако <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />, раньше нигде не сталкивался с объектом <em>MSScriptControl</em>. Но не без трудностей при видоизменении скрипта. Как я понял самосчитывание тела скрипта необходимо, т.к. после запуска <em>s.executestatement()</em> и истечения времени <em>timeout</em>, команды, стоящие после <em>s.executestatement()</em> попросту не выполняются. Хотел похитрить, чтоб как-то выйти из него, после выполнения мне нужных там комманд (<em>inputbox</em>), но увы пока безуспешны. Вот одна из моих попыток, чтоб была понятна суть моих стараний:<br /></p><div class="codebox"><pre><code>
set s=CreateObject(&quot;MSScriptControl.ScriptControl&quot;)
s.language=&quot;vbscript&quot;
s.AddObject &quot;WScript&quot;,WScript
do
s.executestatement(&quot;WScript.Timeout=3 : x=inputbox(&quot;&quot;&quot;&quot;) : Exit do&quot;)
loop
msgbox x
msgbox 123
</code></pre></div><p>Как я понял <em>s.executestatement()</em> запускает независимый скрипт в скрипте? (Хорошей русскоязычной литературы, не считая машинного перевода по <em>MSScriptControl</em> не нашёл). Может есть какие-то доп. опции, чтоб взять под контроль это дело?</p><p>P.S. Кстати, объект <em>&quot;MSScriptControl.ScriptControl&quot;</em> на <em>Windows 7 Home Basic</em> не создаётся, пришлось на старом добром XP тестить.</p>]]></description>
			<author><![CDATA[null@example.com (Lucky)]]></author>
			<pubDate>Fri, 18 Jan 2013 16:59:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68655#p68655</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68607#p68607</link>
			<description><![CDATA[<p><span style="color: #008800"><strong>smaharbA</strong>, приведи свои посты в соответствие Правилам.</span></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 17 Jan 2013 10:45:26 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68607#p68607</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Как создать окно ввода с заданным временем ожидания.]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68597#p68597</link>
			<description><![CDATA[<div class="codebox"><pre><code>set s=CreateObject(&quot;MSScriptControl.ScriptControl&quot;)
s.language=&quot;vbscript&quot;
s.AddObject &quot;WScript&quot;,WScript
set fso=CreateObject(&quot;Scripting.FileSystemObject&quot;)
set f=fso.OpenTextFile(WScript.ScriptFullName)
do while f.ReadLine()&lt;&gt;&quot;WScript.Quit():rem Start&quot;:loop
s.executestatement(f.ReadAll())
WScript.Quit():rem Start
WScript.Timeout=3
x=inputbox(&quot;&quot;)
msgbox x
msgbox 123</code></pre></div><br /><p>Но наверное будет проблема с асинхронным вызовом процедур</p><br /><p>офф: как с этим - <a href="http://forum.script-coding.com/help.php">http://forum.script-coding.com/help.php</a> ?</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Thu, 17 Jan 2013 08:27:19 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68597#p68597</guid>
		</item>
	</channel>
</rss>
