#SingleInstance,Force
SetBatchLines,-1
SetWorkingDir,%A_ScriptDir%
onexit,exit
par:=%0%
if !par
{
msgbox,Воспользуйтесь контекстным меню`nлюбого файла в проводнике "Hash MD5".
SplitPath,A_ScriptFullPath,,,Ext
if ext=ahk
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5\command,,"%a_ahkpath%" "%A_ScriptFullPath%" "`%1"
else
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5\command,,%A_ScriptFullPath% "`%1"
exitapp
}
RegRead,old_file,HKCR,*\shell\Hash MD5,tmp1
RegRead,old_MD5,HKCR,*\shell\Hash MD5,tmp2
param=%1%
if param=
file:=A_ScriptFullPath
else
file:=param
MD5:=FileMD5(file)
if (MD5=old_MD5)
chek=Одинаковые файлы...
else
chek=!!! Разные файлы !!!
MsgBox,Текущий файл`n%file%`n`n%MD5%`n%old_MD5%`n`n%old_file%`nПредыдущий файл`n`n`t%chek%
clipboard=%MD5%
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp1,%file%
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp2,%MD5%
FileMD5(sFile="", cSz=4) { ; by SKAN www.autohotkey.com/community/viewtopic.php?t=64211
cSz := (cSz<0||cSz>8) ? 2**22 : 2**(18+cSz), VarSetCapacity( Buffer,cSz,0 )
hFil := DllCall( "CreateFile", Str,sFile,UInt,0x80000000, Int,3,Int,0,Int,3,Int,0,Int,0 )
IfLess,hFil,1, Return,hFil
hMod := DllCall( "LoadLibrary", Str,"advapi32.dll" )
DllCall( "GetFileSizeEx", UInt,hFil, UInt,&Buffer ), fSz := NumGet( Buffer,0,"Int64" )
VarSetCapacity( MD5_CTX,104,0 ), DllCall( "advapi32\MD5Init", UInt,&MD5_CTX )
Loop % ( fSz//cSz + !!Mod( fSz,cSz ) )
DllCall( "ReadFile", UInt,hFil, UInt,&Buffer, UInt,cSz, UIntP,bytesRead, UInt,0 )
, DllCall( "advapi32\MD5Update", UInt,&MD5_CTX, UInt,&Buffer, UInt,bytesRead )
DllCall( "advapi32\MD5Final", UInt,&MD5_CTX )
DllCall( "CloseHandle", UInt,hFil )
Loop % StrLen( Hex:="123456789ABCDEF0" )
N := NumGet( MD5_CTX,87+A_Index,"Char"), MD5 .= SubStr(Hex,N>>4,1) . SubStr(Hex,N&15,1)
Return MD5, DllCall( "FreeLibrary", UInt,hMod )
}
exit:
param=%1%
if param=
file:=A_ScriptFullPath
else
file:=param
MD5:=FileMD5(file)
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp1,%file%
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp2,%MD5%
exitapp