OVH Cloud OVH Cloud

A l'aide SVP

5 réponses
Avatar
GP
Bonjour,

Je tente toujours de récupérer l'icone d'un programme .exe
Je suis sous W98SE

Je n'arrive pas à obtenir le résultat de la procédure suivante :

Pouvez-vous la faire tourner ?

hIcon, hInst, nIconIndex, hdc est un entier
szExeFileName is ASCIIZ string on 260 = NomFichier // contient le
nom du fichier et de son répertoire
nIconIndex = 1 // pour récupérer la 1ère icone
hInst=Instance()

//le Call suivant plante : POURQUOI ?
hIcon=CallDLL32("Shell32.dll","ExtractAssociatedIconA",hInst,&szExeFileName,nIconIndex)

IF hIcon>0 THEN
dEndDrawing()
hdc=dStartDrawing("ICONE") // ICONE est un champ image
CallDLL32("user32","DrawIcon",hdc,0,0,hIcon)
// dsaveimage("ICONE","blabla.bmp")
CallDLL32("user32","DestroyIcon",hIcon)
END

Merci d'avance

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

5 réponses

Avatar
Michel Herrscher
Dans un message GP disait :


hIcon, hInst, nIconIndex, hdc est un entier



et avec
hIcon, hInst, nIconIndex, hdc est un entier long ?

szExeFileName is ASCIIZ string on 260 = NomFichier // contient le
nom du fichier et de son répertoire
nIconIndex = 1 // pour récupérer la 1ère icone



peut être 0 non ?

hInst=Instance()

//le Call suivant plante : POURQUOI ?



hIconÊllDLL32("Shell32.dll","ExtractAssociatedIconA",hInst,&szExeFileName,
nIconIndex)

selon wdapi tu pourrais écrire :

hIconÊllDLL32("Shell32","ExtractAssociatedIconA",hInst,szExeFileName,nIcon
Index)

Ce sont des suppositions car je ne suis pas exepert API :-0
--
Michel Herrscher Consultant
Président de WindevAsso - Association des Développeurs WINDEV(c)
http://www.windevasso.org
Tel=+33 450 870912 Fax=+33 450 871741 GSM=+33 609044711
Avatar
Romain PETIT
"Michel Herrscher" a formulé ce samedi :
nIconIndex = 1 // pour récupérer la 1ère icone


peut être 0 non ?



Oui, 0 est bien le premier index (il n'y a bien que WD pour commencer
les index à 1...)

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
"GP" a émis l'idée suivante :
Je n'arrive pas à obtenir le résultat de la procédure suivante :
Pouvez-vous la faire tourner ?



Voilou :

eHandleIcone, eHandleInstance, eIndexIcone, eHandleDC sont des entiers
sNomFichierExe est une chaîne =SysRep(Faux)+"SHELL32.DLL" // fichier
EXE, DLL, ICO...
sNomFichierBMP est une chaîne
sNomChampImage est une chaîne = "ICONE" // nom du champ image
szNomFichierEXE est une chaîne ASCIIZ sur 255 = sNomFichierExe
c est un entier
eHandleInstance=Instance()

eIndexIcone = 0 //1er index
BOUCLE
eHandleIcone=API("Shell32","ExtractIconA",eHandleInstance,&szNomFichierEXE,eIndexIcone)
SI eHandleIcone>0 ALORS
sNomFichierBMP =
ComplèteRep(fRepExe())+fExtraitChemin(sNomFichierExe,
fFichier)+"_"+NumériqueVersChaine(eIndexIcone)+".BMP"
dFinDessin()
eHandleDCÝébutDessin(sNomChampImage)
API("user32","DrawIcon",eHandleDC,0,0,eHandleIcone)
dSauveImageBMP(sNomChampImage,sNomFichierBMP)
API("user32","DestroyIcon",eHandleIcone)
eIndexIcone++
SINON
SORTIR
FIN
FIN


A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
"GP" avait soumis l'idée :
Pouvez-vous la faire tourner ?
hIconÊllDLL32("Shell32.dll","ExtractAssociatedIconA",hInst,&szExeFileName,nIconIndex)



En fait, tu te trompes d'API : ExtractAssociatedIconA permet d'extraire
l'icone associée à un fichier par Windows, pas à un exécutable.
Par exemple, pour récupérer l'icone représentant un projet WD en
passant en paramètre à ExtractAssociatedIconA un fichier WDP.

La bonne API pour récupérer l'icone d'un EXE, d'une DLL, d'un
bibliothèque d'icones ou d'un ICO, est ExtractIconA (cf mon post plus
bas).

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
GP
Bonjour et merci à tous

Merci particulièrement à toi Romain : ton code est Ok
Tu as raison pour ExtracIconA mais je n'étais pas arrivé à un résultat,
alors j'ai essayé avec ExtractAss..
Merci encore : çà parait tellement facile quand c'est écrit
correctement !!!

A bientôt
Cordialement




Après mure réflexion, "Romain PETIT" a écrit :
"GP" avait soumis l'idée :
Pouvez-vous la faire tourner ?
hIconÊllDLL32("Shell32.dll","ExtractAssociatedIconA",hInst,&szExeFileName,nIconIndex)



En fait, tu te trompes d'API : ExtractAssociatedIconA permet d'extraire
l'icone associée à un fichier par Windows, pas à un exécutable.
Par exemple, pour récupérer l'icone représentant un projet WD en passant en
paramètre à ExtractAssociatedIconA un fichier WDP.

La bonne API pour récupérer l'icone d'un EXE, d'une DLL, d'un bibliothèque
d'icones ou d'un ICO, est ExtractIconA (cf mon post plus bas).

A+



--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com