Тема: WSH: JS: Индикация работы "долгоиграющего" скрипта
У скриптов есть большой плюс: скрипт может работать незаметно, нигде ничего не отображая. Но, если скрипт работает достаточно долго, это уже минус: про него можно нечаянно забыть. HTA для "долгоиграющих" задач - тоже не вариант, IE запарит своими "скрипт на странице тормозит всё, что может..." Вот протез, создающий hta динамически из скрипта, при этом HTA никого не тормозит, а скрипт его закроет перед завершением. Индикация - в панели задач.
<?xml version="1.0" encoding="utf-8"?>
<job id="run" version="0.1">
<object id="f" progid="Scripting.FileSystemObject" />
<object id="s" progid="WScript.Shell" />
<script type="text/jscript" language="JScript"><![CDATA[
var
u='mshta "about:'+getResource('h').replace(/[\s\r\n]+/g,' ')+'"',
v='"'+f.getSpecialFolder(2).path.replace(/\\/g,'\\\\')+'\\\\"';
for(var i=0;i<3;i++)fa(i);
u=u.replace('@@@',v);
v=s.exec(u);
// вместо паузы здесь помещаем полезный код
WScript.sleep(10000);
// или вызываем его из другого job'а
v.terminate();
function fa(e){ // создаём иконки в %TEMP%
with(new ActiveXObject("ADODB.Stream")){
Type=2;
charset='ibm866';
open();
writeText(unescape(getResource('i'+e).replace(/\s+/g,'')));
saveToFile(f.getSpecialFolder(2)+'\\'+e+'.ico',2);
close();
}
}
]]></script>
<resource id="h"><![CDATA[
<html>
<head>
<hta:application windowState="minimize" />
<title>Я занят!</title>
<script>
var
a=document.getElementsByTagName('application')[0],
c=0,
t=@@@;
window.setInterval(fa,250);
self.resizeTo(0,0);
self.moveTo(-100,-100);
function fa(){
c=(c>2?0:c);
a.removeNode();
a.icon=t+c+'.ico';
document.getElementsByTagName('head')[0].appendChild(a);
c++;
};
</script>
</head>
</html>
]]></resource>
<resource id="i0"><![CDATA[
%00%00%01%00%01%00%10%10%02%00%01%00%01%00%u2591%00%00%00%16%00%00%00%28%00%00%00%10%00
%00%00%20%00%00%00%01%00%01%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A0%A0%00%00%A0%A0%00%00%A0%A0
%00%00%u2514%03%00%00%u2580%A0%00%00%u2568%17%00%00%u256B%u0443%00%00%11%u2554%00%00%u0
423%u0418%00%00%u255F%u044B%00%00%u0448%0B%00%00%A0%u221A%00%00%u2514%03%00%00%A0%A0%00
%00%A0%A0%00%00%A0%A0%00%00
]]></resource>
<resource id="i1"><![CDATA[
%00%00%01%00%01%00%10%10%02%00%01%00%01%00%u2591%00%00%00%16%00%00%00%28%00%00%00%10%00
%00%00%20%00%00%00%01%00%01%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A0%A0%00%00%A0%u2510%00%00%A0
%3F%00%00%u2590%03%00%00%u2584%u221A%00%00%u2553%0B%00%00%u256B+%00%00%u256B%u043B%00%0
0%u2552%u044B%00%00%u2558%u044B%00%00%u2568k%00%00%u2580%3B%00%00%u2514%7B%00%00%u2116%
A0%00%00%A4%A0%00%00%A0%A0%00%00
]]></resource>
<resource id="i2"><![CDATA[
%00%00%01%00%01%00%10%10%02%00%01%00%01%00%u2591%00%00%00%16%00%00%00%28%00%00%00%10%00
%00%00%20%00%00%00%01%00%01%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A0%A0%00%00%u045E%A0%00%00%u0
447%A0%00%00%u2514%03%00%00%u042F%u221A%00%00%u2514%0B%00%00%u0447%u044B%00%00%u045E%u2
21A%00%00%u2580%u044F%00%00%u256B%u0447%00%00%u2568%03%00%00%u2580%u2219%00%00%u2514%03
%00%00%A0%u0447%00%00%A0%u044F%00%00%A0%A0%00%00
]]></resource>
</job>
