Punch Encoder et Launcher
Publié : mer. 27/août/2014 18:06
Etant donné que ce n'est plus très tendance de faire un simple punch de 50 lignes, voici un ProgramEncoder et un ProgramLauncher.
Avec le ProgramEncoder, vous selectionnez l'exécutable, l'image source dans laquelle il sera encodé et l'image finale à créer.
Avec le programLauncher vous lancez votre exécutable à partir de l'image créee (même pas la peine de le puncher, il ne fait pas 50 lignes!).
Que le meilleur (?!!!!!!) gagne !
Avec le ProgramEncoder, vous selectionnez l'exécutable, l'image source dans laquelle il sera encodé et l'image finale à créer.
Avec le programLauncher vous lancez votre exécutable à partir de l'image créee (même pas la peine de le puncher, il ne fait pas 50 lignes!).
Que le meilleur (?!!!!!!) gagne !

Code : Tout sélectionner
; Program Encoder
EnableExplicit
#TailleExecMax=512*512-4
Define.s nomProgramme, nomImage, nomImageEncodee
Define.i fichierExec, tailleExec, image, x, y
Define.a octet
Procedure EncodeOctet(x.i,y.i,val.a)
; Encode un octet dans la composante rouge de la couleur
Protected.l coul
coul=Point(x,y)
coul & $ffffff00 ;ABGR
coul | val
Plot(x,y,coul)
EndProcedure
UsePNGImageDecoder()
nomProgramme=OpenFileRequester("Choisissez votre exécutable","","Fichiers exécutables (*.exe)|*.exe",0)
If nomProgramme
tailleExec=FileSize(nomProgramme)
If tailleExec<1
MessageRequester("Erreur","Vous n'avez pas selectionné un exe valide !",#PB_MessageRequester_Ok)
ElseIf tailleExec<=#TailleExecMax
nomImage=OpenFileRequester("Choisissez une image","","Fichiers images (*.bmp;*.png)|*.bmp;*.png",0)
If nomImage
image=LoadImage(#PB_Any,nomImage)
If Not image
MessageRequester("Erreur","Impossible de charger l'image !",#PB_MessageRequester_Ok)
Else
ResizeImage(image,512,512,#PB_Image_Raw)
If StartDrawing(ImageOutput(image))
; Encodage de la taille de l'exécutable (sur 4 octets)
EncodeOctet(0,0, tailleExec & $ff)
EncodeOctet(1,0,(tailleExec & $ff00)>>8)
EncodeOctet(2,0,(tailleExec & $ff0000)>>16)
EncodeOctet(3,0,(tailleExec & $ff000000)>>24)
fichierExec=ReadFile(#PB_Any,nomProgramme)
If fichierExec
x=4
y=0
While Not Eof(fichierExec)
octet=ReadAsciiCharacter(fichierExec)
EncodeOctet(x,y,octet)
x+1
If x=512
x=0
y+1
EndIf
Wend
CloseFile(fichierExec)
EndIf
StopDrawing()
nomImageEncodee=SaveFileRequester("Enregistrez la nouvelle image sous...","","Fichiers images (*.bmp)|*.bmp",0)
If nomImageEncodee
If SaveImage(image,nomImageEncodee,#PB_ImagePlugin_BMP)
MessageRequester("","Image encodée enregistrée avec succès.",#PB_MessageRequester_Ok)
Else
MessageRequester("Erreur","L'image n'a pas pu être enregistrée !",#PB_MessageRequester_Ok)
EndIf
EndIf
EndIf
EndIf
EndIf
Else
MessageRequester("Erreur","La taille du fichier exécutable ne peut pas dépasser "+Str(#TailleExecMax)+" octets !",#PB_MessageRequester_Ok)
EndIf
EndIf
Code : Tout sélectionner
; Program Launcher
EnableExplicit
Define.i image, tailleExec, fichierExec, x, y
Procedure.a LitOctet(x.i,y.i)
Protected.l coul
coul=Point(x,y)
ProcedureReturn coul & $ff ; l'octet est dans la composante rouge de la couleur
EndProcedure
image=LoadImage(#PB_Any,"1.bmp")
If image
If StartDrawing(ImageOutput(image))
tailleExec=LitOctet(3,0)<<24 | LitOctet(2,0)<<16 | LitOctet(1,0)<<8 | LitOctet(0,0)
fichierExec=CreateFile(#PB_Any,"1.exe")
x=4
y=0
While tailleExec
WriteAsciiCharacter(fichierExec,LitOctet(x,y))
x+1
If x=512
x=0
y+1
EndIf
tailleExec-1
Wend
StopDrawing()
CloseFile(fichierExec)
RunProgram("1.exe","","",#PB_Program_Wait)
DeleteFile("1.exe")
EndIf
EndIf