Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RÉCUPÉRER UN ICONE DEPUIS SON HANDLE


Information sur la source



Description

Comment récupérer une variable de type Icon utilisable dans VB6 depuis un handle fournit par une API ?

Voilà ce que fait cette source.
 

Source

  • ' Structure d'un GUID
  • Public Type GUID
  • Data1 As Long
  • Data2 As Integer
  • Data3 As Integer
  • Data4(0 To 7) As Byte
  • End Type
  • ' Structure contenant des infos sur une image
  • Public Type PICTDESC
  • ' Normalement cette structure contient une union mais VB ne les gère pas
  • cbSizeofStruct As Long ' Taille de cette structure
  • picType As Long ' Type d'image : ICON, BITMAP, METAFILE, ENHMETAFILE
  • ' Début union
  • hImage As Long ' Handle de l'image
  • xExt As Long ' Taille x de l'image pour une METAFILE
  • yExt As Long ' Taille y de l'image pour une METAFILE
  • End Type
  • ' picType de PICTDESC pour une ICON
  • Public Const PICTYPE_ICON = 3
  • 'permet de convertir une structure PICTDESC (et donc un handle d'image) en un IPictureDisp (= StdPicture)
  • Public Declare Sub OleCreatePictureIndirect Lib "oleaut32.dll" (ByRef lpPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long, ByRef lplpvObj As IPictureDisp)
  • ' Convertit un pointeur vers un icone en IPictureDisp utilisable dans VB
  • ' hIcon : handle de l'icone à convertir
  • ' Renvoie une interface IPictureDisp (ou StdPicture pour VB)
  • Public Function GetIconFromHandle(hIcon As Long) As IPictureDisp
  • ' Le REFIID de IPictureDisp (=GUID)
  • Dim IID_IPictureDisp As GUID
  • ' Infos sur l'icone
  • Dim lpIcon As PICTDESC
  • 'on met place l'IID de IPictureDisp
  • IID_IPictureDisp.Data1 = &H7BF80981
  • IID_IPictureDisp.Data2 = &HBF32
  • IID_IPictureDisp.Data3 = &H101A
  • IID_IPictureDisp.Data4(0) = &H8B
  • IID_IPictureDisp.Data4(1) = &HBB
  • IID_IPictureDisp.Data4(2) = &H0
  • IID_IPictureDisp.Data4(3) = &HAA
  • IID_IPictureDisp.Data4(4) = &H0
  • IID_IPictureDisp.Data4(5) = &H30
  • IID_IPictureDisp.Data4(6) = &HC
  • IID_IPictureDisp.Data4(7) = &HAB
  • ' On initialise les champs requis :
  • lpIcon.cbSizeofStruct = Len(lpIcon)
  • lpIcon.hImage = hIcon
  • ' le type : ICON
  • lpIcon.picType = PICTYPE_ICON
  • 'on demande la création d'une interface de type IPictureDisp pour le handle d'icône
  • 'et en indiquant de ne pas effacer le HICON quand l'interface est libéré
  • OleCreatePictureIndirect lpIcon, IID_IPictureDisp, 0, GetIconFromHandle
  • End Function
' Structure d'un GUID
Public Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

' Structure contenant des infos sur une image
Public Type PICTDESC
    ' Normalement cette structure contient une union mais VB ne les gère pas
    cbSizeofStruct As Long      ' Taille de cette structure
    picType As Long             ' Type d'image : ICON, BITMAP, METAFILE, ENHMETAFILE
    ' Début union
        hImage As Long          ' Handle de l'image
        xExt As Long            ' Taille x de l'image pour une METAFILE
        yExt As Long            ' Taille y de l'image pour une METAFILE
End Type

' picType de PICTDESC pour une ICON
Public Const PICTYPE_ICON = 3

'permet de convertir une structure PICTDESC (et donc un handle d'image) en un IPictureDisp (= StdPicture)
Public Declare Sub OleCreatePictureIndirect Lib "oleaut32.dll" (ByRef lpPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long, ByRef lplpvObj As IPictureDisp)


' Convertit un pointeur vers un icone en IPictureDisp utilisable dans VB
' hIcon : handle de l'icone à convertir
' Renvoie une interface IPictureDisp (ou StdPicture pour VB)
Public Function GetIconFromHandle(hIcon As Long) As IPictureDisp
    ' Le REFIID de IPictureDisp (=GUID)
    Dim IID_IPictureDisp As GUID
    ' Infos sur l'icone
    Dim lpIcon As PICTDESC
    'on met place l'IID de IPictureDisp
    IID_IPictureDisp.Data1 = &H7BF80981
    IID_IPictureDisp.Data2 = &HBF32
    IID_IPictureDisp.Data3 = &H101A
    IID_IPictureDisp.Data4(0) = &H8B
    IID_IPictureDisp.Data4(1) = &HBB
    IID_IPictureDisp.Data4(2) = &H0
    IID_IPictureDisp.Data4(3) = &HAA
    IID_IPictureDisp.Data4(4) = &H0
    IID_IPictureDisp.Data4(5) = &H30
    IID_IPictureDisp.Data4(6) = &HC
    IID_IPictureDisp.Data4(7) = &HAB
    ' On initialise les champs requis :
    lpIcon.cbSizeofStruct = Len(lpIcon)
    lpIcon.hImage = hIcon
    ' le type : ICON
    lpIcon.picType = PICTYPE_ICON
    'on demande la création d'une interface de type IPictureDisp pour le handle d'icône
    'et en indiquant de ne pas effacer le HICON quand l'interface est libéré
    OleCreatePictureIndirect lpIcon, IID_IPictureDisp, 0, GetIconFromHandle
End Function

Conclusion

En espérant que ça vous serve.

MadMatt
 

Commentaires et avis

signaler à un administrateur
Commentaire de Galain le 06/04/2008 00:44:50

Bravo pour cette source
Je m'en suis servi dans mon projet : c'est nickel

signaler à un administrateur
Commentaire de Galain le 06/04/2008 00:48:05

Je me suis gouré pour la note : j'ai clicqué à gauche au lieu de clicquer à droite ! Quel c.. !!!!!! Si un admin peut modifier pour un 10/10 bien mérité

signaler à un administrateur
Commentaire de PCPT le 06/04/2008 02:20:04 administrateur CS

tu peux noter à nouveau

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Convertir un handle d'icone en type icon [ par TASIOT ] Bonjour, Voila je cherche à afficher dans un listView en tant qu'icone les icones des fichiers *.dll, *.exe etc.J'utilise donc la fonction ExtractIcon vb 2005 express - charger une icone dans un picturebox [ par PHILOUVB ] Je n'arrive pas à charger une icone dans un PictureBox.Voilà le code que j'ai écrit. Dites moi SVP ce qui ne va pas.Dim Iconimage as Ic Equivalent IPictureDisp pour les Icons ICO ? [ par threadom ] Bonsoir, j'ai beau cherché je trouve pas alors je viens m'adresser a vous. Dans un UserControl j'ai besoin d'ajouter une propriété icon tout comme cel Changer icone [ par daetips ] Comment changer l'icon d'un fichier déja compilé. sans resource hacker. Même si c'est un programme a qui on envoi des cmd genre chgicon;exe -icon moni handle Icone et picture [ par Jyver ] Bonjour, J'arrive à reccupérer le handle d'une icone (avec ExtractIconA) contenue dans "Shell32.dll" mais comment convertir ce nombre (as long) en un [.Net] ImageList - Icone [ par cbu ] Bonjour, j'ai mis des icones pour mon application notamment pour pouvoir changer celui ci sur un NotifyIcon.. Le problème est que ImageListPerso editer un icone [ par guyvdv ] Bonjour,Je veux essayer d'ecrire un programme pour pouvoir editer un icon qui existe deja , ou creeer un nouveau icon.Je n'ai aucune idee ou commencer trouver le handle de la fenetre active meme si c'est une fentre fille [ par khalilo ] ben je crois que tout est résumé dans le titre: comment à partir d'une API ou d'autre chose on pourrait trouver le handle de la fenetre qui a le focus Simuler un clic de souris sur un icone du systray [ par legege84 ] Bonjour,J'aimerais avoir le code pour simuler le clique de souris sur une icone du tray... Es-ce possible avec des API?C'est en fait pour faire appara


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,33 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.