#Region - TimeStamp
; 2011-09-17 13:12:56 v 1.3
#EndRegion - TimeStamp
; Local $gifPath1 = 'C:WINDOWSsystem32oobeimagesmerlin.gif' ; -- XP
; Local $gifPath2 = 'C:WINDOWSsystem32oobeimageshand2.gif' ; -- XP
Local $gifPath1 = 'C:WindowsSystem32migwizPostMigResWebbase_imagesSystem.gif' ; -- Win7
Local $gifPath2 = 'C:WindowsSystem32migwizPostMigResWebbase_imagesPrograms.gif' ; -- Win7
_CreateTmpBinaryCall
($gifPath1 & '|' & $gifPath2)
;==================================================================================================
; Function Name..: _CreateTmpBinaryCall($sPath = '', $sBin='$bData', $sSavePath = @ScriptDir, $fFilesDelete = True)
; Description....: Erzeugt einen Binärstring der übergebenen Datei/en und erstellt eine Funktion um
; durch Aufruf des Strings die Datei temporär zu erstellen.
; Parameter(s)...: $sPath - Pfad der Datei/en, von der/denen ein Binärstring erstellt werden soll; GUIDataSeparatorChar als Trenner
; optional.: $sBin - Name der Variablen, die den String aufnehmen soll, max. Länge Variablenname: 89 Zeichen (Standard = $bData)
; optional.: $sSavePath - Pfad, in dem die temporären Dateien abgelegt werden (abschließender Backslash nicht zwingend, skriptgesteuert)
; • Default od. Leerstring setzt das Makro @ScriptDir ein (Standard)
; • 'tmp' setzt das Makro @TempDir ein
; Achtung: Hier KEIN Makro direkt verwenden, da dann der Pfad sofort gewandelt wird, statt das Makro in die Funktionen einzufügen
; $fFilesDelete - (True/False) Switch der festlegt, ob die Funktion zum Löschen der Tmp-Daten bei Skriptende erstellt werden soll
; Return Value(s): Erfolg - 1 Ausgabe des Strings und der Funktion _CreateTmpFile() in der Zwischenablage
; Fehler - 0 Set @error; 1 - keine Datei ausgewählt,
; 2 - Datei konnte nicht geöffnet werden (@Extended = n-te Datei, die den Fehler erzeugte)
; Author(s)......: BugFix (bugfix@autoit.de)
; Modified.......: Schnuffel (schnuffel@autoit.de)
;==================================================================================================
Func _CreateTmpBinaryCall
($sPath = '', $sBin = '$bData', $sSavePath = Default, $fFilesDelete = True)
Local $sSeparator = Opt('GUIDataSeparatorChar')
If $sPath = '' Then
$sPath = FileOpenDialog('Datei/-en zum binären Includen auswählen:', @ScriptDir & '', 'Alle Dateien (*.*)', 4)
If $sPath = '' Then Return SetError(1,0,0)
Local $aTmp = StringSplit($sPath, '|', 2), $ubound = UBound($aTmp)
$sPath = ''
If $ubound = 1 Then
$sPath = $aTmp[0]
Else
For $i = 1 To $ubound -1
$sPath &= $aTmp[0] & '' & $aTmp[$i] & $sSeparator
Next
$sPath = StringTrimRight($sPath, StringLen($sSeparator))
EndIf
EndIf
If $sBin = '' Or IsKeyword($sBin) Then $sBin = '$bData'
If Not IsBool($fFilesDelete) Then $fFilesDelete = True
If $sSavePath = '' Or $sSavePath = Default Then
$sSavePath = '@ScriptDir & ""'
ElseIf $sSavePath = 'tmp' Then
$sSavePath = '@TempDir & ""'
Else
If StringRight($sSavePath,1) <> '' Then $sSavePath &= ''
EndIf
If StringLeft($sSavePath, 1) <> '@' Then $sSavePath = '"' & $sSavePath & '"'
; == Deklarieren der lokalen Variablen
Local $sToWrite, $hFile = '', $bRead = '', $sLen = '', $nCount = 4000, $aTrimPath, $aFilenames = '['
Local $aSplitPaths = StringSplit($sPath, $sSeparator, 3)
$ubound = UBound($aSplitPaths)
Local $aFiles[$ubound+1][2]
$aFiles[0][0] = $ubound
For $i = 1 To $aFiles[0][0]
$aFiles[$i][0] = $aSplitPaths[$i-1]
$aFiles[$i][1] = StringRight($aSplitPaths[$i-1], StringLen($aSplitPaths[$i-1])-StringInStr($aSplitPaths[$i-1], '', 1, -1))
$aFilenames &= '"' & $aFiles[$i][1] & '"' & ','
Next
$aFilenames = StringTrimRight($aFilenames,1) & ']'
$sToWrite = 'Global $sPath = ' & $sSavePath & ', ' & $sBin & '[' & $aFiles[0][0]+1 & '] = [' & $aFiles[0][0] & ']' & @CRLF
; == Dateien binär einlesen
For $i = 1 To $aFiles[0][0]
$hFile = FileOpen($aFiles[$i][0], 16)
If @error Then Return SetError(2, $i, 0)
$bRead = FileRead($hFile)
FileClose($hFile)
$sLen = StringLen($bRead)
$sToWrite &= ';' & @TAB & 'String mit den Binärdaten von: ' & $aFiles[$i][1] & @CRLF
If $sLen < $nCount Then
$sToWrite &= $sBin & '[' & $i & ']' & ' &= "' & $bRead & '"' & @CRLF
Else
While 1
$sToWrite &= $sBin & '[' & $i & ']' & ' &= "' & StringLeft($bRead, $nCount) & '"' & @CRLF
$bRead = StringTrimLeft($bRead, $nCount)
$sLen = StringLen($bRead)
If $sLen <= $nCount Then
$sToWrite &= $sBin & '[' & $i & ']' & ' &= "' & $bRead & '"' & @CRLF
ExitLoop
EndIf
WEnd
EndIf
Next
; == Ausgabe String Erstellen
$sToWrite &= @CRLF & ';' & @TAB & 'erstellt im TEMPDIR die Datei/-en aus allen vorhandenen ' & $sBin & ' Variablen' & @CRLF
$sToWrite &= 'Global '&$sBin&'names['&$aFiles[0][0]&'] = ' & $aFilenames & @CRLF
$sToWrite &= 'For $i = 1 To ' & $sBin & '[0]' & @CRLF
$sToWrite &= @TAB & 'Local $sFile = $sPath & ' & $sBin & 'names[$i -1]' & @CRLF
$sToWrite &= @TAB & 'Local $hFileOut = FileOpen($sFile, 2+8+16)' & @CRLF
$sToWrite &= @TAB & 'FileWrite($hFileOut, Binary(' & $sBin & '[$i]' & '))' & @CRLF
$sToWrite &= @TAB & 'FileClose($hFileOut)' & @CRLF & 'Next' & @CRLF & @CRLF
; == Schreibt eine Funktion zum Löschen der Dateien bei Skriptende wenn $fFilesDelete = True
If $fFilesDelete Then
$sToWrite &= '; registriert die Funktion "_DelBinaryTempFiles()", damit die temporär erstellten Dateien bei Beendigung wieder gelöscht werden' & @CRLF
$sToWrite &= 'OnAutoItExitRegister("_DelBinaryTempFiles")' & @CRLF & @CRLF
$sToWrite &= 'Func _DelBinaryTempFiles()' & @CRLF
$sToWrite &= @TAB & 'For $i = 1 To ' & $sBin & '[0]' & @CRLF
$sToWrite &= @TAB & @TAB & 'FileDelete($sPath & ' & $sBin & 'names[$i -1]'& ')' & @CRLF & @TAB & 'Next' & @CRLF
$sToWrite &= 'EndFunc' & @CRLF
EndIf
; == Kopieren der Daten in die Zwischenablage
ClipPut('')
If ClipPut($sToWrite) = 1 Then
Return MsgBox(64 + 262144, 'Daten kopiert', 'Die Daten wurden in die Zwischenablage kopiert.' & @CRLF & 'Einfügen in Ihr Script mit Ctrl + v.',5)
Else
MsgBox(64 + 262144, 'Fehler - Daten kopieren', 'Die Daten konnten nicht in die Zwischenablage kopiert werden.')
Return 0
EndIf
EndFunc ;==>_CreateTmpBinaryCall