[R] Intégrer une image dans un script compilé
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
1) Fileinstall (on remue le couteau dans la plaît, mais c'est ce qu'il y a de plus logique)
2) on déclare un tableau d'octets dans le script, on le remplie des différents éléments hexa
dans les 2 cas le scripts devra recomposer l'image quand on en a besoins, et la détruire juste après.
cependant penser que mettre une ressource binaire en hexa la protège, je dirais que c'est un peu mettre un post it "ne touchez pas SVP" sur un billet de banque par terre ...
comme le disait Tlem, il n'y a que le chiffrement qui peut t'aider, et encore, il te faudra déchiffer la ressource juste avant la construction de la gui et penser à la détruire après sa création, et ceci présentera une période de vulnérabilité...
Mainteant, je n'ai pas bien compris ton besoins de sécurité :
- Tu ne veux pas qu'on pique ton image afin qu'on l'utilise ailleurs
ou
- Tu ne veux pas qu'elle soit falsifiée lors de l'utilisation de ton exe
car si c'est le 2eme point, tu calcule le SHA1 ou le MD5 de l'image et tu le mets en dure dans ton code afin de contrôler si eslle n'est pas modifier en cours de route. Mais il faut trouver une UDF les calculant (il y e n a qq unes) ou utiliser un exe externe faisant ces calculs et l'embarquer "encore" via fileinstall (pour le choix je suggère sdhash, du site se Sarah Dean)
2) on déclare un tableau d'octets dans le script, on le remplie des différents éléments hexa
dans les 2 cas le scripts devra recomposer l'image quand on en a besoins, et la détruire juste après.
cependant penser que mettre une ressource binaire en hexa la protège, je dirais que c'est un peu mettre un post it "ne touchez pas SVP" sur un billet de banque par terre ...
comme le disait Tlem, il n'y a que le chiffrement qui peut t'aider, et encore, il te faudra déchiffer la ressource juste avant la construction de la gui et penser à la détruire après sa création, et ceci présentera une période de vulnérabilité...
Mainteant, je n'ai pas bien compris ton besoins de sécurité :
- Tu ne veux pas qu'on pique ton image afin qu'on l'utilise ailleurs
ou
- Tu ne veux pas qu'elle soit falsifiée lors de l'utilisation de ton exe
car si c'est le 2eme point, tu calcule le SHA1 ou le MD5 de l'image et tu le mets en dure dans ton code afin de contrôler si eslle n'est pas modifier en cours de route. Mais il faut trouver une UDF les calculant (il y e n a qq unes) ou utiliser un exe externe faisant ces calculs et l'embarquer "encore" via fileinstall (pour le choix je suggère sdhash, du site se Sarah Dean)
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
- Tlem
- Site Admin
- Messages : 11791
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Bien sur, il te suffit de faire :MiXS a écrit :Mais en faisant Fileinstall c'est possible de supprimer l'image juste apres que le fichier .exe soit férmé ?
Code : Tout sélectionner
FileDelete ("Ton Fichier")
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
J'ai essayé mais "ça ne marche pas"
Pourriez vous me faire un exemple ?
Je sais que c'est FileInstall() mais je sais pas comment la presenté
J'ai fais ca mais l'image ne s'affiche pas !

Pourriez vous me faire un exemple ?
Je sais que c'est FileInstall() mais je sais pas comment la presenté

Code : Tout sélectionner
FileInstall("C:\Exemple15.bmp", "C:\Programmes\Exemple.bmp")
.............
GUICtrlCreatePic ("C:\Programmes\Exemple.bmp", "", "", "", "", "")
.........................
FileDelete("C:\Programmes\Exemple.bmp")
- Tlem
- Site Admin
- Messages : 11791
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Votre exemple semble bon.
Est-ce que votre fichier image ce trouve bien dans C: au moment de la compilation ?
Si vous placer une pause (Avec une Msgbox par exemple) juste après le fileinstall, au lancement de votre script, le fichier BMP est-il décompresser dans C:\Programmes ?
Pour info, le GUICtrlCreatePic ne suffit pas pour visualiser l'image, il vous faut d'abord créer une GUI (GuiCreate) regarder dans l'aide pour un exemple détaillé.
Est-ce que votre fichier image ce trouve bien dans C: au moment de la compilation ?
Si vous placer une pause (Avec une Msgbox par exemple) juste après le fileinstall, au lancement de votre script, le fichier BMP est-il décompresser dans C:\Programmes ?
Pour info, le GUICtrlCreatePic ne suffit pas pour visualiser l'image, il vous faut d'abord créer une GUI (GuiCreate) regarder dans l'aide pour un exemple détaillé.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Ben mon code est dans ca genre là
Mon image est bien dans C:
Mais quand je le compile il me met une erreur et l'image ne s'affiche pas
!
Code : Tout sélectionner
#include <GUIConstants>
#Include <GuiList>
#NoTrayIcon
FileInstall("C:\Exemple15.bmp", "C:\Programmes\Exemple.bmp")
GUICreate( " exemple " , 500, 350, -1, -1)
GUICtrlCreatePic ("C:\Programmes\Exemple.bmp", "", "", "", "", "")
GUISetState(@SW_SHOW)
$Open = GUICtrlCreateButton("Ouvrir", 15, 15, 65, 21, 0)
$Input1 = GUICtrlCreateInput("", 292, 7, 81, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Play = GUICtrlCreateButton("bouton 1", 184, 139, 57, 21, 0)
$Button1 = GUICtrlCreateButton("Pause/Play", 196, 39, 73, 21, 0)
$Button2 = GUICtrlCreateButton("Stop ", 279, 39, 57, 21, 0)
FileDelete("C:\Programmes\Exemple.bmp")
Exit
Mais quand je le compile il me met une erreur et l'image ne s'affiche pas

- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
peux tu copier coller le msg d'erreur de compile stp ?
(que la compile plante, ça me laisse perplexe)
par contre, à l'execution, se qu'il peut se passer est que C:\Programmes n'esiste pas, et donc Fileinstal sortira en erreur.
Il faut d'abort tester l'existence de ce répertoire (Fileexists) et au cas échéant le créer (Dircreate). Au passage, teste les retour d'erreur pour voir si tout c'est bien passer (pb éventuels de droit d'écriture.
Sinon j'ai testé chez moi et ça marche (en mettant un while 1 en plus sinon on sort direct ...)
Sinon astuce 1 : quand tu as un chemin bine long comme C:\Programmes\Exemple.bmp qui se répète plusieur fois, mets le tout d'abords dans une variable $fic_image="C:\Programmes\Exemple.bmp"
comme ça, c'est mons long à reprendre dans le script et surtout, si tu dois changer ce chemin, au moins tu ne le fais qu'une fois ... et pas 3
astuce 2, met le flag 1 en 3eme argument de Fileinstal pour forcer la copie du fichier même si il existe. Ainsi ça évite les mauvaises surprises si un fichier du même nom existe déjà ...
(que la compile plante, ça me laisse perplexe)
par contre, à l'execution, se qu'il peut se passer est que C:\Programmes n'esiste pas, et donc Fileinstal sortira en erreur.
Il faut d'abort tester l'existence de ce répertoire (Fileexists) et au cas échéant le créer (Dircreate). Au passage, teste les retour d'erreur pour voir si tout c'est bien passer (pb éventuels de droit d'écriture.
Sinon j'ai testé chez moi et ça marche (en mettant un while 1 en plus sinon on sort direct ...)
Sinon astuce 1 : quand tu as un chemin bine long comme C:\Programmes\Exemple.bmp qui se répète plusieur fois, mets le tout d'abords dans une variable $fic_image="C:\Programmes\Exemple.bmp"
comme ça, c'est mons long à reprendre dans le script et surtout, si tu dois changer ce chemin, au moins tu ne le fais qu'une fois ... et pas 3
astuce 2, met le flag 1 en 3eme argument de Fileinstal pour forcer la copie du fichier même si il existe. Ainsi ça évite les mauvaises surprises si un fichier du même nom existe déjà ...
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
- Tlem
- Site Admin
- Messages : 11791
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Houlaaaa !
Vous devriez analyser des codes déjà fait, car au stade ou vous en êtes, on est pas rendu ...
Déjà première chose, le FileInstall ne décompressera le fichier que dans un répertoire existant. Il vous faut donc le créer avant si il n'existe pas !
Ensuite, pour la partie graphique, vous affichez bien une GUI, mais c'est tellement bref que vous avez le temps de rien voir.
Et oui après avoir créer la GUI, il faut faire une sorte de boucle pour attendre les messages provenant de cette dernière, comme l'appui sur un bouton, ou le fait de fermer la GUI, sinon elle se ferme aussitôt !
Regarder par ici pour l'exemple : http://www.autoitscript.fr/viewtopic.php?t=236
Vous devriez analyser des codes déjà fait, car au stade ou vous en êtes, on est pas rendu ...
Déjà première chose, le FileInstall ne décompressera le fichier que dans un répertoire existant. Il vous faut donc le créer avant si il n'existe pas !
Ensuite, pour la partie graphique, vous affichez bien une GUI, mais c'est tellement bref que vous avez le temps de rien voir.
Et oui après avoir créer la GUI, il faut faire une sorte de boucle pour attendre les messages provenant de cette dernière, comme l'appui sur un bouton, ou le fait de fermer la GUI, sinon elle se ferme aussitôt !
Regarder par ici pour l'exemple : http://www.autoitscript.fr/viewtopic.php?t=236
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- Tlem
- Site Admin
- Messages : 11791
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Griller sur le poteau par sylvanie 

Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
diagnostic 1 :
As tu des espace parasites dans ton Fileinstall ?
2 : Le fichier est il toujours là (un filedelete malheureux des fois ...)
3 : est il en cours d'utilisation ? (du coups, pas d'accès)
4 : est ce que ça fonctionne si tu lance le script sans le compiler (là ça deviendrai Xfiles)
As tu des espace parasites dans ton Fileinstall ?
2 : Le fichier est il toujours là (un filedelete malheureux des fois ...)
3 : est il en cours d'utilisation ? (du coups, pas d'accès)
4 : est ce que ça fonctionne si tu lance le script sans le compiler (là ça deviendrai Xfiles)
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
arf, dommage que le sujet ait plus tourné vers le FileInstall, car l'idée de l'image insérer dans l'exe me plaisait bien notement pour les Spash-Screens, ca évitait d'avoir l'image avec l'exe et de les zipper...
pour la confidentialité des images, j'ai testé en changeant l'extension du fichier vers .atp (un de mes sites web donc © ^^ ), cette extension n'étant pas reconnu par windows, l'image aura donc une icone générique et à moins de l'ouvrir avec un logiciel d'image, l'utilisateur potentiel ne s'apercevra pas de la supercherie... surtout s'il croit que c'est un fichier système essentiel à l'exe ^^
on peut aussi essayer un .bin ou un .cab, c'est à dire des extension existante sous win, et alors là, avant que l'utilisateur pense a l'ouvrir avec un logiciel d'image, on a le temps
pour la confidentialité des images, j'ai testé en changeant l'extension du fichier vers .atp (un de mes sites web donc © ^^ ), cette extension n'étant pas reconnu par windows, l'image aura donc une icone générique et à moins de l'ouvrir avec un logiciel d'image, l'utilisateur potentiel ne s'apercevra pas de la supercherie... surtout s'il croit que c'est un fichier système essentiel à l'exe ^^
on peut aussi essayer un .bin ou un .cab, c'est à dire des extension existante sous win, et alors là, avant que l'utilisateur pense a l'ouvrir avec un logiciel d'image, on a le temps
Code : Tout sélectionner
$SplashImg = @ScriptDir & "\W32sys.atp"
SplashImageOn("ATP_Sysinfo", $SplashImg,128,128,-1,-1,1)
Sleep(2000)
- Tlem
- Site Admin
- Messages : 11791
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Il existe bien une possibilité 'd'intégrer' une image dans l'exe, et cela fait partie de l'éditeur des ressources (Avec Ressource hacker par exemple).arrkhan a écrit :arf, dommage que le sujet ait plus tourné vers le FileInstall, car l'idée de l'image insérer dans l'exe me plaisait bien notement pour les Spash-Screens
A l'heure actuelle, on peut ajouter des fichiers ICO sans problème, mais pour des images ou fichiers complémentaires, FileInstall est de rigueur.
Je ne comprend pas trop votre remarque !!!arrkhan a écrit :ca évitait d'avoir l'image avec l'exe et de les zipper...
Si vous codé l'image en Hexa et l'intégrer au script, cela revient au même que le FileInstall, puisque de toute façon comme l'à fait remarquer sylvanie il vous faudra reconstituer l'image avant utilisation.
Et puis si vous devez changer l'image, quelle gymnastique ...
La commande FileInstall permet justement cette souplesse de rajouter ce que vous voulez à votre EXE, sans prise de tête, et en ce qui concerne le fait de les zipper, que je sache, c'est AutoIt qui ce débrouille tout seul lors de la compilation !!!
Pour ceux qui ne le savent pas encore, penser aussi à télécharger Scite4AutoIt, qui intègre AutoItWrapper, et installer le.
Ensuite lancer Scite4AutoIt, et regarder dans Aide puis Aide sur Scite et enfin, rechercher Directives.
Vous verrez dans ce cas qu'il est possible de faire vraiment presque tout ce que vous voulez avec votre EXE ...
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Et bien, si je veux envoyer mon exe à quelqu'un, il faut que je .zip l'image du splash screen et l'exe ensemble, pour que cela fonctionne...Je ne comprend pas trop votre remarque !!!ca évitait d'avoir l'image avec l'exe et de les zipper...
Si je met le spash avec fileinstall j'ai peur que ca ralentisse le lancement de l'application encore plus que les 2 secondes du splash.
-
- Niveau 11
- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
hello
On peux imaginer pour exit ou close du soft al destruction du dossier (variable stock image)
pour fileinstall la documentation dit au niveau de la source (premier parametre)
source The source path of the file to compile. This must be a literal string; it cannot be a variable. (elle ne prend pas les variables)
si tu indique fileinstall($image,$dest,1) quand tu la compilera t'aura un msg d'erreur, mais en faisant f5 y en a pas ..(bizar)
Quand vous ferez ctrl+f7 il va generé l'exe, en ayant bien mi dans son exe l'image c:\ani.bmp , quand vous allez lancé l'application exe, il va creer un dossier image dans le path de l'exe et d'y inclure le fichier ani.bmp (dont vous etes le seul a disposer)
j'espere qu'on ma compris ^^'
sinon faite celui-ci ()
Code : Tout sélectionner
Global $stock_Image = @scriptdir & "\image"
;on en cree le dossier, vu qu'il n'existe pas
DirCreate($stock_Image)
; on commence l'installation de l'image
; tu peux indiquer une variable pour ton image (ici j'ai mi bmp)
$Dir_Stock_Image = $stock_Image & "\Splash.bmp" ;tu peux donner un autre nom pour l'image
FileInstall("C:\ani.bmp", $Dir_Stock_Image,1)
;on lance le SplashImageOn
SplashImageOn("Splash Screen", $Dir_Stock_Image,250,50)
Sleep(3000)
SplashOff()
On peux imaginer pour exit ou close du soft al destruction du dossier (variable stock image)
pour fileinstall la documentation dit au niveau de la source (premier parametre)
source The source path of the file to compile. This must be a literal string; it cannot be a variable. (elle ne prend pas les variables)
si tu indique fileinstall($image,$dest,1) quand tu la compilera t'aura un msg d'erreur, mais en faisant f5 y en a pas ..(bizar)
Quand vous ferez ctrl+f7 il va generé l'exe, en ayant bien mi dans son exe l'image c:\ani.bmp , quand vous allez lancé l'application exe, il va creer un dossier image dans le path de l'exe et d'y inclure le fichier ani.bmp (dont vous etes le seul a disposer)
j'espere qu'on ma compris ^^'
sinon faite celui-ci ()

Code : Tout sélectionner
;On stock les images dans le dossier temporaire
; faut rester simple, 1 on cree pas de dossier,2 on s'amuse pas a le detruire, 3 les cluster reste en place :)
Global $stock_Image = @TempDir & "\"
;On cree une variables pour la destination avec le nouveau nom de l'image
$Dir_Stock_Image = $stock_Image & "Splash.bmp" ;tu peux donner un autre nom pour l'image
FileInstall("C:\ani.bmp", $Dir_Stock_Image,1)
;on lance le SplashImageOn
SplashImageOn("Splash Screen", $Dir_Stock_Image,250,50)
Sleep(3000)
SplashOff()
- Tlem
- Site Admin
- Messages : 11791
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
A moins de mettre une image de plusieurs Mo, vous ne vous rendrez même pas compte de quoi que ce soit.arrkhan a écrit :Si je met le spash avec fileinstall j'ai peur que ca ralentisse le lancement de l'application encore plus que les 2 secondes du splash.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
j'arrive après la bataille, mais juste un ptit drnier pour la route pour montrer qu'on n'est pas obliger de squatter le DD longtemps :
ici le Filinstall est appelé juste avant le GUICtrlCreatePic et le Filedelette juste après ... et pas d'histoire de zip dans la foulée
Code : Tout sélectionner
#include <GUIConstants.au3>
#Include <GuiList.au3>
#NoTrayIcon
$fic_image="C:\Programmes\Exemple.bmp"
GUICreate( " exemple " , 500, 350, -1, -1)
FileInstall("I:\dev\autoit\forum\terre.bmp", $fic_image,1)
GUICtrlCreatePic ($fic_image, "","", "", "", "")
FileDelete($fic_image)
GUISetState(@SW_SHOW)
$Open = GUICtrlCreateButton("Ouvrir", 15, 15, 65, 21, 0)
$Input1 = GUICtrlCreateInput("", 292, 7, 81, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Play = GUICtrlCreateButton("bouton 1", 184, 139, 57, 21, 0)
$Button1 = GUICtrlCreateButton("Pause/Play", 196, 39, 73, 21, 0)
$Button2 = GUICtrlCreateButton("Stop ", 279, 39, 57, 21, 0)
While 1
WEnd
Exit
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.