PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Acceder a l'icone de l'application par code
Acceder a l'icone de l'application par code
Iniciado por Der§en, 20,abr. 2020 14:58 - 11 respuestas
Miembro registrado
334 mensajes
Publicado el 20,abril 2020 - 14:58
Bonjour,

Par code, peux-ton accéder a l’icône de l'application ?

Un peu comme celle d'une fenêtre genre: FEN_Princiapl.Icone !

J4ai bien essayer d'utiliser le nom de mon programme plus .Icone mais il ne connais pas le mon de mon programme (en interne)...

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Miembro registrado
2.321 mensajes
Publicado el 20,abril 2020 - 16:47
Bonjour,

Je ne sais pas trop ce que vous voulez faire…
J'ai trouvé https://doc.pcsoft.fr/fr-FR/?3073001&name=sysiconeajoute_fonction

--
Bon dev,
Jean-Pierre
Miembro registrado
189 mensajes
Publicado el 20,abril 2020 - 17:25
Bonjour Dergen,

L'icône d'une application est enregistrée "en dur" dans l'exécutable, il n'est pas possible de la modifier par programmation.

Jean-Marc
Miembro registrado
948 mensajes
Publicado el 20,abril 2020 - 18:54
Bonjour
Bien sur que cela est possible (voir http://angusj.com/resourcehacker/) mais cela ne va pas être possible avec 3 lignes de code...}:(

--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Miembro registrado
151 mensajes
Publicado el 20,abril 2020 - 19:51
Miembro registrado
189 mensajes
Publicado el 20,abril 2020 - 19:59
La question était, il me semble, comment accéder à l'icône de l'application en cours avec le wlangage, ce qui, à ma connaissance n'est pas possible.
Sinon, il existe effectivement des extracteurs d'icônes à la pelle à partir d'EXE ou de DLL.

J'en avais fait un en W21, si tu veux le code...
Miembro registrado
334 mensajes
Publicado el 20,abril 2020 - 22:46
Merci pour vos réponses, je ne cherchais pas à le modifier, juste à y accéder pour lecture.

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Miembro registrado
334 mensajes
Publicado el 20,abril 2020 - 22:47
Patrice TERRIER a écrit :
C'est parfaitement possible et relativement simple, à condition d'utiliser directement l'API bas niveau depuis WinDev.

--
Patrice Terrier
www.zapsolution.com


Mais encore ?

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Miembro registrado
151 mensajes
Publicado el 21,abril 2020 - 09:48
Avez-vous lu la documentation MSDN, tout y est expliqué.

Utilisez ExtractIconExA pour une chaine asciiz ANSI et ExtractIconExW pour une chaine UNICODE

Exemple:
FUNCTION ExtractIconEx(LOCAL szFile is string, LOCAL nIconIndex is int, phIconLarge is system int, phIconSmall is system int, LOCAL nIcons is unsigned int)
nRet is unsigned int = API("SHELL32", "ExtractIconExW", AnsiToUnicode(szFile), nIconIndex, &phIconLarge, &phIconSmall, nIcons)
RESULT nRet


--
Patrice Terrier
www.zapsolution.com
Miembro registrado
1.002 mensajes
Publicado el 21,abril 2020 - 10:22
Bonjour,

il suffit de rajouter l'image dans ton exe dans la rubrique "autres" et d'y accéder directement..

Jordan
Miembro registrado
4.362 mensajes
Publicado el 21,abril 2020 - 10:23
Bonjour,
Cette fonction est à utiliser conjointement avec les autres API de manipulation d'icônes :
https://docs.microsoft.com/en-us/windows/win32/menurc/icon-functions
L'outils intégré WDAPI permet de faciliter l'appel aux API

--
Il y a peut être plus simple, mais, ça tourne
Publicado el 21,abril 2020 - 15:30
Voir le message WM_GETICON
https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-geticon
--------------------------------------------------------------------------------

soit GCL_HICON = -14
soit ICON_BIG = 1
soit SMTO_ABORTIFHUNG = 0x0002

nHIcon est entier
nHWnd est entier = Handle()

API("user32", "SendMessageTimeoutA", nHWnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000, &nHIcon);
IF (nHIcon = 0) ALORS nHIcon = API("User32", "GetClassLongA", nHWnd, GCL_HICON);
IF (nHIcon = 0) ALORS API("user32", "SendMessageTimeoutA", nHWnd, WM_QUERYDRAGICON, 0, 0, SMTO_ABORTIFHUNG, 1000, &nHIcon);

IF (nHIcon > 0) ALORS
////IMG_ICON : Champ image : largeur = 32 x Hauteur = 32
IMG_ICON..AffichageActif = Faux
API("user32", "DrawIcon", dDébutDessin(IMG_ICON, dEffacer), 0,0, nHIcon)
IMG_ICON..AffichageActif = Vrai
SINON
//
END