[UDF] _FileToBinaryFunction.au3 (Fichiers dans votre code)
Posté : mer. 03 sept. 2008 01:54
Voici un petit UDF intéressent, qui vous permettra d'intégrer un fichier directement dans le code source de votre script.
Ce code fonctionne pour tous types de fichiers sans exception (attention toutefois à la taille de ceux-ci).
Cette fonction ne remplace en rien l'utilisation de la commande FileInstall(), ou l'ajout des ressources directement à l'exécutable par le biais de directive ou l'utilisation de ResHacker, mais elle ajoute une portée différente à l'intégration d'un fichier ou d'une ressource à votre code.
Description :
Le fichier est inscrit sous forme de chaînes binaires de 128 caractères dans une fonction pour être utilisé plus tard en tant que chaîne unique.
Pour re-générer le fichier, il suffit de lancer la fonction (Pour ce faire, dé-commenté la deuxième ligne du script généré et lancez le script).
Vous devrez aussi modifier le chemin et le nom du fichier, sinon le nom d'origine est utilisé et le fichier sera donc re-généré en lieu et place du fichier d'origine.
Voici l'UDF en question, adapté de l'UDF original ConvertImageToBinary.au3.
J'ai rajouter le code pour re-générer le fichier et modifier la manière dont est géré le nom de la fonction.
Voici un exemple de fichier créé :Pour re-généré ce fichier, vous n'avez qu'à dé-commenter la deuxième ligne puis à lancer le script.
Le fichier C:\_FileToBinaryFunction_Demo.txt sera re-généré avec son contenu.
Sinon il vous suffira d'appeler la fonction _FileToBinaryFunction_Demo_txt() (fonction générée dynamiquement avec le nom du fichier d'origine), en précisant en argument le nom et le cas échéant le chemin du fichier de sortie.
Edition du 17/06/2011 :
Voici une version beaucoup plus simple et qui génère une simple fonction dont le rôle est de créer une variable qui contiendra le code binaire de votre fichier. Ensuite, libre à vous de faire ce que vous voulez avec cette variable (écriture de fichier ou utilisation directe à partir de la mémoire).
Ce code fonctionne pour tous types de fichiers sans exception (attention toutefois à la taille de ceux-ci).
Cette fonction ne remplace en rien l'utilisation de la commande FileInstall(), ou l'ajout des ressources directement à l'exécutable par le biais de directive ou l'utilisation de ResHacker, mais elle ajoute une portée différente à l'intégration d'un fichier ou d'une ressource à votre code.
Description :
Le fichier est inscrit sous forme de chaînes binaires de 128 caractères dans une fonction pour être utilisé plus tard en tant que chaîne unique.
Pour re-générer le fichier, il suffit de lancer la fonction (Pour ce faire, dé-commenté la deuxième ligne du script généré et lancez le script).
Vous devrez aussi modifier le chemin et le nom du fichier, sinon le nom d'origine est utilisé et le fichier sera donc re-généré en lieu et place du fichier d'origine.
Voici l'UDF en question, adapté de l'UDF original ConvertImageToBinary.au3.
J'ai rajouter le code pour re-générer le fichier et modifier la manière dont est géré le nom de la fonction.
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version(s) : 3.2.12.0 - 3.3.2.0
Auteur : Tlem
Fonction du Script :
Script adapté de l'UDF ConvertImageToBinary.au3 qui permet de transformer
un fichier en code binaire qui peut être inclus tel quel dans un code AutoIt.
L'appel de la fonction permet de re-générer le fichier.
#ce ----------------------------------------------------------------------------
$file = FileOpenDialog("Fichier à convertir", @DesktopDir, "All Files (*.*)")
If @error Then Exit
$Fname = StringTrimLeft($file, StringInStr($file, "\", 1, -1))
$Path = StringTrimRight($file, StringLen($Fname))
$f = FileOpen($file, 16)
$t = FileRead($f)
FileClose($f)
$z = StringRegExp($t, "(.{1,128})", 3)
$Ubound = UBound($z)
$FuncName = StringReplace($Fname, ".", "_")
$FuncName = StringRegExpReplace($FuncName, '[^\w]', '')
$FuncName = StringRegExpReplace($FuncName, '[^\D]', '')
$String = '; Décommenté la ligne si dessous pour re-générer le fichier (vous pouvez ajuster le nom et le chemin).' & @CRLF
$String &= '; ' & $FuncName & '("' & $Path & $Fname& '")' & @CRLF & @CRLF
If $Ubound = 1 Then
$String &= 'Func ' & $FuncName & '($Name)' & @CRLF & ' $FileBin = "' & $z[0] & '"'
ElseIf $Ubound > 1 Then
$String &= 'Func ' & $FuncName & '($Name)' & @CRLF & ' $FileBin = "' & $z[0] & '"' & @CRLF
For $i = 1 To $Ubound - 2 Step 1
$String &= ' $FileBin &= "' & $z[$i] & '"' & @CRLF
Next
$String &= ' $FileBin &= "' & $z[$Ubound - 1] & '"' & @CRLF
EndIf
If $Ubound > 0 Then
$String &= @CRLF
$String &= ' $hFile = FileOpen($Name, 17)' & @CRLF
$String &= ' If $hFile = -1 Then' & @CRLF
$String &= ' MsgBox(0, "Erreur", "Impossible de re-créer le fichier.")' & @CRLF
$String &= ' Exit' & @CRLF
$String &= ' EndIf' & @CRLF
$String &= ' FileWrite($hFile, $FileBin)' & @CRLF
$String &= ' FileClose($hFile)' & @CRLF & @CRLF
$String &= 'EndFunc'
EndIf
FileDelete(@TempDir & "\FicTmp.au3")
FileWrite(@TempDir & "\FicTmp.au3", $String)
ShellExecute(@TempDir & "\FicTmp.au3", '', '', "edit")
► Afficher le texte
Le fichier C:\_FileToBinaryFunction_Demo.txt sera re-généré avec son contenu.
Sinon il vous suffira d'appeler la fonction _FileToBinaryFunction_Demo_txt() (fonction générée dynamiquement avec le nom du fichier d'origine), en précisant en argument le nom et le cas échéant le chemin du fichier de sortie.
Edition du 17/06/2011 :
Voici une version beaucoup plus simple et qui génère une simple fonction dont le rôle est de créer une variable qui contiendra le code binaire de votre fichier. Ensuite, libre à vous de faire ce que vous voulez avec cette variable (écriture de fichier ou utilisation directe à partir de la mémoire).
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version(s) : 3.3.6.1
Auteur : Tlem
Fonction du Script :
Script adapté de l'UDF ConvertImageToBinary.au3 qui permet de transformer
un fichier en code binaire qui peut être inclus tel quel dans un code AutoIt.
L'appel de la fonction permet de recupérer le fichier sous forme binaire
afin de le recréer ou de l'utiliser tel quel à partir de la mémoire.
#ce ----------------------------------------------------------------------------
$file = FileOpenDialog("Fichier à convertir", @DesktopDir, "All Files (*.*)")
If @error Then Exit
$Fname = StringTrimLeft($file, StringInStr($file, "\", 1, -1))
$Path = StringTrimRight($file, StringLen($Fname))
$f = FileOpen($file, 16)
$t = FileRead($f)
FileClose($f)
$z = StringRegExp($t, "(.{1,512})", 3) ; Longeur de ligne (512)
$Ubound = UBound($z)
$FuncName = StringReplace($Fname, ".", "_")
$FuncName = StringRegExpReplace($FuncName, '[^\w]', '')
$FuncName = StringRegExpReplace($FuncName, '[^\D]', '')
Global $String
If $Ubound = 1 Then
$String &= 'Func ' & $FuncName & '()' & @CRLF & ' Local _' & @CRLF & ' $FileBin = "' & $z[0] & '"'
ElseIf $Ubound > 1 Then
$String &= 'Func ' & $FuncName & '()' & @CRLF & ' Local _'& @CRLF & ' $FileBin = "' & $z[0] & '"' & @CRLF
For $i = 1 To $Ubound - 2 Step 1
$String &= ' $FileBin &= "' & $z[$i] & '"' & @CRLF
Next
$String &= ' $FileBin &= "' & $z[$Ubound - 1] & '"' & @CRLF
EndIf
If $Ubound > 0 Then
$String &= ' Return Binary($FileBin)' & @CRLF
$String &= 'EndFunc'
EndIf
FileDelete(@TempDir & "\FicTmp.au3")
FileWrite(@TempDir & "\FicTmp.au3", $String)
ShellExecute(@TempDir & "\FicTmp.au3", '', '', "edit")