<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH: создание окна, а также трансляция WScript в HTA]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=4357&amp;type=atom" />
	<updated>2010-04-07T18:51:21Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=4357</id>
		<entry>
			<title type="html"><![CDATA[WSH: создание окна, а также трансляция WScript в HTA]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=34556#p34556" />
			<content type="html"><![CDATA[<p><strong>Динамическое формирование окна</strong></p><div class="quotebox"><blockquote><p>Функция <strong>CreateWindow</strong> создает окно HTA и возвращает ссылку на объект window. </p><p>CreateWindow(content, x, y, width, height)</p><p><strong>Параметры:</strong></p><p><strong>content </strong>— необязательный. Строковой параметр. Содержит HTML-разметку окна HTA. По умолчанию &quot;&quot;.<br /><strong>x</strong> — необязательный. Отступ слева. По умолчанию 0.<br /><strong>y</strong> — необязательный. Отступ сверху. По умолчанию 0.<br /><strong>width</strong> — необязательный. Ширина окна. По умолчанию 400.<br /><strong>height </strong>— необязательный. Высота окна. По умолчанию 300.</p><p>Пример использования:<br /></p><div class="codebox"><pre><code>var 
    content = &quot;&lt;hta:application showintaskbar=no&gt;&lt;title&gt;Sample&lt;/title&gt;&quot;,
    window = CreateWindow(content);</code></pre></div><p>Для удобства хранения HTML кода Вы можете использовать WSF.</p><p>Код функции:<br /></p><div class="codebox"><pre><code>function CreateWindow(content, x, y, width, height)
{
var HTASettings = &quot;&quot;, e, window, Host = this; 
    width = Number(width) || 400;
    height = Number(height) || 300;
    try {HTASettings = content.match(/&lt;hta[^&gt;]+&gt;/gim)[0].replace(/\r?\n/g, &quot; &quot;).replace(/&quot;/g,&quot;&#039;&quot;)}catch(e) {}
    
var 
    ID = (new Date).valueOf(),
    CodeForLinking = &quot;\&quot;&lt;title&gt; &lt;/title&gt;&lt;script&gt;moveTo(-300,-300); resizeTo(0,0)&lt;/script&gt;&quot;+HTASettings+&quot;&lt;object id=&quot;+ID+&quot; classid=&#039;clsid:8856F961-340A-11D0-A96B-00C04FD705A2&#039;&gt;&lt;param name=RegisterAsBrowser value=1&gt;&lt;/object&gt;\&quot;&quot;,
    ShellWindows = (new ActiveXObject(&quot;Shell.Application&quot;)).Windows(),
    NumberOfWindows = ShellWindows.Count;

    (new ActiveXObject(&quot;WScript.Shell&quot;)).Run(&quot;mshta.exe about:&quot;+CodeForLinking);

    outer: for (var t=0; t&lt;1000; t++)
    inner:  for (var i=ShellWindows.Count; --i&gt;=0;) 
    {try{if(ShellWindows.Item(i).id == ID){window=ShellWindows.Item(i).parent.parentWindow;break outer;}}catch(e) {}
    WScript.Sleep(10);}
    
    try {
        window.document.open(); window.Host = Host; 
        window.document.write([content||&quot;&quot;, &quot;&lt;script language=&#039;JScript&#039;&gt;eval;resizeTo(&quot;,width,&quot;,&quot;, height,&quot;); moveTo(&quot;, Number(x) ||  (window.screen.width - width) / 2,&quot;,&quot;, Number(y) || (window.screen.height - height) / 2, &quot;);&lt;/script&gt;&quot;].join(&quot;&quot;));
        window.document.close();
    } catch (e) {return}
    return window;
}</code></pre></div><p><strong>Трансляция WScript в окно HTA</strong> осуществляется автоматически. Этот объект будет доступен после того как будет построено дерево элементов полностью. Доступ к объекту осуществляется так: window.Host.WScript. Host — это ссылка на Global Object среды WSH.</p><p>Особенности функции:<br />1. Маленький объем кода.<br />2. Используются встроенные возможности Windows.<br />3. Окно доступно только тому скрипту, который его создал.<br />4. Не требуется создание временных файлов.<br />5. Не используется для связки Internet Explorer.</p></blockquote></div><p>Эта идея может упростить решения задач, которые обсуждались в темах: <br />1. <a href="http://forum.script-coding.com/viewtopic.php?id=1803">VBScript: конструирование и выдача диалогов с помощью HTA</a><br />2. <a href="http://forum.script-coding.com/viewtopic.php?id=1111">JScript: динамическое формирование окна HTA</a><br />3. <a href="http://forum.script-coding.com/viewtopic.php?id=1187">WSH: трансляция объекта WScript</a><br />4. <a href="http://forum.script-coding.com/viewtopic.php?id=1110">HTA: использование WScript.Sleep()</a><br />5. <a href="http://forum.script-coding.com/viewtopic.php?pid=19622">VBScript: COM-сервер для управления окнами HTA</a></p><div class="quotebox"><blockquote><p>Также Вам может пригодиться функция <strong>CloseWindowOnQuit</strong>. Она закрывает указанное окно по окончанию работы скрипта, а также <strong>WaitWindow</strong> — ожидание закрытия окна. </p><div class="codebox"><pre><code>function CloseWindowOnQuit(window)
{
    window.eval(&quot;setInterval(&#039;var e;try{Host.WScript}catch(e){close()}&#039;,100)&quot;);
}

function WaitWindow(window)
{
    while ((typeof window.document)==&quot;object&quot;) WScript.Sleep(10);
}</code></pre></div><p>Пример использования:<br /></p><div class="codebox"><pre><code>var window = CreateWindow(&quot;&lt;hta:application showintaskbar=no&gt;&lt;title&gt;Sample&lt;/title&gt;&quot;);
CloseWindowOnQuit(window);
WScript.Sleep(4000);</code></pre></div><p>Функция <strong>CreateWindowFromFile</strong> поможет Вам заменить WshShell.Run(&quot;mshta.exe&quot;+Path).<br /></p><div class="codebox"><pre><code>function CreateWindowFromFile(Path, x, y, width, height)
{
    var content = (new ActiveXObject(&quot;Scripting.FileSystemObject&quot;)).GetFile(Path).OpenAsTextStream(1).ReadAll();
    return CreateWindow(content, x, y, width, height);
}</code></pre></div></blockquote></div><p>Не советую использовать document.open().</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2010-04-07T18:51:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=34556#p34556</id>
		</entry>
</feed>
