1

Тема: 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>