;-- TIME_STAMP 2018-01-10 18:48:04 v 0.1 #Region ;************ Includes ************ #Include #Include #EndRegion ;************ Includes ************ Local $sSciTE = StringReplace(StringRegExpReplace(@AutoItExe, '(.+\\).+', '\1') & 'SciTE\SciTE.exe', '"', '') Local $sNotepadpp = StringRegExpReplace(RegRead('HKEY_CLASSES_ROOT\Applications\notepad++.exe\shell\open\command', ''), '"(.+?)".+', '\1') Local $sNotepad = _WinAPI_ExpandEnvironmentStrings('%SystemRoot%\system32\NOTEPAD.EXE') Local $sEditor = $sSciTE <> '' ? $sSciTE : $sNotepadpp <> '' ? $sNotepadpp : $sNotepad Local $sHelpfiles = 'c:\Program Files (x86)\AutoIt3\Examples\Helpfile\' Local $aFileList = _FileListToArray($sHelpfiles, '*.au3', $FLTA_FILES, False), $aRx, $aTwins[0][7], $iTwins Local $aBadfiles[0], $sBadfiles, $sPath, $sFile, $hFile, $iFileSize, $aAll, $tData For $i = 1 To $aFileList[0] Step 1 $sPath = $sHelpfiles & $aFileList[$i] $hFile = FileOpen($sPath, $FO_READ + $FO_BINARY) $sFile = FileRead($hFile) $iFileSize = @extended FileClose($hFile) If $sFile = '' Then ConsoleWrite('! Error $hFile = ' & $hFile & ' FileRead('&$sPath&')' & @CRLF) Exit 1 EndIf If StringInStr($sFile, 'ABABABABAB') Then ; OEM 866? _ArrayAdd($aBadfiles, $aFileList[$i]) $iTwins = _ArrayAdd($aTwins, $aFileList[$i] & '|' & $iFileSize) $tData = DllStructCreate('byte['&$iFileSize&']') _WinAPI_FillMemory($tData, $iFileSize, $sFile) $aTwins[$iTwins][3] = '0x' & Hex(_WinAPI_ComputeCrc32($tData, $iFileSize), 8) $aRx = StringRegExp(BinaryToString($sFile), ';.+(_WinAPI_.+[^\x0D])', 1) $aTwins[$iTwins][4] = _ArrayToString($aRx, ', ') $aTwins[$iTwins][5] = $aTwins[$iTwins][0] = $aTwins[$iTwins][4] ? 'JA' : 'NEIN' ; Titel ok? $aTwins[$iTwins][6] = 'JA' EndIf Next ; Identische Dateien markieren _ArraySort($aTwins, 0, 0, 0, 2) For $i = 0 To UBound($aTwins) -1 Step 1 $aAll = _ArrayFindAll($aTwins, $aTwins[$i][3], 0, 0, 0, 0, 3) ; Crc32 vergleichen If UBound($aAll) > 1 And _ArraySearch($aTwins, ', ' & $aAll[UBound($aAll) -1], 0, 0, 0, 1, 1, 2) = -1 Then $aTwins[$i][2] = _ArrayToString($aAll, ', ') $i += UBound($aAll) -2 EndIf Next ; Dateien im Editor öffnen - SciTE ? : notepad++ ? : notepad If UBound($aBadfiles) Then _ArrayDisplay($aTwins, '$aTwins', '', 0, Default, 'Name|Bytes|Twins|Crc32|Titel in Zeile 2|OK?|Korrigiert') ;~ Exit Switch True Case StringInStr($sEditor, 'NOTEPAD.EXE') ; dann für jede Datei eine neue Instanz starten Local $aWnds[UBound($aBadfiles)] For $i = 0 To UBound($aBadfiles) -1 Step 1 Run(StringFormat('"%s" "%s"', $sEditor, $aBadfiles[$i]), $sHelpfiles) $aWnds[$i] = WinWait('[CLASS:Notepad]') Next If UBound($aWnds) Then _WinAPI_CascadeWindows($aWnds) Case Else ; bei SciTE und notepad++ können wir alle in einem Rutsch übergeben Run(StringFormat('"%s" %s', $sEditor, _ArrayToString($aBadfiles, ' ', -1, UBound($aBadfiles) -2)), $sHelpfiles, @SW_MAXIMIZE) EndSwitch EndIf