- #include <GUIConstants.au3>
- #include <WindowsConstants.au3>
- #include <EditConstants.au3>
- #include <Array.au3>
- #include <ListboxConstants.au3>
- #Include <GuiListBox.au3>
- #NoTrayIcon
- Dim $Width = 400,$Height = 400,$Distance = 15
- Dim $Reg = "HKCUSoftwareDangAnimeReName"
- $GUI = GUICreate ( "MD5", $Width*2+($Distance*5), $Height+($Distance*5)+5)
- $MD5_List_1 = GUICtrlCreateList ( "", $Distance, $Distance*3, $Width, $Height-5, $LBS_NOTIFY)
- $MD5_List_2 = GUICtrlCreateList ( "", $Width+($Distance*4), $Distance*3, $Width, $Height-5, $LBS_NOTIFY)
- $MD5_List_Cnt_1 = GUICtrlCreateLabel ( "", $Distance*8, $Distance, 85, 25)
- GUICtrlSetFont ( -1, 10, 800)
- $MD5_List_Cnt_2 = GUICtrlCreateLabel ( "", ($Distance*11)+$Width, $Distance, 85, 25)
- GUICtrlSetFont ( -1, 10, 800)
- $btn1 = GUICtrlCreateButton ( "瀏覽", $Distance, $Distance-5, 100, 25)
- $btn2 = GUICtrlCreateButton ( "瀏覽", ($Distance*4)+$Width, $Distance-5, 100, 25)
- GUISetState ()
- While 1
- $msg = GUIGetMsg()
- Switch $msg
- Case $GUI_EVENT_CLOSE
- Exit
- Case $btn1
- _FileOpen_1()
- Case $btn2
- _FileOpen_2()
- EndSwitch
- WEnd
- Func _FileOpen_1()
- GUICtrlSetData ( $MD5_List_1, "")
- Local $str, $FileRut
- $input = FileOpenDialog ( "", @ScriptDir&"", "任何檔案 (*.*)", 7)
- If $input = "" Then Return
- $tmpStr = StringSplit ( $input, "|", 2)
- If UBound ($tmpStr) <> 1 Then
- Global $MD5_1[UBound ($tmpStr)-1]
- For $i = 1 To UBound ($tmpStr)-1
- $FileRut = $tmpStr[0]&""&$tmpStr[$i]
- $MD5_1[$i-1] = _MD5($FileRut)
- Next
- Else
- Global $MD5_1[1],$strtme
- $MD5_1[0] = _MD5($tmpStr[0])
- EndIf
- For $i = 0 To UBound ($MD5_1, 1)-1
- $str = StringFormat ( "%s%s|", $str, $MD5_1[$i])
- Next
- GUICtrlSetData ( $MD5_List_1, $str)
- GUICtrlSetData ( $MD5_List_Cnt_1, StringFormat ( "%d個", UBound ($MD5_1, 1)))
- EndFunc
- Func _FileOpen_2()
- GUICtrlSetData ( $MD5_List_2, "")
- Local $str, $FileRut
- $input = FileOpenDialog ( "", @ScriptDir&"", "任何檔案 (*.*)", 7)
- If $input = "" Then Return
- $tmpStr = StringSplit ( $input, "|", 2)
- If UBound ($tmpStr) <> 1 Then
- Global $MD5_2[UBound ($tmpStr)-1]
- For $i = 1 To UBound ($tmpStr)-1
- $FileRut = $tmpStr[0]&""&$tmpStr[$i]
- $MD5_2[$i-1] = $FileRut
- $MD5_2[$i-1] = _MD5($FileRut)
- Next
- Else
- Global $MD5_2[1],$strtme
- $MD5_2[0] = _MD5($tmpStr[0])
- EndIf
- For $i = 0 To UBound ($MD5_2, 1)-1
- $str = StringFormat ( "%s%s|", $str, $MD5_2[$i])
- Next
- GUICtrlSetData ( $MD5_List_2, $str)
- GUICtrlSetData ( $MD5_List_Cnt_2, StringFormat ( "%d個", UBound ($MD5_2, 1)))
- EndFunc
- Func _MD5($sFile)
- Local Const $CALG_MD2 = 0x8001
- Local Const $CALG_MD4 = 0x8002
- Local Const $CALG_MD5 = 0x8003
- Local Const $CALG_SHA1 = 0x8004
- $hFile = FileOpen ($sFile, 16)
- $bData = FileRead ($hFile)
- $iLength = BinaryLen ($bData)
- FileClose($hFile)
- $tBuffer = DllStructCreate("byte[" & $iLength & "]")
- $pBuffer = DllStructGetPtr($tBuffer)
- DllStructSetData($tBuffer, 1, $bData)
- $iResult = DllCall ("Crypt32.dll", "int", "CryptHashCertificate", "hWnd", 0, "dword", $CALG_MD5, "dword", 0, "ptr", $pBuffer, "dword", $iLength, "ptr", 0, "dword*", 0)
- $tResult = DllStructCreate ("byte[" & $iResult[7] & "]")
- $pResult = DllStructGetPtr ($tResult)
- $iResult = DllCall ("Crypt32.dll", "int", "CryptHashCertificate", "hWnd", 0, "dword", $CALG_MD5, "dword", 0, "ptr", $pBuffer, "dword", $iLength, "ptr", $pResult, "dword*", $iResult[7])
- If $iResult[0] <> 0 Then Return StringTrimLeft (DllStructGetData ($tResult, 1), 2)
- $tBuffer = 0
- $tResult = 0
- EndFunc
複製代碼 |