Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

onclick + буква диска + mshta.exe (heed)
Author Message
heed
Участник форума



Joined: 03 Jan 2010
Posts: 97
Карма: 9
   поощрить/наказать


PostPosted: Thu Mar 17, 2011 1:16 am ()
   Post subject: onclick + буква диска + mshta.exe
Reply with quote

... вроде простая задача, но не решается.
Есть в корне диска такой файл.hta
Code (html): скопировать код в буфер обмена
<html> (december.com/html/4/element/html.html)
        <head> (december.com/html/4/element/head.html)
                <meta (december.com/html/4/element/meta.html) http-equiv="Content-Type" content="text/html; charset=utf-8" /> (december.com/html/4/element/.html)
                <title> (december.com/html/4/element/title.html)hta-примочка</title>
<HTA:APPLICATION
APPLICATIONNAME = "hta-примочка"
SINGLEINSTANCE = "yes"
ICON = "/1.ico"
SCROLL = "no"
MAXIMIZEBUTTON = "yes"
NAVIGABLE = "no"
SELECTION = "no"
CONTEXTMENU = "no"
BORDER = "thin"
INNERBORDER = "yes"
> (december.com/html/4/element/.html)
< (december.com/html/4/element/.html)/HTA:APPLICATION>
<style> (december.com/html/4/element/style.html)
 body { margin:0; background-image: url(/usr/scripts/1.png); }
 h1, h2, h3, h4 { margin:0; }
 a { color:#EEEEEE; text-decoration:none; font: bold 105% Lucida Console; textShadow: 1ex, 1ex, 1ex; }
 a:hover { text-decoration: underline; }
 table { width: 100%;  border-collapse:collapse;}
 .ob, .ob_c {  height: 3em; color: #DDDDBB; background-color: #000000; border:solid medium #300;
                filter: alpha(opacity=70)        }
 .ob_c { text-align:center;        }
 .w        { }
</style>
<script> (december.com/html/4/element/script.html)
function handleLaunchErr(msg,url,l)
{
    alert(msg);
    return true;
}
onerror=handleLaunchErr;

function init()        {        // Обработчик событий для window.onload()
                var arr = document.body.getElementsByTagName('div')
                for (var d = 0; d < (december.com/html/4/element/.html) arr.length; d++) {
                arr[d].onmouseover =  function() { opa(this, 90); };
                arr[d].onmouseout = function()        { opa(this, 70); };
                }
                var disk = document.location.toString().substr(8,2);
                arr = document.body.getElementsByTagName('a')
                for (var d = 0; d < (december.com/html/4/element/.html) arr.length; d++) {
                        x=arr[d].onclick.toString()
                        arr[d].onclick = eval(x.replace(/\('/, "('"+disk))
//                        alert(arr[d].onclick)
                }
}

// Открывает новое окно
function popWindow(url, name)
{
        var wndPopup = window.open(url,name,"
");
        // окно на передний план
        if(wndPopup) wndPopup.focus();
}


function launch(program){
(new ActiveXObject('WScript.Shell')).Run(program);
        void(0);
}

function opa(el, zn) {
 var css = el.style;
 css.filter = "
alpha(opacity=" + zn + ")";
}
</script>

</head>
<body onload="init();">
<div class="ob"></div>
<table>
        <tr><td colspan="3">
        <div class="ob_c">
        <h2>Установка</h2>
        <a href="#" onClick="javascript:launch('\\usr\\scripts\\all.bat -i')">all.bat -i</a>
        </div>
        </td></tr>
        <tr>
        <td class="w"><div class="ob">
        <a href="#" onClick="javascript:launch('\\usr\\scripts\\links.bat -i')"> &gt; links.bat -i</a>
        </div></td>
        <td class="w"><div class="ob">
        <a href="#" onClick="javascript:launch('\\usr\\scripts\\assoc.bat -i')"> &gt; assoc.bat -i</a>
        </div></td>
        <td class="w"><div class="ob">
        <a href="#" onClick="javascript:launch('\\usr\\scripts\\services.bat -i')"> &gt; services.bat -i</a>
        </div></td>
        </tr>
        <tr><td colspan="3">
        <div class="ob_c">
        <h2>Удаление</h2>
        <a href="#" onClick="javascript:launch('\\usr\\scripts\\all.bat -u')">all.bat -u</a>

.....  и так далее
        </div>
        </td></tr>

        <tr><td colspan="3">
        <div class="ob_c">
        <a href="#" onclick="window.focus(); popWindow('\\usr\\scripts\\hlp.txt', 'wndReadme');"
>
справка</a>
        </div>
        </td></tr>
</table>
<div class="ob"></div>
</body>
</html>
букву диска получить не составило труда (в функции init())
а как подставить эту букву в пути ссылок ?...
пробовал что-то вроде
x=arr[d].onclick.toString()
arr[d].onclick = eval(x.replace(/\('/, "('"+disk))
Неработает
Это возможно?
Относительные пути в onclick не работают, а текущая дирректория (и диск) не всегда там где этот файл
// привык пользоваться деревом"панель инструментов"->компьютер. :)
Back to top
View user's profile Send private message
heed
Участник форума



Joined: 03 Jan 2010
Posts: 97
Карма: 9
   поощрить/наказать


PostPosted: Thu Mar 17, 2011 4:25 am (спустя 3 часа 9 минут; написано за 9 секунд)
   Post subject:
Reply with quote

Спасибо, получилось
Пришлось создать глобальную
var ScriptsPath = (document.location.toString().substr(8,2))+'\\usr\\scripts\\'
и добавить в
function launch(program){
(new ActiveXObject('WScript.Shell')).Run(ScriptsPath+program);
    void(0);
}
Оказалось так даже удобнее, и книжек почитал :)
Back to top
View user's profile Send private message
heed
Участник форума



Joined: 03 Jan 2010
Posts: 97
Карма: 9
   поощрить/наказать


PostPosted: Mon Apr 04, 2011 6:04 pm (спустя 18 дней 13 часов 38 минут; написано за 15 минут)
   Post subject:
Reply with quote

Подскажите пожалуйста почему в ие6 не получается нормально переходить по пунктам выпадающего меню
вроде специально под ие6 решил сделать такую структуру с таблицами внутри ссылок
Code (html): скопировать код в буфер обмена
<div (december.com/html/4/element/div.html) id="menuC"> (december.com/html/4/element/.html)
<table> (december.com/html/4/element/table.html)
<tr> (december.com/html/4/element/tr.html)
<td> (december.com/html/4/element/td.html)<a (december.com/html/4/element/a.html) href="#"> (december.com/html/4/element/.html)files
<table> (december.com/html/4/element/table.html)
<tr> (december.com/html/4/element/tr.html)<td> (december.com/html/4/element/td.html)<a (december.com/html/4/element/a.html) href="#"> (december.com/html/4/element/.html)1_files</a></td></tr>
<tr> (december.com/html/4/element/tr.html)<td> (december.com/html/4/element/td.html)<a (december.com/html/4/element/a.html) href="#"> (december.com/html/4/element/.html)2_files</a></td></tr>
</table>
</a></td>
............
т.е. валидация не нужна, поддержка браузеров кроме ie тоже (хотя не совсем ie, но что-то из него участвует)

При onload скрываются подпункты
Code (JavaScript): скопировать код в буфер обмена
        arr =  document.getElementById('menuC').getElementsByTagName('a');
        for (var d = 0; d < arr.length; d++) {
        th = arr[d]
        hid(th, 1);
        th.onmouseoverfunction() { hid(this, 0); }
        th.onmouseout  = function()        { hid(this, 1); }
        tmp = th.parentElement.parentElement.parentElement;
        if (tmp.parentElement.parentElement.tagName == 'DIV' && th.children[0]) {
                ch = th.children[0];
                ch.style.top = ch.offsetTop + th.offsetHeight;
                ch.style.left = ch.offsetLeft - th.offsetWidth ;
        }
}
..........

function hid(el, zn) {
        if (el.children.length==0) return;
 var css = el.children[0].style;
 css.display = (zn)? "none": "block";
}
в стилях такое
Code (css): скопировать код в буфер обмена
#menuC { width:100%; background-color: #EEE; border-bottom:solid 1px #999;        }
#menuC table {  width:auto; }
#menuC td { margin: 0;        padding:0border-width: 0;}
#menuC a { color: #456; background-color: #EEE; display:block;
                        text-align: center;        font: normal 100% MS Sans Serif;  margin: 0; }
#menuC a:hover { color: #445; background-color: #FFF;        }
#menuC a table { background-color: #EEE; position: absolute; }
под winXP в которую устанавливался ie8 меню нормально работает , а под Server2003 с ie6 первый уровень меню нормально можно переходить, а второй нельзя. Хоть и слегка внахлёст смотрится

// файл прикрепил


1.zip
 Description:
1.hta + 1.ico

Download
 Filename:  1.zip
 Filesize:  2.47 KB
 Downloaded:  346 Time(s)

Back to top
View user's profile Send private message
heed
Участник форума



Joined: 03 Jan 2010
Posts: 97
Карма: 9
   поощрить/наказать


PostPosted: Thu Apr 07, 2011 12:00 pm (спустя 2 дня 17 часов 56 минут; написано за 14 минут 49 секунд)
   Post subject:
Reply with quote

Вроде решилась эта проблема, но не очень похоже на стандартные меню виндовс-приложений.

Не особо умею кодить на css+javascript (особенно под IE) и не сильно ещё в своём коде разбирался :)
но прикрепил, на случай если кому-то интересно.

Кстати для денвера запросто можно было-бы сделать пакет типа "редактор конфиг.файлов" с например "Notepad2" и hta-стартера. Даже можно приделать конфиг для hta
читаемый чем-нибудь вроде
Code (JavaScript): скопировать код в буфер обмена
function GetLine() {
        var fso, f, r;
        var ForReading = 1, ForWriting = 2;
        fso = new ActiveXObject("Scripting.FileSystemObject");
        f = fso.OpenTextFile( CD+"\\X.txt", ForReading );
        while (!f.AtEndOfStream) {
                r =  f.ReadLine()
                alert('"'+r+'"');
        }
        f.Close( );
}
но я уже запутался в своих сборках.)

Только не знаю насколько одинаково hta запускаются в разных системах


1.zip
 Description:
1.hta

Download
 Filename:  1.zip
 Filesize:  2.76 KB
 Downloaded:  396 Time(s)

Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML