Page 1 sur 2

Icone pour un nouveau fichier, je me sent seul ....

Publié : ven. 03/nov./2006 22:43
par Kwai chang caine
Bonjour a tous.

Savez vous comment mettre un icone a un fichier que l'on va creer avec OpenFile ou CreateFile.

Bonne journée

Publié : ven. 03/nov./2006 22:46
par Flype
c'est à dire ?

est ce que tu parles de fichiers qui ont ta propre extension ( .kcc par ex ) ?

ou de fichiers dont l'extension est déjà connue du système ?

Publié : ven. 03/nov./2006 23:10
par Kwai chang caine
Bonsoir flype

Je voulais parler de fichiers en general, mais d'apres ta question, je pense que tu va me dire que si l'extension est connue de windows comme les TXT par exemple on ne doit pas pouvoir ????

En fait c'est surtout pour un EXE que je crée moi meme, mais par le code, pas en passant par le compilateur de pb.

Publié : sam. 04/nov./2006 15:29
par Flype
excuse moi mais j'ai lu et relu la question mais j'arrive vraiment pas à capter
exactement ce que tu veux faire ? :?

Publié : sam. 04/nov./2006 15:41
par Dr. Dri
il crée manuellement un exe
il veut pouvoir choisir l'icone de son fichier...

faut regarder du côté des ressources mais je sais pas comment... ressource hacker sait le faire mais moi avec du code je sais pas

Dri

Publié : sam. 04/nov./2006 17:11
par Kwai chang caine
Bonjour Flype et Dr DRi

Dr Dri a bien compris mon probleme. :wink:

J'ai fait un createur de setup autoextractible a l'aide de plusieurs codes trouvés sur les forums dont la base est de DORIAN.

Donc je créé un premier exe qui servira à l'extraction.
Il est lui-meme intégré en tete d'un fichier que je créé et nomme selon le nom du repertoire que je veux compacter en exe.
Puis en data je met le fichier pack du répertoire, obtenu avec packer de pb.

Lorsque l'on clique sur l'exe obtenu au dessus, il "s'auto-lit" (Je ne sais pas si c'est francais), puis extrait le packer, le decompacte et j'obtiens le repertoire d'origine ou je le veux.

Tout cela marche bien, mais le bleme c'est que quand je créé le fichier avec createfile, je ne peux lui attribuer un icone, donc mon exe autoextractible est désesperement blanc et bleu.

Dr Dri a raison pour le changement d'icone avec reshack, ça marche, je l'ai fait pour changer la couleur de l'icone de pb 3.94 de rouge à vert pour ne pas les confondre dans ma barre des taches lorsqu'ils sont tous les 2 en route. 8)

Mais par le code, c'est apparement plus compliqué.
J'ai trouvé un code de OUF provenant de TRAUMATIC sur le forum anglais, mais il ne marche pas chez moi et j'ai pourtant bien XP, d'ailleurs si quelqu'un peut me dire si chez lui ce code marche, ou bien pourquoi il ne marche pas car il dépasse de loin mes compétences :

Code : Tout sélectionner


; Changing icon resources in executables (the NT-API way) 
; 
; NOTE:     Needs NT, 2000 or XP to work 
; 
; WARNING:  the following code is known to fail in certain cases 
;           be sure to backup your data before using this! 
; 
; (:t)raumatic - february 2005 

#RT_GROUP_ICON = #RT_ICON + 11 


; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_icons.asp 
Structure ICONDIRENTRYCOMMON 
  bWidth.b        ; Width, in pixels, of the image 
  bHeight.b       ; Height, in pixels, of the image 
  bColorCount.b   ; Number of colors in image (0 if >=8bpp) 
  bReserved.b     ; Reserved ( must be 0) 
  wPlanes.w       ; Color Planes 
  wBitCount.w     ; Bits per pixel 
  dwBytesInRes.l  ; How many bytes in this resource? 
EndStructure 

; 
Structure ICONDIRENTRY 
  common.ICONDIRENTRYCOMMON 
  dwImageOffset.l ; Where in the file is this image? 
EndStructure 

Structure ICONDIR 
  idReserved.w              ; Reserved (must be 0) 
  idType.w                  ; Resource Type (1 for icons) 
  idCount.w                 ; How many images? 
  idEntries.ICONDIRENTRY[0] ; An entry for each image (idCount of 'em) 
EndStructure 
; 
Structure GRPICONDIRENTRY 
  common.ICONDIRENTRYCOMMON 
  nId.w ; the ID 
EndStructure 

Structure GRPICONDIR 
  idReserved.w                  ; Reserved (must be 0) 
  idType.w                      ; Resource type (1 for icons) 
  idCount.w                     ; How many images? 
  idEntries.GRPICONDIRENTRY[0]  ; The entries for each image 
EndStructure 



; 
; Change Icon-Resource in "exeFilename.s" with "iconFileName.s" 
; 
Procedure.l ChangeIcon(iconFileName.s, exeFileName.s) 
  *icon.ICONDIR = AllocateMemory(SizeOf(ICONDIR)) 
  
  If ReadFile(0, iconFileName.s) 
    ReadData(*icon, SizeOf(ICONDIR)) 

    *icon = ReAllocateMemory(*icon, SizeOf(ICONDIR) + (*icon\idCount*2) *SizeOf(ICONDIRENTRY)) 
    
    For i=0 To *icon\idCount-1 
      FileSeek(6+SizeOf(ICONDIRENTRY) * i)  ; SizeOf(ICONDIR) - SizeOf(ICONDIRENTRY) = 6 
      ReadData(*icon\idEntries[i], SizeOf(ICONDIRENTRY) * (i+1)) 
    Next 

    ; 
    hInst.l = BeginUpdateResource_(exeFileName, #False) 
    If hInst = 0 
      retVal.l = #False 
    Else 
      
      ; CHANGE #RT_GROUP_ICON 
      *iconGroup.GRPICONDIR = AllocateMemory(SizeOf(GRPICONDIR) + 6 + SizeOf(GRPICONDIRENTRY) * *icon\idCount) 
      For i=0 To *icon\idCount-1 
        CopyMemory(*icon\idEntries[i]\common, *iconGroup\idEntries[i]\common, SizeOf(ICONDIRENTRYCOMMON)) 
        *iconGroup\idEntries[i]\nId = (i+1) 
      Next 
      
      *iconGroup\idReserved = 0 
      *iconGroup\idType     = 1 
      *iconGroup\idCount    = *icon\idCount 
      
      ; 
      ; TODO: Error with bColorCount 
      ;       Written value is always wrong!? (e.g. 1 instead of 16) 
      ; 

      retVal = UpdateResource_(hInst, #RT_GROUP_ICON, 1, #LANG_NEUTRAL, *iconGroup, 6+SizeOf(GRPICONDIRENTRY)* *iconGroup\idCount) 
      FreeMemory(*iconGroup) : *iconGroup = #Null 

      
      ; CHANGE #RT_ICON 
      For i = 0 To *icon\idCount-1 
        ; get the desired icon from .ico file 
        *resData = AllocateMemory(*icon\idEntries[i]\common\dwBytesInRes) 
        FileSeek(*icon\idEntries[i]\dwImageOffset) 
        ReadData(*resData, *icon\idEntries[i]\common\dwBytesInRes) 
        
        retVal = UpdateResource_(hInst, #RT_ICON, (i+1), #LANG_NEUTRAL, *resData, *icon\idEntries[i]\common\dwBytesInRes) 
      Next 
    
      retVal = EndUpdateResource_(hInst, #False) 
      
      FreeMemory(*resData) : *resData = #Null 
    EndIf 
      
    FreeMemory(*icon) : *icon = #Null 
    CloseFile(0) 
    
  Else 
    retVal = #False 
  EndIf 
  
  ProcedureReturn retVal 
EndProcedure 
Donc je me suis dit qu'il serait peut etre plus facile de donner l'icone a un fichier que l'on créé, plutot qu'a un exe déja créé.

Voila l'ampleur de mon probleme.

Merci à vous deux.
Bonne journée

Publié : dim. 05/nov./2006 14:17
par Kwai chang caine
Bonjour à tous ...

J'ai pas mal de visites sur ce POST, mais pas beaucoup de réponses. hormis Flype et le Docteur :(

C'est impossible ????
Personne n'a d'idée ????
Je me suis mal expliqué ????
ça interesse personne ????

C'est dur de se sentir seul :cry:

Merci d'avance de votre aide.
Bonne journée

Publié : dim. 05/nov./2006 14:22
par Dr. Dri
C'est pas impossible, puisque reshack peut le faire
J'ai pas le temps de me lancer dans ce genre de recherche désolé...
(sachant que je me suis déjà cassé les dents plusieurs fois là dessus)

Dri

Publié : dim. 05/nov./2006 14:25
par Kwai chang caine
Merci qd meme de ta réponse, je suis donc pas tout seul sur l'ile Pure .. :lol:

Bah dis donc si quelqu'un de ton niveau n'y arrive pas, j'ai pas fini.
Je doit gonfler tout le monde avec mes questions à la con ... :roll:

Bon j'attend un peu pour savoir si quelqu'un a un filon .....

Au fait, elle est mignone ta petite tasse de WD, t'en avait marre de voler dans les airs .....
Bonne journée a toi Docteur

Publié : dim. 05/nov./2006 19:59
par nico
J'ai Window XP et ce code fonctionne très bien chez moi.

Publié : dim. 05/nov./2006 21:14
par Kwai chang caine
Bonjour Nico

Mais oui, Mais oui, tu as raison il marche.
Quand tu m'a dit qu'il marchait chez toi, j'ai tout éssayé...

Et j'ai trouvé 8)

En fait moi j'essaye de mettre un icone à un exe qui n'en a pas.
Alors j'ai essayé avec un exe qui en avait deja un et la tu as raison ça marche.

Essaye avec un exe créé en pure sans icone, chez moi ça marche pas.

Tu serais me dire pourquoi ????

Je te remercie de ton interet.
Bonne soiree

Publié : lun. 06/nov./2006 19:26
par Dr. Dri
Kwai chang caine a écrit :Au fait, elle est mignone ta petite tasse de WD, t'en avait marre de voler dans les airs .....
Bonne journée a toi Docteur
C'est plutot que ca me manque lol

Dri

Publié : lun. 06/nov./2006 20:06
par Flype
juste un complément d'info,

il y a une page intéressante sur msdn concernant les formats d'icones dans les exe et les dll ici :
http://msdn.microsoft.com/library/defau ... _icons.asp

je vais essayé de t'aider un tout petit peu meme si DrDri s'y ai cassé les dents.

Publié : lun. 06/nov./2006 23:22
par Flype
et ben sympa l'ambiance sur vbfrance :
http://www.vbfrance.com/infomsg_CHANGER ... 44134.aspx

à part çà pas de réponse dans ce thread.


par contre ici on s'en rapproche plus.
http://www.vbfrance.com/codes/AJOUTER-O ... 28139.aspx

ce qui est apparemment la meme solution que celle de traumatic.

Publié : mar. 07/nov./2006 0:07
par Kwai chang caine
Flype a écrit :et ben sympa l'ambiance sur vbfrance :
"Putin" t'a raison :lol:
"Putin" une nouvelle raison d'etre sur ce forum ou il y regne un calme olympien malgres quelques prises de becs :lol:

Je te remercie, j'ai grandement besoin de ton aide.
Bah dis donc , tout ça pour juste un petit icone de rien.
Des fois la reponse est disproportionnée à la question.

Entretemps j'ai essayé un truc nul.
J'ai compilé avec le compilateur pure un exe sans code, mais avec un icone et ça marche.
Je me suis dit, mais comment il fait ce satané compilateur pour integrer un icone dans un fichier presque vide.
Je me suis aussi dit qu'en essayant de lire l'hexa , ou bien bidouiller enfin je crois que tu as bien fait de reposter car je me perd dans des chemins hasardeux.
Mais bon j'essaye tout ce qui me passe par la tete, avec mes faibles connaissances, je suis comme beaucoup de passionné en prog, je n'aime pas abandonné, et en général ça paye. 8)

Pour ta reponse, apparement c'est du coté du C ou de L'ASM qu'il faut regarder.

Y'en a un qui serait content, c'est notre amis SPH que je surnomme en privé amicalement AsMan :lol: avec tout le rsespect que je lui doit. 8)

Bah mince, y'avais longtemps que je n'y avais pas remis les pieds, puisque meme au boulot, je programme pour l'instant en pure, enfin j'essaye. Si j'avais su que chez eux ils avait la solution.

Je vais regardé ça de plus pres, mais je ne sais pas si je serais assez calé pour convertir.Mais qui n'essais rien n'a rien.
A combattre sans peril, on triomphe sans gloire.....je sais, je sais ya plaggia c'est pas de moi, mais c'est joli. :lol:

Je vais qd meme pas appeler un exe en VB avec un exe en Pure pour modifier un autre exe en pure qui a besoin d'un icone ... :lol:

La prog c'est pas un metier facile.
Je le dit tout le temps, j'aurais mieux fait d'aimer la boulangerie. :lol:

En tout cas je te remercie grandement, je savais que je pouvais compter sur toi, je me suis senti un peu seul dans cette affaire.
C'est quand meme dingue que je sois le seul illuminé a avoir besoin d'un code comme celui la. :lol:

Encore merci a toi
Excelente soiree.