Récupérer l'icône d'un fichier ou d'une extension

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Récupérer l'icône d'un fichier ou d'une extension

Message par Dr. Dri »

Code : Tout sélectionner

Procedure.l GetFileIcon(Filename.s, IconSize.l)
  Protected IconID.l, Open.l, KeyID.l, Small.l, Large.l
  Protected KeyName.s, Length.l, Count.l, Index.l, Value.s
  
  KeyName  = GetExtensionPart("." + Filename)
  Filename = #NULL$
  
  If KeyName
    KeyName = "." + KeyName
    
    Open = RegOpenKeyEx_(#HKEY_CLASSES_ROOT, KeyName, #Null, #KEY_ALL_ACCESS, @KeyID)
    
    If Open = #ERROR_SUCCESS
      KeyName = Space(#MAX_PATH)
      Length  = #MAX_PATH
      
      RegQueryValueEx_(KeyID, #NULL$, #Null, #Null,  @KeyName, @Length)
      RegCloseKey_(KeyID)
      
      KeyName + "\DefaultIcon"
      Open = RegOpenKeyEx_(#HKEY_CLASSES_ROOT, KeyName, #Null, #KEY_ALL_ACCESS, @KeyID)
    EndIf
    
    If Open = #ERROR_SUCCESS
      Filename = Space(#MAX_PATH)
      Length   = #MAX_PATH
      
      RegQueryValueEx_(KeyID, #NULL$, #Null, #Null, @Filename, @Length)
      RegCloseKey_(KeyID)
      
      Filename = Trim(Filename)
    EndIf
  EndIf
  
  If Filename = #NULL$
    Filename = "shell32.dll,0"
  EndIf
  
  Length = Len(Filename)
  Count  = CountString(Filename, ",") + 1
  Value  = StringField(Filename, Count, ",")
  Index  = Val( Value )
  
  Length   - (Len(Value) + 1)
  Filename = Left(Filename, Length)
  
  ExtractIconEx_(Filename, Index, @Large, @Small, 1)
  
  If IconSize & #SHGFI_SMALLICON
    IconID = Small
  Else         ;#SHGFI_LARGEICON
    IconID = Large
  EndIf
  
  ProcedureReturn IconID
EndProcedure

;-test

SmallIcon = GetFileIcon("mpeg", #SHGFI_SMALLICON)
LargeIcon = GetFileIcon("mpeg", #SHGFI_LARGEICON)

If OpenWindow(0, 0, 0, 245, 105, #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered, "Extension Icon")
  CreateGadgetList(WindowID(0))
  
  ImageGadget(0,  10, 10, 100, 83,LargeIcon)
  ImageGadget(1, 130, 10, 100, 83,SmallIcon)
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Dri ;)
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

Message par gadjet35 »

bravo c'est très bien ! :D
:10:
bonne journer à tous !!!
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

Message par gadjet35 »

ce qui serait bien c'est que tu peux donner l'extension sur le programme en temps réelle ! 8O
bonne journer à tous !!!
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Ca m'a l'r bien sympa...
Je vais le etster chez moi ce soir ... :D
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

gadjet35 a écrit :ce qui serait bien c'est que tu peux donner l'extension sur le programme en temps réelle ! 8O
explique moi stp parce que j'ai pas compris

Dri :x
Avatar de l’utilisateur
Mindphazer
Messages : 695
Inscription : mer. 24/août/2005 10:42

Message par Mindphazer »

Waa, c'est sympa ce code
Bien pratique, en tous cas.

Hem.... moi non plus j'avoue ne pas avoir compris ce qu'a voulu dire Gadget35....... peut-être a-t'il voulu dire "ça serait bien si on pouvais choisir l'extention du fichier dont on doit afficher l'icône" ?? (c'est une interprètation personnelle....)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Bah je peux toujours bricoler l'exemple pour le faire... Là j'ai repris l'exemple de l'imagegadget lol

Dri ^^
Répondre