четверг, 18 июля 2013 г.

LExplorer (HTA explorer 2)

Доброго времени суток.

Некоторое время назад была написана программа HTA-explorer hta-explorer, при ее использовании сразу возникли пожелания ее улучшить: 
  1. программу легко закрыть ALT+F4
  2. можно вызвать диспетчер задач и запустить что угодно, например "игра.exe"
  3. мелкие недочеты, например нету вывода текущего времени.
На исправление вышеперечисленных недочетов ушло довольно много времени. Как оказалось на js/vbs не все можно сделать.

ALT+F4.


 Обработка нажатия ALT+F4 была реализована так:
  1. <script language = "JavaScript">
  2. function blockAltF4()
  3.     {
  4.       if ((event.keyCode == 115)&&(event.altKey == true))
  5.          {
  6.            alert ("функция "+" ALT+F4 "+" запрещена");
  7.            event.returnValue = false;
  8.          }
  9.     }
  10. </script>
В теге BODY прописываем <body onkeydown = "blockAltF4()">

CTRL+ALT+DEL, CTRL+SHIFT+ESC.


По выше приведенному примеру сделать не получится. Перечитав много статей на эту тему, пришел к выводу что проще всего блокировать диспетчер задач через реестр.

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001


Дополнительные фишки.


Отображение времени. 

Существующие скрипты мне не очень понравились, поэтому я немного переделал их. Вот что получилось.
  1. month = new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");
  2. day = new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");
  3. function showTime()
  4.    {
  5.     var tm = new Date();
  6.     var h=tm.getHours();
  7.     var m=tm.getMinutes();
  8.     var s=tm.getSeconds();
  9.     var d=tm.getDate();
  10.     var ms=tm.getMonth();
  11.     var g=tm.getFullYear();
  12.     m=checkTime(m);
  13.     s=checkTime(s);
  14.     h=checkTime(h);
  15.     document.getElementById('clock').innerHTML=     "сегодня"+":"+" "+day[tm.getDay()]+"   "+d+"."+month[ms]+"."+g+"."+" "+h+":"+m+":"+s;
  16.     t=setTimeout('showTime()',1000);
  17.    }
  18. function checkTime(m)
  19.    {
  20.     if (m<10) {m="0" + m;}
  21.     return m;
  22.    }
  23. function checkTime(s)
  24.    {
  25.     if (s<10) {s="0" + s;}
  26.     return s;
  27.    }
  28. function checkTime(h)
  29.    {
  30.     if (h<10) {h="0" + h;}
  31.     return h;
  32.    } 
Так выглядит визуально:



В теге BODY прописываем <body onLoad = "showTime()">. Чтобы оба скрипта работали делаем так:
<body onLoad = "showTime()" onkeydown = "blockAltF4()">

Запуск программ по паролю.
.
Больше всего переделывал именно эту часть. Можно использовать стандартный 
input type = "password", можно использовать prompt. Я  решил использовать первый вариант, но с промежуточным hta-окном. В этом окне проверяется пароль и если пароль верный запускается программа.

скрипт запуска окна:

  1. MyObject = new ActiveXObject("WScript.Shell")
  2. function RunDz()
  3.    {
  4.     MyObject.Run("pprog/dz.hta");
  5.    }
привязка к кнопке:

  1. <button onclick = "RunDz()"><img src = "img/Icon_01.ico" width = "24" height = "24"></button> <b>Диспетчер задач</b><br>
скрипт проверки пароля и запуска программы:

  1. MyObject = new ActiveXObject("WScript.Shell")
  2. function pButton()
  3.    {
  4.     if (document.fpass.pass_id.value == "asd")
  5.        {
  6.         MyObject.Run("./prog/pxp.exe");
  7.        }
  8.         else 
  9.           {
  10.            alert("Не верный пароль...");
  11.           }
  12.    }
Для удобства компиляции в ExeScript , ввел новую структуру расположения папок файлов, в проекте необходимо указать TEMP-директорию путь до папки с программой. Например программа располагается C:\stol, значит в компиляторе этот путь указывается как темповый. Полученный exe помещаем в корень диска, при запуске системы он извлечет LExplorer.hta в папку с программой. Структура получается следующей:

C:\LExplorer.exe
C:\stol\freg\  здесь хранятся REG файлы  
.......\img\   здесь хранятся все изображения
.......\pprog\ здесь хранятся дополнительные окна HTA
.......\prog\  здесь хранятся EXE
.......\text\  здесь хранятся файлы оперативного журнала.

LExplorer - последняя версия программы.

1 комментарий:

  1. Внесены изменения в скрипт проверки пароля:
    было
    {MyObject.Run("./prog/pxp.exe");}

    стало {MyObject.Run("./prog/pxp.exe");self.close();}

    в HTA-формах проверки пароля, убрана кнопка
    button onclick="self.close()">Закрыть</button

    функция blockAltF4() в HTA-формах проверки паролей изменена следующим образом - blockEnterOrAltF4()
    {if((event.keyCode==13)||((event.keyCode==115)&&(event.altKey==true)))
    {event.returnValue = false;}}

    ОтветитьУдалить