21

Re: Викладаємо різні цікаві JS-скрипти

Відключаємо праву кнопку миші

<script type="text/javascript"> 
document.ondragstart = test; 
document.onselectstart = test; 
document.oncontextmenu = test; 
function test() { 
return false; 
} 
document.oncontextmenu; 
function catchControlKeys(event){ 
var code=event.keyCode ? event.keyCode : event.which ? event.which : null; 
if (event.ctrlKey){ 
// Ctrl+U 
if (code == 117) return false; 
if (code == 85) return false; 
// Ctrl+C 
if (code == 99) return false; 
if (code == 67) return false; 
// Ctrl+A 
if (code == 97) return false; 
if (code == 65) return false; 
} 
} 
</script>

22

Re: Викладаємо різні цікаві JS-скрипти

Кнопка Вперед/Назад,за історією браузера

<FORM>
<INPUT TYPE="button" VALUE="Назад" ONCLICK="history.back(-1)">
<INPUT TYPE="button" VALUE="Вперед" ONCLICK="history.forward(1)">
</FORM>
Подякували: 221VOLT1

23

Re: Викладаємо різні цікаві JS-скрипти

Дата і час (локальний)

<script language="JavaScript">
document.write(new Date().toLocaleString());
</script>
Подякували: 221VOLT1

24

Re: Викладаємо різні цікаві JS-скрипти

Мій HTTP флудер
http://replace.org.ua/topic/4274/

Подякували: 221VOLT1

25

Re: Викладаємо різні цікаві JS-скрипти

Використовуючи PHP, інколи цікаво побачити деревоподібну структуру багатомірного масива. Ця PHP-функція генерує JavaScript, який робить, наприклад, ось таке.

PHP-функція

<?php
function tree_toggle($arr)
{
  $out = print_r($arr, true);

  // replace something like '[element] => <newline> (' with <a href="javascript:toggleDisplay('...');">...</a><div id="..." style="display: none;">
  $out = preg_replace('/([ \t]*)(\[[^\]]+\][ \t]*\=\>[ \t]*[a-z0-9 \t_]+)\n[ \t]*\(/iUe',"'\\1<a href=\"javascript:toggleDisplay(\''.(\$id = substr(md5(rand().'\\0'), 0, 7)).'\');\">\\2</a><div id=\"'.\$id.'\" style=\"display: none;\">'", $out);

  // replace ')' on its own on a new line (surrounded by whitespace is ok) with '</div>
  $out = preg_replace('/^\s*\)\s*$/m', '</div>', $out);

  // print the javascript function toggleDisplay() and then the transformed output
  return '<script language="Javascript">function toggleDisplay(id) { document.getElementById(id).style.display = (document.getElementById(id).style.display == "block") ? "none" : "block"; }</script>'."\n"
  .'<style type="text/css">
    .create{color: green; font-weight: bold;}
    .invalid{color: brown; font-weight: bold;}
  </style>'
  ."\n<pre>$out</pre>";
}

Використання:

<?php $arr = array('one' => array('child1', 'child2', 'child3' => array('more-depth')));

echo tree_toggle($arr);
Подякували: 221VOLT1

26

Re: Викладаємо різні цікаві JS-скрипти

VTrim написав:

Побуквений вивід тексту....
Анімація в...
Відключаємо праву кнопку миші....
Мій HTTP флудер....

І так далі...
досить багато раз розшукував в інтернеті теж різні прикольні штучки, наприклад літаючі кульбабки, сніжинки, таке інше...
і в переважній більшості якщо є демо ефекту я зупинявся і переглядав детальніше код, стиль, анімацію.
Просто код, не презентабельний в тому плані що не видно кінцевого результату; і чи насправді він робочий? Програєшся півгодини, а він то застарілий, чи код пошкоджений, даремно витрачений час,...
практичніше код і демо кінцевого результату... з власного досвіду пошуку ефектів....

27

Re: Викладаємо різні цікаві JS-скрипти

Анатолій написав:
VTrim написав:

Побуквений вивід тексту....
Анімація в...
Відключаємо праву кнопку миші....
Мій HTTP флудер....

І так далі...
досить багато раз розшукував в інтернеті теж різні прикольні штучки, наприклад літаючі кульбабки, сніжинки, таке інше...
і в переважній більшості якщо є демо ефекту я зупинявся і переглядав детальніше код, стиль, анімацію.
Просто код, не презентабельний в тому плані що не видно кінцевого результату; і чи насправді він робочий? Програєшся півгодини, а він то застарілий, чи код пошкоджений, даремно витрачений час,...
практичніше код і демо кінцевого результату... з власного досвіду пошуку ефектів....

Вам дають готовий код,а Вам ще й дему версію завжди подавай?)

28

Re: Викладаємо різні цікаві JS-скрипти

Рухаємо DIV мишкою.

<div id="block" style="border: 1px solid #000; cursor: move; position: absolute;">Перетягни мене</div>
<script type='text/javascript'>
  /* Визначаємо тип браузеру */
  var ie = 0;
  var op = 0;
  var ff = 0;
  var browser = navigator.userAgent;
  if (browser.indexOf("Opera") != -1) op = 1;
  else {
    if (browser.indexOf("MSIE") != -1) ie = 1;
    else {
      if (browser.indexOf("Firefox") != -1) ff = 1;
    }
  }
  var block = document.getElementById("block");
  delta_x = 0;
  delta_y = 0;
  /* Ставимо обробники подій на натиск і відпуск клавіши миші */
  block.onmousedown = saveXY;
  if (op || ff) {
    block.addEventListener("onmousedown", saveXY, false);
  }
  document.onmouseup = clearXY;
  /* При натиску кнопки миші попадаємо в цю функцію */
  function saveXY(obj_event) {
    /* Отримуємо поточні координати курсору */
    if (obj_event) {
      x = obj_event.pageX;
      y = obj_event.pageY;
    }
    else {
      x = window.event.clientX;
      y = window.event.clientY;
      if (ie) {
        y -= 2;
        x -= 2;
      }
    }
    /* Дізнаємось поточні координати блоку */
    x_block = block.offsetLeft;
    y_block = block.offsetTop;
    /* Узнаём смещение */
    delta_x = x_block - x;
    delta_y = y_block - y;
    /* При русі курсору встановлюємо виклик функції moveWindow */
    document.onmousemove = moveBlock;
    if (op || ff)
      document.addEventListener("onmousemove", moveBlock, false);
  }
  function clearXY() {
    document.onmousemove = null; // При відпуску миші убираем обробку події руху миші
  }
  function moveBlock(obj_event) {
    /* Отримуємо нові координати курсору миші */
    if (obj_event) {
      x = obj_event.pageX;
      y = obj_event.pageY;
    }
    else {
      x = window.event.clientX;
      y = window.event.clientY;
      if (ie) {
        y -= 2;
        x -= 2;
      }
    }
    /* Вираховуємо нові координати блоку */
    new_x = delta_x + x;
    new_y = delta_y + y;
    block.style.top = new_y + "px";
    block.style.left = new_x + "px";
  }
</script>

29

Re: Викладаємо різні цікаві JS-скрипти

Дуже корисний сервіс від Google, який по правильному трансформує JS-скрипти до мінімізованого вигляду, причому робить підказки, якщо у вас в коді помилки чи потенційні помилки.

Тут можна завантажити код з URL або ж скопіювати його у вікно ліворуч і натиснути Compile

Подякували: funivan1

30 Востаннє редагувалося ktretyak (13.02.2015 07:51:11)

Re: Викладаємо різні цікаві JS-скрипти

VTrim написав:

Вам дають готовий код,а Вам ще й дему версію завжди подавай?)

Та ні, справді - зараз тих сервісів, які надають шикарні можливості для демонстрації вашого коду, особливо для JS.

Наприклад, чому б не дати лінк на демо, з вашого останнього прикладу? Зручно, наглядно, швидко.

31

Re: Викладаємо різні цікаві JS-скрипти

НТА  windows jscript, Пошук папок із розміром == 0
---------------emptyFoldes.hta--------------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html><head>
<meta name="author" content="XXXX X.X.">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Null Size Folders</title>
<hta:application id="ohtae" applicationname="emptyfolder" border="thick" 
borderstyle="normal" caption="yes" icon="write.exe" maximizebutton="yes" minimizebutton="yes" showintaskbar="yes" singleinstance="yes" sysmenu="yes" 
version="1.0"  windowstate="normal"></hta:application>
<style type="text/css">
   TABLE { 
    width: 100%; 
    border: 4px double black; 
    border-collapse: collapse; 
   }
   TH { 
    text-align: left; 
    background: #ccc; 
    padding: 0; 
    border: 1px solid black;
   }
   TD { 
    padding: 0; 
    border: 1px solid black;
   }
   #www { position: fixed; 
    bottom: 1px;
    right: 1px;
    font-size: 77%;
    font-family: Tahoma;
    color: red; 
    }
</style>
<script>

var fso = new ActiveXObject("Scripting.FileSystemObject");

function Start()
{
    var path = Open();
    //var html = ""; 
    if (!fso.FolderExists(path)){
        document.all.divmain.innerHTML = "<p>Folder Not Exists</p>";
        return;
    }
    document.all.lblopen.innerText = path;
    document.title = "Empty folders in " + path;
    var list = GetFiles(path);
    var i = 0,html = "<table><caption>Empty Folders</caption><tr><th>Name</th></tr>";
    for (i=0;i<list.length;i++)    {
        html+= "<tr><td>"+list[i]+"</td></tr>";
    }
    document.all.divmain.innerHTML = html+"</table>";
}

function GetFiles(folderPath)
{
//var list = new Array();
//var empty = new Array();
var list = [], empty = [];
var f = fso.GetFolder(folderPath);
var folders = new Enumerator(f.SubFolders);
var p = "";
for (; !folders.atEnd(); folders.moveNext())
{
 p=folders.item().Path;
 if (folders.item().Size == 0)
   empty.push(p);
 else
   list.push(p);
}
////////
var currpath = "";
if (list.length==0) return empty;
while (list.length>0)  
{
  p=list.pop();
  f = fso.GetFolder(p);
  folders = new Enumerator(f.SubFolders);
  for (; !folders.atEnd(); folders.moveNext())
  {
    currpath=folders.item().Path;
    if (folders.item().Size == 0)
     empty.push(currpath);
    else 
     list.push(currpath);
  }
}
return empty;  
}


function Open()
{
var objFolder;
 try {
  objFolder = new ActiveXObject("Shell.Application").BrowseForFolder(0, "Выбор папки", 16+1, "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}");
 } catch(e) {
  return "";
 }
 if ((objFolder == null)||(objFolder.Self == undefined)) return "";
 //if ((objFolder.Self.Path == null)||(objFolder.Self.Path == undefined)) return "";
 return objFolder.Self.Path;
}

function init()
{
window.resizeTo(300,450);
Start();
}
window.onload = init;
</script>
</head><body>
<div id="divhead">
<button id="btnopen" onclick="Start()">Open Folder</button>
<label for="btnopen" id="lblopen">...</label>
</div>
<div id="divmain"></div>
<div id="www">Movchan A.V.</div></body></html>
Post's attachments

EmpyFolders.7z 2.11 kb, 207 downloads since 2015-02-18 

Подякували: 0xDADA11C71

32 Востаннє редагувалося ktretyak (19.02.2015 08:49:57)

Re: Викладаємо різні цікаві JS-скрипти

Дуже мала, але досить часто необхідна конструкція, яка дозволяє зменшувати кількість викликів до певної функції зворотнього виклику.

Наприклад, я її використовую для виклику функції автозбереження. Коли користувач вводить текст у textarea, при кожному натисканні клавіші, викликається функція set_auto_save(), в коді якої прописано, що вона викликає іншу функцію call_auto_save() не частіше, ніж 2 секунди після "серії" натискань. Тобто якщо ви 100 разів підряд натиснули певну кнопку і між цими натисканнями не проходило 2 секунди, то call_auto_save() буде викликано один раз в кінці.

 // Ця змінна має обов'язково оголошуватись мінімум на рівень вище,
// ніж код у функції зворотнього виклику
var timer;

var set_auto_save = function()
  {
    if(typeof(timer) != 'undefined')
      clearTimeout(timer);

    timer = setTimeout(call_auto_save, 2000);
  }
Подякували: 221VOLT1

33 Востаннє редагувалося olmovc (23.02.2015 17:49:01)

Re: Викладаємо різні цікаві JS-скрипти

HTA windows jscript

Пінг пк в мережі
налаштуйте в текстовому редакторові в 31 строці
назви пк

var names = ["PC7777HEAD0","PC7777IT4","PC7777IT1","PC7777OPER0","PC7777OPER1","PC7777OPER2","PC7777OPER3","PC7777OPER4","PC7777OPER5","PC7777OPER6","PC7777OPER7","PC7777OPER8","PC7777OPER9","PC7777REPACC1","PC7777REPACC2","PC7777REPACC3"]; 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>ПК які зараз працюють</title>
<hta:application id="ohta" applicationname="ping1" border="thick" 
borderstyle="normal" caption="yes" 
icon="notepad.exe" maximizebutton="yes" minimizebutton="yes" showintaskbar="yes" singleinstance="yes" sysmenu="yes" 
version="1.0"  windowstate="normal"></hta:application>
<style type="text/css">
.yes {color:green;}
.no {color:#788;}
body {width:100%;height:100%;margin:0;padding:0;}
#btnSave {position: absolute;right:0px;bottom:0px;width:25px;}
table {
 /*width: 95%; */
    border-collapse: collapse;  
}
td { border: 1px solid #999; padding: 0; text-align: right;  }
th,caption { border: 1px solid #999;  padding: 0;  /*text-align: right;*/}
</style>
<script type="text/javascript">
var names = ["PC7777HEAD0","PC7777IT4","PC7777IT1","PC7777OPER0","PC7777OPER1","PC7777OPER2","PC7777OPER3","PC7777OPER4","PC7777OPER5","PC7777OPER6","PC7777OPER7","PC7777OPER8","PC7777OPER9","PC7777REPACC1","PC7777REPACC2","PC7777REPACC3"]; 

function Ping(host)
{
    var wmi = GetObject("Winmgmts:"); // "Select StatusCode from Win32_PingStatus Where Address='" + host + "'"
    var eStatus = new Enumerator(wmi.ExecQuery("Select * from Win32_PingStatus Where Address='" + host + "'"));
    var s="";
    var a;
    //for (eStatus;!eStatus.atEnd;eStatus.moveNext())
    //{
    if (eStatus.item().StatusCode == 0)
      return eStatus.item().ProtocolAddress;// new Array()  s += eStatus.item().Address + "..."+ eStatus.item().StatusCode + " " +eStatus.item().ProtocolAddress;
    else
      return "";
    //}
    //eStatus.item().Address
    //eStatus.item().StatusCode == 0;
    //return s
}

function Main()
{
var i,s="",row="<tr>",d=new Date(),table="<table><caption>ПК які зараз("+ d.toLocaleTimeString() +")працюють</caption><tr><th>N</th><th>Name</th><th>Ip</th></tr>";
var ip = "", count=0; 
 for (i=0;i<names.length;i++)
  {
    ip = Ping(names[i]);
    if(ip != "")
    {
    s+= "" + count+ "\t"+names[i] +"\t" +ip +"\r\n";
    row+="<td>"+ ++count +"</td><td class='yes'>"+names[i]+ "</td><td class='yes'>" + ip + "</td></tr>";
    }
    else
    {
    row+="<td> </td><td class='no'>"+names[i]+ "</td><td class='no'>" + ip + "</td></tr>";
    }
  }
  table+= row+"</table>";
  document.all.divresult.innerHTML = table;
  document.title = "ПК які зараз("+ d.toLocaleTimeString() +")працюють";
  window.clipboardData.setData("Text","N\tNAME\tIP"+s);
}
 
function init()
{
window.resizeTo(320,500);
Main();
}
window.onload = init;
</script></head><body><div id="divresult">..Чекаємо !.........</div>
<button id="btnSave" onclick="Main()">&#8594;</button>
</html>
Post's attachments

Ping.7z 1.47 kb, 216 downloads since 2015-02-23 

Подякували: 0xDADA11C7, Chemist-i2

34

Re: Викладаємо різні цікаві JS-скрипти

Підбір паролю до забутого архіву HTA windows jscript + 7-zip
в 21 сторці ввести повний шлях до архіватора 7-zip

var ZIP7 = "D:\\tools\\7-Zip\\7z.exe";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>PasswordFit Підбір забутого паролю до архіву</title>
<hta:application id="ohta" applicationname="passwordfit" border="thick" 
borderstyle="normal" caption="yes" icon="write.exe" maximizebutton="yes" minimizebutton="yes" showintaskbar="yes" singleinstance="yes" sysmenu="yes" 
version="1.0"  windowstate="normal"></hta:application>
<style type="text/css">
body {background-color: #FFFFBF;/*#AEE9E8;*/ }
#btnOpenFile {clear:both; width:100% }
#txtLiterals {clear:both; width:100% }
h4,h5 {margin-bottom:1px; margin-top:3px; color: #993479;}
/* h4 {background-color: #F0D8FF;color: #156476;font: 1.1em Verdana, Geneva, Arial, Helvetica, sans-serif;padding: 0.1em;} */
input {color: #00008B; background-color:#E8FFE8; border: 1px solid #00008B; font: 1em Vernada, sans-serif;}
#outbox {border:2px inset #00008B; clear: both; }
#lblHead {text-align:center; width:100%; border-bottom:3px groove green; }
.div1 {clear:left;margin: 0;padding: 0;padding-top: 0.2em; }
label {float: left;width: 50%;font: bold 0.9em Arial, Helvetica, sans-serif;}
#lblOpenFile {width: 90%;}
</style>
<script>
var ZIP7 = "D:\\tools\\7-Zip\\7z.exe";
var mes = "";
var min = 1;
var max = 1;
var llen = 1;
var fileName = "_";
var literals = "value";

function txtPwdShow(txtp, txtc)
{
    txtPwd.value = txtp;
    txtCount.value = txtc;
}

function Start()
{
    min = parseInt(sMin.options[sMin.selectedIndex].value);
    max = parseInt(sMax.options[sMax.selectedIndex].value);
    llen = parseInt(sLen.options[sLen.selectedIndex].value);
    fileName = btnOpenFile.value;
    literals = txtLiterals.value;
    var startKnow = txtwellknown.value;

    if((parseInt(min * max) < 1) || (max < min))
    {
        alert("max < min ???");
        return;
    }

    var fso = new ActiveXObject("Scripting.FileSystemObject");
    if(!fso.FileExists(fileName))
    {
        alert("File\n" + fileName + "\tnot Exists");
        window.close();
    }

    if(!fso.FileExists(ZIP7))
    {
        alert("File\n" + ZIP7 + "\tnot Exists");
        window.close();
    }


    var message = "Файл: " + fileName + "\r\nСловник: " + literals + "\nДовжина паролю: min: " + min + "; max: " + max + "; len: " + llen+"\r\n";
    outbox.innerText = message;

    var d = new Date();
    var t1 = d.getTime();

    var icount = 0;
    var PWD = "";

    if(llen > 0)
    {
        var maxx = Math.floor(Math.pow(literals.length, llen));
        for(var e = 0; e < maxx; e++)
        {
            var conv = ConvertFrom(e);
            var lenConv = conv.length;
            icount++;
            if(startKnow.length > 0)
            {
                PWD = startKnow + wt(llen, lenConv) + conv;
            }
            else
            {
                PWD = wt(llen, lenConv) + conv;
            }
            if(TestRar(PWD, fileName))
            {
                txtPwdShow(PWD, icount.toString(10));
                PWD = "\n\tЗнайдено = " + PWD;
                break;
            }
            else
            {
                txtPwdShow(PWD, icount.toString(10));
                PWD = "Sorry!\n\tPassWORD Not Found\n\t\tEnd.";
            }
        }
    }
    else
    {
        var yesNo = false;
        for(var j = min; j <= max; j++)
        {
            if(yesNo)
            {
                break;
            }
            //var yesNo = false;
            var maxx = Math.floor(Math.pow(literals.length, j));
            for(var e = 0; e < maxx; e++)
            {
                var conv = ConvertFrom(e);
                var lenConv = conv.length;
                //PWD = wt(j, lenConv) + conv;
                if(startKnow.length > 0)
                {
                    PWD = startKnow + wt(j, lenConv) + conv;
                }
                else
                {
                    PWD = wt(j, lenConv) + conv;
                }
                icount++;
                if(TestRar(PWD, fileName))
                {
                    txtPwdShow(PWD, icount.toString(10));
                    PWD = " Знайдено = " + PWD;
                    alert(PWD);
                    yesNo = true;
                    break;
                }
                else
                {
                    txtPwdShow(PWD, icount.toString(10));
                    PWD = "Sorry!\n\tПароль не  знайдено\n\t\tEnd.";
                }
            }
        }
    }

    var d2 = new Date();
    var t2 = d2.getTime();

    d = (t2 - t1) / (1000 * 60);
    outbox.innerText += "\r\nЗатрачений час: " + d.toString(10) + " хв.";
    outbox.innerText += "\r\nПароль " + PWD;
}

function wt(l1, l2)
{
    var w = literals.substring(0, 1);
    var countw = l1 - l2;
    var resStr = "";
    for(var cc = 0; cc < countw; cc++)
        resStr = resStr + w;
    return resStr;
}

function ConvertFrom(num)
{
    var lenArray = 0;
    if(num == 0)
        lenArray = 1;
    else
        lenArray = Math.floor(Math.log(num) / Math.log(literals.length)) + 1;
    var buffer = new Array(lenArray);
    var i = buffer.length - 1;
    do {
        var m = Math.floor(num % literals.length);
        buffer[i--] = literals.substring(m, m + 1); // [num % literals.length];
        num = Math.floor(num / literals.length);
    }    while (num > 0);
    return buffer.join('');
}

function TestRar(password, fileName)
{
    var cmdStr = ZIP7+" t -p";
    //alert(fileName)
    var WSHShell = new ActiveXObject("WScript.Shell");
    //var result =  WSHShell.Run("rar.exe t -y -p" + password + " " + fileName, 0, true);
    var result = parseInt(WSHShell.Run(cmdStr + password + " " + fileName, 0, true), 10);
    if(result == 0)
        return true;
    else
        return false;
}
//====================================================

function sLen_Change()
{
    sMax.selectedIndex = sLen.selectedIndex;
    sMin.selectedIndex = sLen.selectedIndex;
}

function init()
{
    window.resizeTo(430, 400);
}
window.onload = init;
</script>
</head><body>
  <div id="ibody">
    <label for="btnOpenFile" id="lblOpenFile"><h5>Виберіть файл архіву</h5></label>
    <input type="file" id="btnOpenFile" onclick="">
    <label for="txtLiterals"><h5>Ввести символи</h5></label>
    <input type="text" value="abcd" id="txtLiterals">
     <div class="div1">
    <label for="txtwellknown">Відома частина паролю</label>
    <input type="text" value="" id="txtwellknown">
    </div>
    <!-- <nobr> -->
    <div class="div1">
    <label for="sMin">Мiнiмальна довжина</label>
    <select id="sMin">
       <option value="1" selected="selected">1</option>
       <option value="2" >2</option>
       <option value="3" >3</option>
       <option value="4" >4</option>
       <option value="5" >5</option>
       <option value="6" >6</option>
       <option value="7" >7</option>
       <option value="8" >8</option>
       <option value="9" >9</option>
       <option value="10" >10</option>
       <option value="11" >11</option>
    </select>
     </div>
     <div class="div1">
    <label for="sMax">Максимальна довжина</label>
    <select id="sMax">
       <option value="1" selected="selected">1</option>
       <option value="2" >2</option>
       <option value="3" >3</option>
       <option value="4" >4</option>
       <option value="5" >5</option>
       <option value="6" >6</option>
       <option value="7" >7</option>
       <option value="8" >8</option>
       <option value="9" >9</option>
       <option value="10" >10</option>
       <option value="11" >11</option>
    </select>
     </div>
     <div class="div1">
    <label for="sLen">Довжина паролю</label>
    <select id="sLen" onchange="sLen_Change()">
       <option value="0" selected="selected">0</option>
       <option value="1">1</option>
       <option value="2" >2</option>
       <option value="3" >3</option>
       <option value="4" >4</option>
       <option value="5" >5</option>
       <option value="6" >6</option>
       <option value="7" >7</option>
       <option value="8" >8</option>
       <option value="9" >9</option>
       <option value="10" >10</option>
       <option value="11" >11</option>
    </select>
    </div>  
     <hr />
<button id="btnStart" onclick="Start()">Вперед</button>  <!-- <br /> -->
    <div class="div1">
      <label for="txtCount">Лічильник</label>
      <input type="text" value="" id="txtCount"/>
    </div>
    <div class="div1">
      <label for="txtPwd">Поточний пароль</label>
      <input type="text" value="" id="txtPwd"/>
    </div>
   </div>
<div id="outbox"></div></body></html>
Post's attachments

PasswordArhive01.7z 2.58 kb, 212 downloads since 2015-02-25 

35

Re: Викладаємо різні цікаві JS-скрипти

olmovc написав:

Підбір паролю до забутого архіву HTA windows jscript + 7-zip
в 21 сторці ввести повний шлях до архіватора 7-zip

Прихований текст
var ZIP7 = "D:\\tools\\7-Zip\\7z.exe";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>PasswordFit Підбір забутого паролю до архіву</title>
<hta:application id="ohta" applicationname="passwordfit" border="thick" 
borderstyle="normal" caption="yes" icon="write.exe" maximizebutton="yes" minimizebutton="yes" showintaskbar="yes" singleinstance="yes" sysmenu="yes" 
version="1.0"  windowstate="normal"></hta:application>
<style type="text/css">
body {background-color: #FFFFBF;/*#AEE9E8;*/ }
#btnOpenFile {clear:both; width:100% }
#txtLiterals {clear:both; width:100% }
h4,h5 {margin-bottom:1px; margin-top:3px; color: #993479;}
/* h4 {background-color: #F0D8FF;color: #156476;font: 1.1em Verdana, Geneva, Arial, Helvetica, sans-serif;padding: 0.1em;} */
input {color: #00008B; background-color:#E8FFE8; border: 1px solid #00008B; font: 1em Vernada, sans-serif;}
#outbox {border:2px inset #00008B; clear: both; }
#lblHead {text-align:center; width:100%; border-bottom:3px groove green; }
.div1 {clear:left;margin: 0;padding: 0;padding-top: 0.2em; }
label {float: left;width: 50%;font: bold 0.9em Arial, Helvetica, sans-serif;}
#lblOpenFile {width: 90%;}
</style>
<script>
var ZIP7 = "D:\\tools\\7-Zip\\7z.exe";
var mes = "";
var min = 1;
var max = 1;
var llen = 1;
var fileName = "_";
var literals = "value";

function txtPwdShow(txtp, txtc)
{
    txtPwd.value = txtp;
    txtCount.value = txtc;
}

function Start()
{
    min = parseInt(sMin.options[sMin.selectedIndex].value);
    max = parseInt(sMax.options[sMax.selectedIndex].value);
    llen = parseInt(sLen.options[sLen.selectedIndex].value);
    fileName = btnOpenFile.value;
    literals = txtLiterals.value;
    var startKnow = txtwellknown.value;

    if((parseInt(min * max) < 1) || (max < min))
    {
        alert("max < min ???");
        return;
    }

    var fso = new ActiveXObject("Scripting.FileSystemObject");
    if(!fso.FileExists(fileName))
    {
        alert("File\n" + fileName + "\tnot Exists");
        window.close();
    }

    if(!fso.FileExists(ZIP7))
    {
        alert("File\n" + ZIP7 + "\tnot Exists");
        window.close();
    }


    var message = "Файл: " + fileName + "\r\nСловник: " + literals + "\nДовжина паролю: min: " + min + "; max: " + max + "; len: " + llen+"\r\n";
    outbox.innerText = message;

    var d = new Date();
    var t1 = d.getTime();

    var icount = 0;
    var PWD = "";

    if(llen > 0)
    {
        var maxx = Math.floor(Math.pow(literals.length, llen));
        for(var e = 0; e < maxx; e++)
        {
            var conv = ConvertFrom(e);
            var lenConv = conv.length;
            icount++;
            if(startKnow.length > 0)
            {
                PWD = startKnow + wt(llen, lenConv) + conv;
            }
            else
            {
                PWD = wt(llen, lenConv) + conv;
            }
            if(TestRar(PWD, fileName))
            {
                txtPwdShow(PWD, icount.toString(10));
                PWD = "\n\tЗнайдено = " + PWD;
                break;
            }
            else
            {
                txtPwdShow(PWD, icount.toString(10));
                PWD = "Sorry!\n\tPassWORD Not Found\n\t\tEnd.";
            }
        }
    }
    else
    {
        var yesNo = false;
        for(var j = min; j <= max; j++)
        {
            if(yesNo)
            {
                break;
            }
            //var yesNo = false;
            var maxx = Math.floor(Math.pow(literals.length, j));
            for(var e = 0; e < maxx; e++)
            {
                var conv = ConvertFrom(e);
                var lenConv = conv.length;
                //PWD = wt(j, lenConv) + conv;
                if(startKnow.length > 0)
                {
                    PWD = startKnow + wt(j, lenConv) + conv;
                }
                else
                {
                    PWD = wt(j, lenConv) + conv;
                }
                icount++;
                if(TestRar(PWD, fileName))
                {
                    txtPwdShow(PWD, icount.toString(10));
                    PWD = " Знайдено = " + PWD;
                    alert(PWD);
                    yesNo = true;
                    break;
                }
                else
                {
                    txtPwdShow(PWD, icount.toString(10));
                    PWD = "Sorry!\n\tПароль не  знайдено\n\t\tEnd.";
                }
            }
        }
    }

    var d2 = new Date();
    var t2 = d2.getTime();

    d = (t2 - t1) / (1000 * 60);
    outbox.innerText += "\r\nЗатрачений час: " + d.toString(10) + " хв.";
    outbox.innerText += "\r\nПароль " + PWD;
}

function wt(l1, l2)
{
    var w = literals.substring(0, 1);
    var countw = l1 - l2;
    var resStr = "";
    for(var cc = 0; cc < countw; cc++)
        resStr = resStr + w;
    return resStr;
}

function ConvertFrom(num)
{
    var lenArray = 0;
    if(num == 0)
        lenArray = 1;
    else
        lenArray = Math.floor(Math.log(num) / Math.log(literals.length)) + 1;
    var buffer = new Array(lenArray);
    var i = buffer.length - 1;
    do {
        var m = Math.floor(num % literals.length);
        buffer[i--] = literals.substring(m, m + 1); // [num % literals.length];
        num = Math.floor(num / literals.length);
    }    while (num > 0);
    return buffer.join('');
}

function TestRar(password, fileName)
{
    var cmdStr = ZIP7+" t -p";
    //alert(fileName)
    var WSHShell = new ActiveXObject("WScript.Shell");
    //var result =  WSHShell.Run("rar.exe t -y -p" + password + " " + fileName, 0, true);
    var result = parseInt(WSHShell.Run(cmdStr + password + " " + fileName, 0, true), 10);
    if(result == 0)
        return true;
    else
        return false;
}
//====================================================

function sLen_Change()
{
    sMax.selectedIndex = sLen.selectedIndex;
    sMin.selectedIndex = sLen.selectedIndex;
}

function init()
{
    window.resizeTo(430, 400);
}
window.onload = init;
</script>
</head><body>
  <div id="ibody">
    <label for="btnOpenFile" id="lblOpenFile"><h5>Виберіть файл архіву</h5></label>
    <input type="file" id="btnOpenFile" onclick="">
    <label for="txtLiterals"><h5>Ввести символи</h5></label>
    <input type="text" value="abcd" id="txtLiterals">
     <div class="div1">
    <label for="txtwellknown">Відома частина паролю</label>
    <input type="text" value="" id="txtwellknown">
    </div>
    <!-- <nobr> -->
    <div class="div1">
    <label for="sMin">Мiнiмальна довжина</label>
    <select id="sMin">
       <option value="1" selected="selected">1</option>
       <option value="2" >2</option>
       <option value="3" >3</option>
       <option value="4" >4</option>
       <option value="5" >5</option>
       <option value="6" >6</option>
       <option value="7" >7</option>
       <option value="8" >8</option>
       <option value="9" >9</option>
       <option value="10" >10</option>
       <option value="11" >11</option>
    </select>
     </div>
     <div class="div1">
    <label for="sMax">Максимальна довжина</label>
    <select id="sMax">
       <option value="1" selected="selected">1</option>
       <option value="2" >2</option>
       <option value="3" >3</option>
       <option value="4" >4</option>
       <option value="5" >5</option>
       <option value="6" >6</option>
       <option value="7" >7</option>
       <option value="8" >8</option>
       <option value="9" >9</option>
       <option value="10" >10</option>
       <option value="11" >11</option>
    </select>
     </div>
     <div class="div1">
    <label for="sLen">Довжина паролю</label>
    <select id="sLen" onchange="sLen_Change()">
       <option value="0" selected="selected">0</option>
       <option value="1">1</option>
       <option value="2" >2</option>
       <option value="3" >3</option>
       <option value="4" >4</option>
       <option value="5" >5</option>
       <option value="6" >6</option>
       <option value="7" >7</option>
       <option value="8" >8</option>
       <option value="9" >9</option>
       <option value="10" >10</option>
       <option value="11" >11</option>
    </select>
    </div>  
     <hr />
<button id="btnStart" onclick="Start()">Вперед</button>  <!-- <br /> -->
    <div class="div1">
      <label for="txtCount">Лічильник</label>
      <input type="text" value="" id="txtCount"/>
    </div>
    <div class="div1">
      <label for="txtPwd">Поточний пароль</label>
      <input type="text" value="" id="txtPwd"/>
    </div>
   </div>
<div id="outbox"></div></body></html>

А яка швидкість?

36 Востаннє редагувалося olmovc (25.02.2015 14:43:59)

Re: Викладаємо різні цікаві JS-скрипти

мабуть некоректне питання
залежить від словника від довжини паролю
ось результат на моєму пк
Файл: D:\my\MyVBS\RARPassw\testfile.zip
Словник: abcd159
Довжина паролю: min: 1; max: 3; len: 0
Затрачений час: 0.2465 хв.
Пароль  Знайдено = 159

37

Re: Викладаємо різні цікаві JS-скрипти

Хоча це не js-скрипт, але згодиться при відлагодженні js-скриптів.

Метод console.log() дозволяє форматувати вивід логів за допомогою CSS

Подякували: Chemist-i, bunyk2

38

Re: Викладаємо різні цікаві JS-скрипти

ktretyak написав:

Хоча це не js-скрипт, але згодиться при відлагодженні js-скриптів.

Метод console.log() дозволяє форматувати вивід логів за допомогою CSS

Мені також подобається:

console.table([{a: 2, b: 3}, {a: 3, b: 4}])
Подякували: 0xDADA11C71

39

Re: Викладаємо різні цікаві JS-скрипти

Все почалось з цієї теми, в результаті, здається я написав досить компактний та цікавий код, який дозволяє розріджувати запити, щоб вони йшли на бекенд більш розмірено, не "всі 100 шт. за пів секунди":

var
nextTime = 0
,timeout = 1000;
 
var func = function(callback)
{
  nextTime += timeout;
  
  setTimeout
  (
    function()
    {
      nextTime -= timeout;
      callback();
    }
    ,nextTime
  );
}

Викликати так

function callback(){ console.log('called callback!') }

func(callback);
func(callback);
func(callback);
func(callback);
func(callback);
func(callback);

40 Востаннє редагувалося ktretyak (23.03.2016 06:34:43)

Re: Викладаємо різні цікаві JS-скрипти

1. Модуль для Node.js ip, який видає інформацію про IP-адресу.

2. Модуль для Node.js geoip-lite, який видає інформацію, стосовно приналежності до країни конкретної IP-адреси. База даних в бінарниках