<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Отследить клик по значку HTA на панели задач]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7896&amp;type=atom" />
	<updated>2013-01-03T10:51:02Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7896</id>
		<entry>
			<title type="html"><![CDATA[Re: Отследить клик по значку HTA на панели задач]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=68131#p68131" />
			<content type="html"><![CDATA[<p>Улучшенный (?), по сравнению с #2, пример программного сворачивания окна HTA:<br /></p><div class="codebox"><pre><code>&lt;HTML&gt;
&lt;HEAD id=&#039;HeadElement&#039;&gt;
&lt;META http-equiv=&#039;Content-Type&#039; content=&#039;text/html; charset=windows-1251&#039;&gt;
&lt;TITLE&gt;Minimize&lt;/TITLE&gt;

&lt;HTA:APPLICATION&gt;&lt;/HTA:APPLICATION&gt;
&lt;/HEAD&gt;

&lt;BODY&gt;

&lt;SCRIPT language=&#039;JavaScript&#039;&gt;
var HTA=document.getElementsByTagName(&quot;APPLICATION&quot;).item(0);
var WshShell=new ActiveXObject(&quot;WScript.Shell&quot;);

function Minimize() {
  window.blur();
  HTA.removeNode().windowState=&quot;minimize&quot;;
  HeadElement.appendChild(HTA);
  window.focus();
  WshShell.Run(&quot;RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1 True&quot;);
}

document.attachEvent(&quot;onkeydown&quot;,
  function () {if (event.keyCode==27 /*ESC*/) Minimize();}
);
&lt;/SCRIPT&gt;

&lt;DIV&gt;Сворачивание окна HTA-приложения по клавише Esc.&lt;/DIV&gt;
&lt;/BODY&gt;&lt;/HTML&gt;
</code></pre></div><p>Пояснения:<br /></p><div class="codebox"><pre><code>RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1 True</code></pre></div><p>— перерисовка Рабочего стола для удаления с него следа от окна HTA;<br /><em>window.focus()</em> добавлен, т.к. иначе после восстановления окна, оно не обрабатывало события клавиатуры пока не щёлкнешь на нём или не нажмёшь TAB — вероятно, из-за предшествующего <em>window.blur()</em>.</p><p>Недостаток этого решения (как и предшествующего): если программно свернуть окно развёрнутое на весь экран, то после разворачивания назад нельзя будет восстановить первоначальный размер; впрочем, для случая <strong>border=none</strong> это не существенно.</p><p><span style="color: gray">(Основная задача — отслеживание щелчка по кнопке окна HTA на панели задач или потеря им фокуса — пока не решена.)</span></p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-01-03T10:51:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=68131#p68131</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Отследить клик по значку HTA на панели задач]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=67485#p67485" />
			<content type="html"><![CDATA[<p>Некоторое время назад тоже копал в этом направлении. На истину в последней инстанции не претендую, но вот что выкопал: да, скрыть окно можно, убрав его за пределы экрана, перед этим желательно запомнить в переменной текущие координаты; для восстановления свёрнутого таким образом окна использовал событие window.onfocus - обработчик возвращает окно на запомненное место. Но! window.blur() не сработает. Т.е., если &quot;свернуть&quot; (спрятать) окно по назначенному хоткею, или с помощью элемента графического интерфейса (button) и сразу кликнуть на иконке в панели задач - ничего не произойдёт. Надо кликнуть на чём-нибудь ещё - любом окне или обоях - чтобы окно hta потеряло фокус. Или переключаться по Alt+Tab - тогда фокус будет передан другому окну автоматически. После этого, при клике на значке событие window.onfocus произойдёт. Других событий при клике на значке в панели задач я не обнаружил и свернуть окно таким способом не получилось. Если что-то найдёте - отпишитесь обязательно.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2012-12-24T11:16:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=67485#p67485</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Отследить клик по значку HTA на панели задач]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=67448#p67448" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Magneto пишет:</cite><blockquote><p>Что касается возможности сворачивания HTA приложений силами скриптов, то это делается очень легко.</p></blockquote></div><p>В таком случае надо ещё добавить <em>window.blur()</em>, чтобы приложение перестало быть активным и не ловило нажатия клавиш.<br />При отсутствии окантовки это вполне сгодится в качестве имитации сворачивания, но следует помнить, что если окантовка всё-таки будет, т.е. будет доступен пункт «Восстановить», то работать со «свёрнутыми» таким образом окнам он не станет.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2012-12-24T07:49:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=67448#p67448</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Отследить клик по значку HTA на панели задач]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=67365#p67365" />
			<content type="html"><![CDATA[<p>Спасибо за комментарий.</p><p>Что касается возможности сворачивания HTA приложений силами скриптов, то это делается очень легко.</p><p>Я провел небольшое исследование. Создал следующее простое приложение:<br /></p><div class="codebox"><pre><code>
&lt;html&gt;&lt;head&gt;
&lt;hta:application

/&gt;

&lt;script&gt;

window.resizeTo(300, 140);

setInterval(function () {
    document.title = window.screenLeft + &#039; x &#039; + window.screenTop;
}, 50);

&lt;/script&gt;
&lt;/head&gt;&lt;body style=&quot;overflow: hidden; background-color: green&quot;&gt;&lt;/body&gt;&lt;/html&gt;
</code></pre></div><p>Видно что приложение отслеживает свое положение и выводит значение в &lt;title&gt; документа.&nbsp; &lt;title&gt; можно посмотреть на самом приложении и при наведении на иконку приложения на панели задач:<br /><span class="postimg"><img src="https://dl.dropbox.com/u/6001712/script-coding/1/scrin-1.jpg" alt="https://dl.dropbox.com/u/6001712/script-coding/1/scrin-1.jpg" /></span></p><br /><p>Теперь если свернуть приложение то на панели задач увидим:<br /><span class="postimg"><img src="https://dl.dropbox.com/u/6001712/script-coding/1/scrin-2.jpg" alt="https://dl.dropbox.com/u/6001712/script-coding/1/scrin-2.jpg" /></span></p><p>Из этого можно сделать вывод что приложению просто устанавливаются отрицательные координаты положения, вот и вся минимизация, по крайней мере для HTA приложений.</p><br /><p>Вопрос насчет минимизации приложений без внешней окантовки, остается открытым.</p>]]></content>
			<author>
				<name><![CDATA[Magneto]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27441</uri>
			</author>
			<updated>2012-12-22T21:01:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=67365#p67365</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Отследить клик по значку HTA на панели задач]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=67325#p67325" />
			<content type="html"><![CDATA[<p>Если окно HTA активно, то при щелчке по кнопке на панели задач, оно перестаёт быть активным.<br />Отсюда вывод: отслеживать получение или утрату окном фокуса и менять при этом значение <em>windowState</em> c &quot;normal&quot; на &quot;minimized&quot;.<br />Но это сопряжено с рядом трудностей:<br />• Окно будет сворачиваться не только при щелчке на кноке, но и при переключении на другое окно.<br />• При изменении <em>windowState</em> c &quot;normal&quot; на &quot;minimized&quot; окно действительно сворачивается, но об этом можно не догадаться, т.к. при этом на экране остаётся след от окна, который затирается если поводить над ним указателеи мыши, подвгать окнами… Частично помогает <em>window.blur()</em> перед &quot;minimized&quot; — на других окнах, бывших под HTA следа не остаётся, но на рабочем столе остаётся. Поэтому перед &quot;minimized&quot; я решил убирать окно с экрана, запомнив его расположение.<br />Вот пример из загашника, он будет работать и при border=&quot;none&quot; (хотя в целом, возможно, требует доработки):<br /></p><div class="codebox"><pre><code>&lt;HTML&gt;
&lt;HEAD id=&quot;HeadElement&quot;&gt;
&lt;META http-equiv=&#039;Content-Type&#039; content=&#039;text/html; charset=windows-1251&#039;&gt;
&lt;TITLE&gt;Minimize&lt;/TITLE&gt;
&lt;HTA:APPLICATION&gt;&lt;/HTA:APPLICATION&gt;
&lt;/HEAD&gt;

&lt;BODY&gt;
&lt;SCRIPT language=&#039;JavaScript&#039; type=&#039;text/javascript&#039;&gt;&lt;!--
var HTA=document.getElementsByTagName(&quot;APPLICATION&quot;).item(0);
var Left, Top;

function Minimize() {
  Left=window.screenLeft; Top=window.screenTop;
  window.moveTo(0, -16000);

  HTA.removeNode();
  HTA.windowState=&quot;minimize&quot;;
  HeadElement.appendChild(HTA);

  //window.moveTo(Left, Top);
  window.attachEvent(&quot;onfocus&quot;, OnRestore)
}

function OnRestore() {
  window.moveTo(Left, Top);
  window.detachEvent(&quot;onfocus&quot;, OnRestore)
}

document.attachEvent(&quot;onkeydown&quot;,
  function () {if (event.keyCode==27 /*ESC*/) Minimize();}
);
// --&gt;&lt;/SCRIPT&gt;

&lt;DIV&gt;Сворачивание окна HTA-приложения по клавише Esc.&lt;/DIV&gt;
&lt;/BODY&gt;&lt;/HTML&gt;
</code></pre></div><p>• Осталось лишь вместо отслеживания событий клавиатуры отслеживать утрату окном активности и в этом третья трудность, т.к. простой <em>window.onblur</em> срабатывает не только при переключение на другое окно, но и пре передаче фокуса от окна в целом к любому его элементу (например, текстовому полю) — мне самому хотелось бы знать решение этой задачи.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2012-12-22T04:14:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=67325#p67325</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Отследить клик по значку HTA на панели задач]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=67323#p67323" />
			<content type="html"><![CDATA[<p>Если создать простейшее HTA приложение:<br /></p><div class="codebox"><pre><code>
&lt;html&gt;&lt;head&gt;
&lt;hta:application

/&gt;
&lt;script&gt;window.resizeTo(200, 140);&lt;/script&gt;
&lt;/head&gt;&lt;body style=&quot;background-color: green&quot;&gt;&lt;/body&gt;&lt;/html&gt;
</code></pre></div><p> то его можно сворачивать несколькими способами, кликая по кнопке &#039;свернуть&#039; на самом приложении и кликая по значку приложения на панели задач.</p><p>Теперь если у приложения убрать внешнюю окантовку:<br /></p><div class="codebox"><pre><code>
&lt;html&gt;&lt;head&gt;
&lt;hta:application
  border=&quot;none&quot;
/&gt;
&lt;script&gt;window.resizeTo(200, 140);&lt;/script&gt;
&lt;/head&gt;&lt;body style=&quot;background-color: green&quot;&gt;&lt;/body&gt;&lt;/html&gt;
</code></pre></div><p>то приложение хоть и появится на панели задач, но щелкая по его иконке никак не удается его (приложение) свернуть.</p><p>Как можно это решить. Чтоб приложение запускалось без внешней окантовки и была возможность его сворачивать щелкая по его иконке на панели задач.</p>]]></content>
			<author>
				<name><![CDATA[Magneto]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27441</uri>
			</author>
			<updated>2012-12-21T22:38:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=67323#p67323</id>
		</entry>
</feed>
