Доброго времени суток.
Некоторое время назад была написана программа HTA-explorer hta-explorer, при ее использовании сразу возникли пожелания ее улучшить:
- программу легко закрыть ALT+F4
- можно вызвать диспетчер задач и запустить что угодно, например "игра.exe"
- мелкие недочеты, например нету вывода текущего времени.
ALT+F4.
Обработка нажатия ALT+F4 была реализована так:
- <script language = "JavaScript">
- function blockAltF4()
- {
- if ((event.keyCode == 115)&&(event.altKey == true))
- {
- alert ("функция "+" ALT+F4 "+" запрещена");
- event.returnValue = false;
- }
- }
- </script>
В теге BODY прописываем <body onkeydown = "blockAltF4()">
CTRL+ALT+DEL, CTRL+SHIFT+ESC.
По выше приведенному примеру сделать не получится. Перечитав много статей на эту тему, пришел к выводу что проще всего блокировать диспетчер задач через реестр.
"DisableTaskMgr"=dword:00000001
Дополнительные фишки.
Отображение времени.
Существующие скрипты мне не очень понравились, поэтому я немного переделал их. Вот что получилось.
- month = new Array ("января","февраля","марта", "апреля","мая", "июня","июля","августа","сентября", "октября","ноября","декабря");
- day = new Array ("воскресенье","понедельник", "вторник","среда","четверг", "пятница","суббота");
- function showTime()
- {
- var tm = new Date();
- var h=tm.getHours();
- var m=tm.getMinutes();
- var s=tm.getSeconds();
- var d=tm.getDate();
- var ms=tm.getMonth();
- var g=tm.getFullYear();
- m=checkTime(m);
- s=checkTime(s);
- h=checkTime(h);
- document.getElementById('clock').innerHTML= "сегодня"+":"+" "+day[tm.getDay()]+" "+d+"."+month[ms]+"."+g+"."+" "+h+":"+m+":"+s;
- t=setTimeout('showTime()',1000);
- }
- function checkTime(m)
- {
- if (m<10) {m="0" + m;}
- return m;
- }
- function checkTime(s)
- {
- if (s<10) {s="0" + s;}
- return s;
- }
- function checkTime(h)
- {
- if (h<10) {h="0" + h;}
- return h;
- }
Так выглядит визуально:
В теге BODY прописываем <body onLoad = "showTime()">. Чтобы оба скрипта работали делаем так:
<body onLoad = "showTime()" ; onkeydown = "blockAltF4()">
Запуск программ по паролю.
.
Больше всего переделывал именно эту часть. Можно использовать стандартный
input type = "password", можно использовать prompt. Я решил использовать первый вариант, но с промежуточным hta-окном. В этом окне проверяется пароль и если пароль верный запускается программа.
скрипт запуска окна:
скрипт запуска окна:
- MyObject = new ActiveXObject("WScript.Shell")
- function RunDz()
- {
- MyObject.Run("pprog/dz.hta");
- }
привязка к кнопке:
- <button onclick = "RunDz()"><img src = "img/Icon_01.ico" width = "24" height = "24"></button> <b>Диспетчер задач</b><br>
скрипт проверки пароля и запуска программы:
- MyObject = new ActiveXObject("WScript.Shell")
- function pButton()
- {
- if (document.fpass.pass_id.value == "asd")
- {
- MyObject.Run("./prog/pxp.exe");
- }
- else
- {
- alert("Не верный пароль...");
- }
- }
Для удобства компиляции в ExeScript , ввел новую структуру расположения папок файлов, в проекте необходимо указать TEMP-директорию путь до папки с программой. Например программа располагается C:\stol, значит в компиляторе этот путь указывается как темповый. Полученный exe помещаем в корень диска, при запуске системы он извлечет LExplorer.hta в папку с программой. Структура получается следующей:
C:\LExplorer.exe
C:\stol\freg\ здесь хранятся REG файлы
.......\img\ здесь хранятся все изображения
C:\LExplorer.exe
C:\stol\freg\ здесь хранятся REG файлы
.......\img\ здесь хранятся все изображения
.......\pprog\ здесь хранятся дополнительные окна HTA
.......\prog\ здесь хранятся EXE
.......\text\ здесь хранятся файлы оперативного журнала.
LExplorer - последняя версия программы.
.......\prog\ здесь хранятся EXE
.......\text\ здесь хранятся файлы оперативного журнала.
LExplorer - последняя версия программы.
Внесены изменения в скрипт проверки пароля:
ОтветитьУдалитьбыло
{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;}}