<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript: динамическое формирование окна HTA]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=1111</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1111&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript: динамическое формирование окна HTA».]]></description>
		<lastBuildDate>Mon, 04 Feb 2008 07:16:28 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript: динамическое формирование окна HTA]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=8615#p8615</link>
			<description><![CDATA[<p>Усовершенствованный вариант предыдущего примера, изменения:<br />- проверка окончания загрузки содержимого окна;<br />- отключено обновление окна (контекстное меню и клавиша F5), приводившее к ошибке;<br />- поиск временного вспомогательного невидимого окна IE по его HWND, а не по генерируемому случайным образом имени;<br />- сокращены некоторые пути, например, window.form1.btn1 вместо window.document.form1.btn1;<br />- исправлена ошибка в 3-м абзаце пояснительного текста: «Кнопка 2» вместо «Кнопка 1».<br /></p><div class="codebox"><pre><code>&lt;?xml version=&#039;1.0&#039; encoding=&#039;windows-1251&#039; standalone=&#039;yes&#039;?&gt;
&lt;job&gt;
&lt;resource id=&#039;HTML&#039;&gt;&lt;![CDATA[&lt;HTML&gt;
&lt;HEAD&gt;&lt;TITLE&gt;WSH + HTA&lt;/TITLE&gt;
&lt;HTA:APPLICATION border=&#039;none&#039; contextMenu=&#039;no&#039;/&gt;
&lt;/HEAD&gt;

&lt;BODY&gt;
&lt;FORM name=&#039;form1&#039;&gt;
  &lt;INPUT id=&#039;btn1&#039; type=&#039;button&#039; value=&#039;Кнопка 1&#039;&gt;
  &lt;INPUT id=&#039;btn2&#039; type=&#039;button&#039; value=&#039;Кнопка 2&#039;&gt;
  &amp;nbsp;
  &lt;INPUT type=&#039;reset&#039; value=&#039;Закрыть&#039;&gt;
&lt;/FORM&gt;

&lt;P&gt;При нажатии на кнопки &quot;Кнопка 1&quot; или &quot;Кнопка 2&quot; будет выведено сообщение
&quot;Раз&quot;, а затем через 5&amp;nbsp;сек. сообщение &quot;Два&quot;. Задержка между сообщениями
создаётся с помощью метода WScript.Sleep().&lt;/P&gt;

&lt;P&gt;Разница заключается в том, что обработчик события onclick кнопки &quot;Кнопка 1&quot;
выполняется в контексте запустившего процесс mshta.exe сценария, —
очевидно, что при таком подходе мы можем свободно использовать все методы
объекта WScript, а не только Sleep().&lt;/P&gt;

&lt;P&gt;Обработчик события onclick кнопки &quot;Кнопка 2&quot; выполняется в контексте
окна HTA, — для этого нам понадобилось передать окну ссылку на объект WScript
(для первого случая это не требуется). Этот пример сделан, скорее,
для демонстрации возможности и такого подхода; но следует отметить, что только
этот подход будет работать при назначения обработчиков событий onload и
onunload окна.&lt;/P&gt;
&lt;/BODY&gt;&lt;/HTML&gt;
]]&gt;&lt;/resource&gt;


&lt;script language=&quot;JScript&quot;&gt;&lt;![CDATA[
var IE=new ActiveXObject(&quot;InternetExplorer.Application&quot;);
IE.Navigate(&quot;about:blank&quot;); while (IE.Busy) WScript.Sleep(100);

var window=null;
IE.Document.Script.Callback=function (arg) {
  IE.Document.Script.Callback=null;
  IE.Quit(); delete IE;
  window=arg; window.eval(&quot;delete W, i;&quot;);
  return getResource(&quot;HTML&quot;);
};

var WshScriptExec=(new ActiveXObject(&quot;WScript.Shell&quot;)).Exec(
  &quot;mshta.exe \&quot;javascript:&quot;+
    &quot;W=(new ActiveXObject(&#039;Shell.Application&#039;)).Windows();&quot;+
    &quot;for(i=W.Count;--i&gt;=0;)if(W.Item(i).HWND==&#039;&quot;+ IE.HWND +&quot;&#039;)break;&quot;+
    &quot;W.Item(i).Document.Script.Callback(window);&quot;+
  &quot;\&quot;&quot;
);
while (!window) WScript.Sleep(100);
while (window.document.readyState!=&quot;complete&quot;) WScript.Sleep(100);


window.document.onkeydown=function () {return window.event.keyCode!=116;};

//window.form1.onreset=window.close;
//window.form1.onreset=function () {window.close();};
window.eval(&#039;window.form1.onreset=function () {window.close();};&#039;);
//window.form1.onreset=function () {WshScriptExec.Terminate();};

window.form1.btn1.onclick=function () {
  window.alert(&quot;Раз&quot;); WScript.Sleep(5000); window.alert(&quot;Два&quot;);
};

window.WScript=WScript;
window.eval(&#039;\
  form1.btn2.onclick=function () {\
    alert(&quot;Раз&quot;); WScript.Sleep(5000); alert(&quot;Два&quot;);\
  };\
&#039;)


while (WshScriptExec.Status==0) WScript.Sleep(300);
]]&gt;&lt;/script&gt;
&lt;/job&gt;</code></pre></div><p>Автор примера - <strong>wisgest</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 04 Feb 2008 07:16:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=8615#p8615</guid>
		</item>
		<item>
			<title><![CDATA[JScript: динамическое формирование окна HTA]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=8567#p8567</link>
			<description><![CDATA[<p>Скрипт в формате WSF:<br /></p><div class="codebox"><pre><code>&lt;?xml version=&#039;1.0&#039; encoding=&#039;windows-1251&#039; standalone=&#039;yes&#039;?&gt;
&lt;job&gt;
&lt;resource id=&#039;HTML&#039;&gt;&lt;![CDATA[&lt;HTML&gt;
&lt;HEAD&gt;&lt;TITLE&gt;WSH + HTA&lt;/TITLE&gt;
&lt;HTA:APPLICATION border=&#039;none&#039;/&gt;
&lt;/HEAD&gt;

&lt;BODY&gt;
&lt;FORM name=&#039;form1&#039;&gt;
  &lt;INPUT id=&#039;btn1&#039; type=&#039;button&#039; value=&#039;Кнопка 1&#039;&gt;
  &lt;INPUT id=&#039;btn2&#039; type=&#039;button&#039; value=&#039;Кнопка 2&#039;&gt;
  &amp;nbsp;
  &lt;INPUT type=&#039;reset&#039; value=&#039;Закрыть&#039;&gt;
&lt;/FORM&gt;

&lt;P&gt;При нажатии на кнопки &quot;Кнопка 1&quot; или &quot;Кнопка 2&quot; будет выведено сообщение
&quot;Раз&quot;, а затем через 5&amp;nbsp;сек. сообщение &quot;Два&quot;. Задержка между сообщениями
создаётся с помощью метода WScript.Sleep().&lt;/P&gt;

&lt;P&gt;Разница заключается в том, что обработчик события onclick кнопки &quot;Кнопка 1&quot;
выполняется в контексте запустившего процесс mshta.exe сценария, —
очевидно, что при таком подходе мы можем свободно использовать все методы
объекта WScript, а не только Sleep().&lt;/P&gt;

&lt;P&gt;Обработчик события onclick кнопки &quot;Кнопка 1&quot; выполняется в контексте
окна HTA, — для этого нам понадобилось передать окну ссылку на объект WScript
(для первого случая это не требуется). Этот пример сделан, скорее,
для демонстрации возможности и такого подхода; но следует отметить, что только
этот подход будет работать при назначения обработчиков событий onload и
onunload окна.&lt;/P&gt;
&lt;/BODY&gt;&lt;/HTML&gt;
]]&gt;&lt;/resource&gt;


&lt;script language=&quot;JScript&quot;&gt;&lt;![CDATA[
var IE=new ActiveXObject(&quot;InternetExplorer.Application&quot;);
var mailbox_name=Math.floor(Math.random()*100000000).toString();
IE.Navigate(&quot;about:blank&quot;); while (IE.Busy) WScript.Sleep(100);
IE.Document.Script.name=mailbox_name;

var window=null;
IE.Document.Script.Callback=function (arg) {
  IE.Document.Script.Callback=null;
  IE.Quit(); delete IE, mailbox_name;
  window=arg; window.eval(&quot;delete W, S;&quot;);
  return getResource(&quot;HTML&quot;);
};

var WshScriptExec=(new ActiveXObject(&quot;WScript.Shell&quot;)).Exec(
  &quot;mshta.exe \&quot;javascript:&quot;+
    &quot;W=(new ActiveXObject(&#039;Shell.Application&#039;)).Windows();&quot;+
    &quot;for(i=W.Count;--i&gt;=0;)&quot;+
      &quot;try{&quot;+
        &quot;S=W.Item(i).Document.Script;&quot;+
        &quot;if(S.name==&#039;&quot; + mailbox_name + &quot;&#039;)break;&quot;+
      &quot;}catch(e){}&quot;+
    &quot;S.Callback(window);&quot;+
  &quot;\&quot;&quot;
);
while (!window) WScript.Sleep(100);


//window.document.form1.onreset=window.close;
window.document.form1.onreset=function () {window.close();};
//window.eval(&#039;window.document.form1.onreset=function () {window.close();};&#039;);
//window.document.form1.onreset=function () {WshScriptExec.Terminate();};

window.document.form1.btn1.onclick=function () {
  window.alert(&quot;Раз&quot;); WScript.Sleep(5000); window.alert(&quot;Два&quot;);
};

window.WScript=WScript;
window.eval(&#039;\
  document.form1.btn2.onclick=function () {\
    alert(&quot;Раз&quot;); WScript.Sleep(5000); alert(&quot;Два&quot;);\
  };\
&#039;)


while (WshScriptExec.Status==0) WScript.Sleep(300);
]]&gt;&lt;/script&gt;
&lt;/job&gt;</code></pre></div><p>При запуске скрипта будет открыто окно HTA с несколькими кнопками. Никаких временных файлов не создаётся.<br />Автор примера - <strong>wisgest</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 02 Feb 2008 08:05:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=8567#p8567</guid>
		</item>
	</channel>
</rss>
