Extraire l'icone d'un exécutable
Animateur WDF
Inscrit:
22/11/2004 11:23
Post(s): 255
Bonjour,

J'aurais souhaité extraire et enregistrer l'icone d'un exécutable quelconque. Je sais qu'il existe un moyen de faire cela mais comment y parvenir ?

Si quelqu'un a des infos.

Merci ;)

Contribution le : 20/07/2005 09:52
Créer un fichier PDF de la contribution Imprimer


Re: Extraire l'icone d'un exécutable
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Hum...

Des exemples VB (traduire et poster):
Sans API : http://www.vbfrance.com/code.aspx?ID=29325
Via API("shell32.dll","ExtractIconA"...) : http://docvb.free.fr/apidetail.php?idapi=138

Contribution le : 20/07/2005 10:10
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Extraire l'icone d'un exécutable
Animateur WDF
Inscrit:
22/11/2004 11:23
Post(s): 255
Oups, désolé R&B

La version sans API m'intéresserait bien mais impossible de mettre la main sur une licence VB.

Si une ame charitable avait déjà traduit, je suis preneur ;)

Merci

Contribution le : 20/07/2005 10:29
Créer un fichier PDF de la contribution Imprimer


Re: Extraire l'icone d'un exécutable
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour PopCorn

La version sans API sous entend l'installation du framework dotnet qui représente environ 20 a 30 Mo.
En effet cette source est en VB.Net.

Mais si cela te dit je peux regarder ce qui est faisable car il y a du code environ 1000 lignes de code a traduire alors que via les apis cela va chercher a seulement une cinquantaine de ligne.

Contribution le : 20/07/2005 11:12
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Extraire l'icone d'un exécutable
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Via les API, j'ai transcrit le code trouvé sur Boxerart.com

Alors créer une fenêtre avec :
- un super champ sélecteur de fichier SCSelecteurFichier
- un champ image Image1
- un bouton dont voici le code:
SHFILEINFO is structure
	hIcon est un entier //out: icon
	iIcon est un entier //out: icon index
	dwAttributes est un entier // out: SFGAO_ flags
	szDisplayName est une chaîne ASCIIZ sur 260 //* MAX_PATH ' out: displayname (or path)
	szTypeName est une chaîne ASCIIZ sur 80 //* 80 ' out: type name
END

SHGFI_DISPLAYNAME est un entier = 0x200
SHGFI_EXETYPE est un entier= 0x2000
SHGFI_ICON est un entier=0x100
SHGFI_OPENICON est un entier= 0x2
SHGFI_SELECTED est un entier= 0x10000
SHGFI_SYSICONINDEX est un entier= 0x4000 // ' system icon index
SHGFI_LARGEICON est un entier= 0x0 // '32x32 icon
SHGFI_SMALLICON est un entier= 0x1 // '16x16 icon
SHGFI_SHELLICONSIZE est un entier= 0x4
SHGFI_TYPENAME est un entier= 0x400
SFGAO_HASSUBFOLDER est un entier= 0x80000000 //check che presence of the HASSUBFOLDER attribute
SHGFI_ATTRIBUTES est un entier= 0x800 // retrieve the folder's attributes

retval est un entier
hIcon, hInst, nIconIndexsont sont des entiers
hdc est un entier
szFileName est une chaîne ASCIIZ sur 260
szFileName = SCSelecteurFichier
SI szFileName="" ALORS RETOUR

FI is SHFILEINFO

retval=CallDLL32("shell32","SHGetFileInfoA",&szFileName,0,&FI,Dimension(FI),SHGFI_ICON+SHGFI_SMALLICON)

IF FI:hIcon>0 THEN
	dFinDessin()
	hdc=dDébutDessin("image1")
	CallDLL32("user32","DrawIcon",hdc,0,0,FI:hIcon)
	dSauveImageBMP("image1","blabla.bmp")
	CallDLL32("user32","UpdateWindow",Handle())
	CallDLL32("user32","DestroyIcon",FI:hIcon)
END


testé et approuvé...
On devrait être en mesure d'utiliser la ressource VB pour récupérer le nombre d'icone et donc les récupérer cette fois ci dans une boucle en pensant que le compteur utilise 0.

Contribution le : 20/07/2005 11:45
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Extraire l'icone d'un exécutable
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Salut PopCorn,

J'ai transcris et adapter l'exctraction d'icônes sans les apis.(un millier de ligne de code a traduire et a adapter)
Ceci dit le composant créer nécessite l'utilisation ou l'installation de la plateforme .NET

Ce composant extrait bien plus d'élément de la version avec API.

En effet après un test effectué sur le programme messenger 'msmsgs.exe'
via les api 30 Icônes extraites
Via le module : 104 Icônes extraites

Apparement via les api on ne récupère qu'une icône par groupe d'icône.
Je ne connaissais pas la notion de groupe d'icône qui représentent en faite les différentes définitions pour une icône (4,8,256 couleurs) (16x16, 32x32, 48x48 pour les tailles)
Donc apparement via les apis on ne récupère qu'une seules icône par groupe.

Comme il existe 30 groupes d'icônes sur messenger les api en retournent 30 icônes.

Contribution le : 21/07/2005 12:14
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Extraire l'icone d'un exécutable
Utilisateur WDF
Inscrit:
22/03/2005 14:40
De Lyon Rhône France
Post(s): 51
Bonjour,
c-après un super vieux code pour des besoins basiques, à l'époque écrit en 5.5, certainement déjà pompé de je ne sais où ...

--
Cordialement
Christophe Charron

PROCEDURE CW_Image::m_AffIconExe(vv_NomExe,vv_ChampDest32=OA_image:vc_c_Fenetre+".IMAGE1",vv_ChampDest16=OA_image:vc_c_Fenetre+".IMAGE2",vv_ChampFinal="IMAGE",vv_IndiceIcone=0,vv_taille=16)
LOCAL
// Affichage de l'icone dans la liste
// Extraction de l'icone de l'exécutable
// ENTREE :
// vv_NomExe répertoire+nom de l'exécutable
// vv_ChampDest32 nom du champ d'accueil de l'image
// vv_NomExe nom de l'exécutable seul

vl_himage32 est un entier //Handle du champ image
vl_hiCON32 est un entier //Handle de l'icone du programme
vl_hiCO32,vl_hiCO16 sont des entier
vl_NbIcones est un entier=2
vl_hdc32 est un entier //Device Context pour le dessin dans le champ image
vl_hboo32 est un entier //Resultat du dessin de l'icone dans le champ image
vl_Appli est une chaîne ASCIIZ de 255 //Nom de l'exécutable
vl_UINT est un entier sans signe = 0 // Pour typage
vl_INT est un entier = 0 // Pour typage
vl_ok est un booléen
vl_nombmp est une chaîne
//
vl_Appli = vv_NomExe
dFinDessin(vv_ChampDest32)
//Indice de l'icone à récuperer
vl_UINT=vv_IndiceIcone
//Handle de l'icone du programme
vl_hiCON32 = AppelDLL32("shell32.dll","ExtractIconExA" , &vl_Appli, vl_UINT, &vl_hiCO32,&vl_hiCO16, vl_NbIcones)
//Device Context pour le dessin dans le champ image
vl_hdc32 = dDébutDessin(vv_ChampDest32)
//Dessine un rectangle magenta clair dans le champ image (pour avoir un fond transparent)
dRectangle(0,0,32,32,iMagentaClair)
//Dessin de l'icone dans le champ image
SI vv_taille = 16 ALORS
vl_hboo32 = AppelDLL32("User32","DrawIcon",vl_hdc32,vl_INT,vl_INT,vl_hiCO16) //Pour dessiner l'icone 16x16
SINON
vl_hboo32 = AppelDLL32("User32","DrawIcon",vl_hdc32,vl_INT,vl_INT,vl_hiCO32) //Pour dessiner l'icone 32x32
FIN
vl_ok=(vl_hboo32<>0)
SI vl_ok ALORS
//destruction de l'icone créée
AppelDLL32("User32","DestroyIcon",vl_hiCO16)
AppelDLL32("User32","DestroyIcon",vl_hiCO32)
FIN
dCopieImage(vv_ChampDest32,vv_ChampDest16,copieSrcCopie,0,0,32,32,0,0,16,16)
vl_nombmp = CW_Windows::M_RepTemp()+"\~imagefugitive.bmp"
dSauveImageBMP(vv_ChampDest16,vl_nombmp)
{vv_ChampFinal} = vl_nombmp
RENVOYER vl_nombmp


Contribution le : 22/07/2005 07:39
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2