Ce code permet d’injecter une icône [32x32](32 bytes) dans un exe compiler…
Mais attention !! , le Fichier Exe doit déjà avoir une icône 32x32(32 bytes) simple (qui ne contient pas plusieurs icônes à différentes résolution)
Voilà à vous de le testé…
Il marche 100% chez moi….
Petit détail !,j’ai ajouté une procédure de protection,comme ça le programme te dira si l’Exe et l’icône sont compatibles pour l’injection.


Code : Tout sélectionner
Global Hexe.l,Hicone.l
Procedure cherche_chaine(fichier.s)
*memi = AllocateMemory(29)
*comp = AllocateMemory(29)
PokeB(*memi,1)
PokeB(*memi+1,0)
PokeB(*memi+2,32)
For h = 3 To 7
PokeB(*memi+h,00)
Next h
PokeB(*memi+8,128)
PokeB(*memi+9,12)
For h = 10 To 26 Step -1
PokeB(*memi+h,00)
Next h
r = OpenFile(#PB_Any,fichier)
If r
t.l = 0
max = Lof(r)
For i = 1 To max
FileSeek(r,i)
ReadData(r,*comp,28)
If CompareMemory(*comp,*memi,28)
t.l = i
EndIf
Next i
CloseFile(r)
FreeMemory(*memi)
FreeMemory(*comp)
If t = 0
ProcedureReturn -1
Else
ProcedureReturn t
EndIf
EndIf
FreeMemory(*memi)
FreeMemory(*comp)
ProcedureReturn -1
EndProcedure
Procedure inject_icone(exec.s,icon.s)
zi.l = ((32*32)*4)+26
ic = OpenFile(#PB_Any,icon)
*memic = AllocateMemory(Lof(ic))
FileSeek(ic,Hicone)
ReadData(ic,*memic,zi)
CloseFile(ic)
ex = OpenFile(#PB_Any,exec)
FileSeek(ex,Hexe)
WriteData(ex,*memic,zi)
CloseFile(ex)
FreeMemory(*memic)
If ex And ic
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
OpenConsole()
EnableGraphicalConsole(1)
PrintN("_________________________________________________________")
PrintN("Injecteur d'icone 32x32 dans un Exe avec une Icone 32x32 mono")
PrintN("Mono : l'icone est simple (ne contient pas plusieurs icones)")
PrintN("")
ConsoleColor(2,0)
PrintN("Nom de l'Exe (.exe)")
exe$ = Input()
ConsoleColor(3,0)
PrintN("Nom de l'icone (.ico) [32x32 simple]")
icone$ = Input()
ConsoleColor(4,0)
PrintN("-------------------------------(analyse)-------------------------")
Hexe.l = cherche_chaine(exe$)
Hicone.l = cherche_chaine(icone$)
If Hexe <> -1 And Hicone <> -1
ConsoleColor(10,0)
PrintN("Compatible")
If inject_icone(exe$,icone$)
ConsoleColor(10,0)
PrintN("OK")
Else
ConsoleColor(12,0)
PrintN("Error")
EndIf
Else
ConsoleColor(12,0)
PrintN("Incompatible")
EndIf
ConsoleColor(9,0)
PrintN("Fin...")
Input()
CloseConsole()
End

