1

Тема: HTA: вычисление CRC32 строки или файла

<html>
<head>
<meta http-equiv=content-type content="text-html; charset=windows-1251">
<meta http-equiv=MSThemeCompatible content=yes>
<hta:application
    id=HTAApp
    applicationName=CRC32_Calculator
    icon=keymgr.dll
    maximizeButton=no
    innerBorder=no
    scroll=no
    selection=no
    contextMenu=no
    singleinstance=yes
    version=1.0
    author=mozers™
    email=mozers@mail.ru
    icq=256106175
>
<style type="text/css">
    body, table {background-color:threedface; overflow:hidden; margin:2px;}
    body, input, table, legend {font-family:MS Sans Serif; font-size:6pt;}
    legend, label {color:highlight;}
    legend {font-weight:bold;}
</style>
<script language="VBScript">
    Function vbASCII(s)
        vbASCII = Asc(s)
    End Function
    Function vbHex(i)
        vbHex = Hex(i)
    End Function
</script>
<script language="JavaScript" type="text/javascript">
    window.resizeTo(400, 128);
    document.title = HTAApp.applicationName.replace(/_/g,' ') + ' v.' + HTAApp.version;

    var crcTable = [];
    function crcTableCalc() {
        for(var i=0; i<256; i++){
            var c = i;
            for(var j=0; j<8; j++) c=(c&1) ? 0xEDB88320^(c>>>1) : c>>>1;
            crcTable[i] = c;
        }
    }

    function crc32 (str) {
        var c = 0xFFFFFFFF;
        for(var i=0; i<str.length; i++) c=crcTable[(c^vbASCII(str.charAt(i)))&0xFF]^(c>>>8);
        return c^0xFFFFFFFF;
    }

    function ReadBinaryFile(filename) {
        var Stream = new ActiveXObject("ADODB.Stream");
        with (Stream) {
            type=2;
            charset='ISO-8859-1';
            open();
            loadFromFile(filename);
            var content=readText();
            close();
        }
        return content;
    }

    function GetCRCfile(){
        var fname = iFile.value;
        var bin_str=ReadBinaryFile(fname);
        var result = crc32(bin_str);
        iDec.value = result;
        iHex.value = vbHex(result);
    }

    function GetCRCtext(){
        var str=iText.value;
        var result = crc32(str);
        iDec.value = result;
        iHex.value = vbHex(result);
    }

    crcTableCalc();
</script>
</head>
<body>
<table style="width:100%;" cellpadding="0" cellspacing="2">
    <tr><td>Text:
        <td style="width:100%;"><input id="iText" style="width:100%;" type="text">
        <td><input type=button onClick="GetCRCtext()" value="Calculate" hidefocus>
    <tr><td>File:
        <td style="width:100%;"><input id="iFile" style="width:100%;" type="file">
        <td><input type=button onClick="GetCRCfile()" value="Calculate" hidefocus>
    <tr>
        <td colspan="3">
        <fieldset><legend>&nbsp;CRC32&nbsp;</legend>
            DEC:&nbsp;<input id="iDec" style="width:150px;" type="text">
            &nbsp;&nbsp;&nbsp;
            HEX:&nbsp;<input id="iHex" style="width:150px;" type="text">
        </fieldset>
</table>
</body>
</html>

Автор идеи — mozers.

Основано на: Koders Code Search: crc32.js - JavaScript

2 (изменено: mozers, 2016-01-06 12:51:09)

Re: HTA: вычисление CRC32 строки или файла

Последняя версия находится тут

3

Re: HTA: вычисление CRC32 строки или файла

Без гарантий. Используете на свой страх и риск.

Подсчет CRC32 файла на VBScript. Для запуска нужно перетащить значок файла на значок скрипта.

Потребуется зарегистрированная библиотека scrsvc.dll

Win7 x32

VBScript:


Option Explicit

Const FILE_READ_ATTRIBUTES = &H80
Const FILE_READ_DATA = 1
Const OPEN_EXISTING = 3
Const FILE_ATTRIBUTE_READONLY = 1
Const FILE_ATTRIBUTE_NORMAL = &H80

Const BUF_SIZE = 65536

'---------------------------------------------------------------------------------
Dim oScrSvc
Dim oArgs
Dim sFilePath, sFileName
Dim hFile, lSize
Dim chunk, div
Dim crc
Dim buf, lRet
Dim ptr, plRet
Dim SZ
Dim u
Dim hRes

'---------------------------------------------------------------------------------
Set oScrSvc = CreateObject("ScriptService.Service")

Set oArgs = WScript.Arguments
If oArgs.Length = 0 Then WScript.Quit()

sFilePath = CStr(oArgs.Item(0))
sFileName = Right(sFilePath,Len(sFilePath)-InStrRev(sFilePath,"\"))
'/sFolderPath = Left(sFilePath,InStrRev(sFilePath,"\"))


'/Открыть файл только для чтения/
'---------------------------------------------------------------------------------
With oScrSvc
	.set_strarg 0, sFilePath, False
	.set_vararg 1, FILE_READ_DATA + FILE_READ_ATTRIBUTES
	.set_vararg 2, 0	'share mode
	.set_vararg 3, 0	'security attributes
	.set_vararg 4, OPEN_EXISTING
	.set_vararg 5, FILE_ATTRIBUTE_READONLY
	.set_vararg 6, 0
	hFile = .api_call ("KERNEL32.DLL","CreateFileA",7)

	.set_vararg 0, hFile
	.set_vararg 1, 0
	lSize = .api_call ("KERNEL32.DLL","GetFileSize",2)
End With

'/Подсчет CRC32/
'---------------------------------------------------------------------------------
chunk = lSize Mod BUF_SIZE
div = (lSize - chunk)/BUF_SIZE
crc = 0
SZ = BUF_SIZE

buf = String(SZ/2,Chr(32))
ptr = oScrSvc.struct_setval(buf)

lRet = String(2,Chr(32))
plRet = oScrSvc.struct_setval(lRet)


For u=0 To div
	If u=div Then SZ=chunk
	With oScrSvc
		.set_vararg 0, hFile
		.set_vararg 1, ptr
		.set_vararg 2, SZ
		.set_vararg 3, plRet
		.set_vararg 4, 0
		hRes = .api_call ("KERNEL32.DLL","ReadFile",5, 1)

		.set_vararg 0, crc
		.set_vararg 1, ptr
		.set_vararg 2, SZ
		crc = .api_call ("NTDLL.DLL","RtlComputeCrc32",3, 2)
	End With
Next

'---------------------------------------------------------------------------------
oScrSvc.set_vararg 0, hFile
hRes = oScrSvc.api_call ("KERNEL32.DLL","CloseHandle",1)

'---------------------------------------------------------------------------------
MsgBox "Файл: " & sFileName & vbCRLF & "Размер(bytes): " & lSize & vbCRLF & "CRC32: " & Hex(crc),vbSystemModal + vbInformation	
WScript.Quit()