Basic Univers
; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Récupérer le nom, l'adresse et l'icône des dossiers spéciaux de windows

ProcedureDLL.s GetSpecialFolderLocation(Valeur.l) ; Récupère l'adresse d'un dossier spécifique de Windows
  Protected SpecialFolderLocation.s, Dossier_ID.l
  If SHGetSpecialFolderLocation_(0, Valeur, @Dossier_ID) = 0
    SpecialFolderLocation = Space(#MAX_PATH)
    SHGetPathFromIDList_(Dossier_ID, @SpecialFolderLocation)
    If SpecialFolderLocation
      If Right(SpecialFolderLocation, 1) <> "\"
        SpecialFolderLocation + "\"
      EndIf
    EndIf
  EndIf
  ProcedureReturn SpecialFolderLocation
EndProcedure

ProcedureDLL.s GetSpecialFolderName(Valeur.l) ; Récupère le nom d'un dossier spécifique de Windows
  Protected SpecialFolderName.s, Dossier_ID.l
  If SHGetSpecialFolderLocation_(0, Valeur, @Dossier_ID) = 0
    SpecialFolderName = Space(#MAX_PATH)
    SHGetPathFromIDList_(Dossier_ID, @SpecialFolderName)
    If SpecialFolderName
      SpecialFolderName = GetFilePart(SpecialFolderName)
    Else
      Select Valeur
        Case 1 : SpecialFolderName = "Internet explorer"
        Case 3 : SpecialFolderName = "Panneau de configuration"
        Case 4 : SpecialFolderName = "Imprimantes et télécopieurs"
        Case 10 : SpecialFolderName = "Corbeille"
        Case 17 : SpecialFolderName = "Poste de travail"
        Case 18 : SpecialFolderName = "Favoris réseau"
        Case 49 : SpecialFolderName = "Connexions réseau"
        Case 61 : SpecialFolderName = "Réseau"
      EndSelect
    EndIf
  EndIf
  ProcedureReturn SpecialFolderName
EndProcedure

ProcedureDLL.l GetSpecialFolderSmallIcon(Valeur.l) ; Récupère l'icône 16*16 d'un dossier spécifique de Windows
  Protected Dossier.SHFILEINFO, Dossier_ID.l, Icone
  If SHGetSpecialFolderLocation_(0, Valeur, @Dossier_ID) = 0
    SHGetFileInfo_(Dossier_ID, 0, @Dossier, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_PIDL | #SHGFI_SMALLICON)
  EndIf
  ProcedureReturn Dossier\hIcon
EndProcedure

ProcedureDLL.l GetSpecialFolderLargeIcon(Valeur.l) ; Récupère l'icône 32*32 d'un dossier spécifique de Windows
  Protected Dossier.SHFILEINFO, Dossier_ID.l, Icone
  If SHGetSpecialFolderLocation_(0, Valeur, @Dossier_ID) = 0
    SHGetFileInfo_(Dossier_ID, 0, @Dossier, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_PIDL | #SHGFI_LARGEICON)
  EndIf
  ProcedureReturn Dossier\hIcon
EndProcedure



;- Programme principal

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 800, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Icône") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf

; On crée un liste
ListIconGadget(1, 0, 0, 800, 200, "Valeur", 60, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_FullRowSelect)
AddGadgetColumn(1, 1, "Nom", 150)
AddGadgetColumn(1, 2, "Adresse du dossier", 560)

; On liste tous les dossier systèmes récupérables
For n = 0 To 200
  Nom.s = GetSpecialFolderName(n) ; On récupère le nom du dossier
  Adresse.s = GetSpecialFolderLocation(n) ; On récupère l'adresse du dossier
  If Nom
    If Adresse = "" ; Affichage dans le debugger des dossiers
      Debug RSet(Str(n), 2, "0") + "     Pas de dossier, il s'agit de : " + Nom
    Else
      Debug RSet(Str(n), 2, "0") + "     " + Adresse
    EndIf
    AddGadgetItem(1, - 1, Str(n) + Chr(10) + Nom + Chr(10) + Adresse) ; On affiche
  EndIf
Next

; On affiche l'icône du premier élément
SetGadgetState(1, 0) ; on sélectionne le premier élément
TextGadget(4, 5, 215, 200, 15, "Icône du dossier sélectionné :")
ImageGadget(2, 5, 235, 16, 16, GetSpecialFolderSmallIcon(0)) ; en 16 * 16
ImageGadget(3, 50, 235, 32, 32, GetSpecialFolderLargeIcon(0)) ; en 32 * 32

Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    Select EventGadgetID() ; Gadgets
      Case 1
        Position = GetGadgetState(1)
        If Position >= 0
          Valeur = Val(GetGadgetItemText(1, Position, 0))
          SetGadgetState(2, GetSpecialFolderSmallIcon(Valeur))
          SetGadgetState(3, GetSpecialFolderLargeIcon(Valeur))
        EndIf
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow

End




; Voici la liste des valeurs obtenues sous Windows XP (Certaines valeurs n'ont pas de dossier sous d'autres version de Windows)

; 00     C:\Documents And Settings\Le Soldat Inconnu\Bureau\
; 01     Pas de dossier, il s'agit de : Internet Explorer
; 02     C:\Documents And Settings\Le Soldat Inconnu\Menu Démarrer\Programmes\
; 03     Pas de dossier, il s'agit de : Panneau de configuration
; 04     Pas de dossier, il s'agit de : Imprimantes et télécopieurs
; 05     C:\Documents And Settings\Le Soldat Inconnu\Mes Documents\
; 06     C:\Documents And Settings\Le Soldat Inconnu\Favoris\
; 07     C:\Documents And Settings\Le Soldat Inconnu\Menu Démarrer\Programmes\Démarrage\
; 08     C:\Documents And Settings\Le Soldat Inconnu\Recent\
; 09     C:\Documents And Settings\Le Soldat Inconnu\SendTo\
; 10     Pas de dossier, il s'agit de : Corbeille
; 11     C:\Documents And Settings\Le Soldat Inconnu\Menu Démarrer\
; 13     C:\Documents And Settings\Le Soldat Inconnu\Mes Documents\Ma musique\
; 16     C:\Documents And Settings\Le Soldat Inconnu\Bureau\
; 17     Pas de dossier, il s'agit de : Poste de travail
; 18     Pas de dossier, il s'agit de : Favoris réseau
; 19     C:\Documents And Settings\Le Soldat Inconnu\Voisinage réseau\
; 20     C:\WINDOWS\Fonts\
; 21     C:\Documents And Settings\Le Soldat Inconnu\Modèles\
; 22     C:\Documents And Settings\All Users\Menu Démarrer\
; 23     C:\Documents And Settings\All Users\Menu Démarrer\Programmes\
; 24     C:\Documents And Settings\All Users\Menu Démarrer\Programmes\Démarrage\
; 25     C:\Documents And Settings\All Users\Bureau\
; 26     C:\Documents And Settings\Le Soldat Inconnu\Application Data\
; 27     C:\Documents And Settings\Le Soldat Inconnu\Voisinage D'impression\
; 28     C:\Documents And Settings\Le Soldat Inconnu\Local Settings\Application Data\
; 31     C:\Documents And Settings\All Users\Favoris\
; 32     C:\Documents And Settings\Le Soldat Inconnu\Local Settings\Temporary Internet Files\
; 33     C:\Documents And Settings\Le Soldat Inconnu\Cookies\
; 34     C:\Documents And Settings\Le Soldat Inconnu\Local Settings\Historique\
; 35     C:\Documents And Settings\All Users\Application Data\
; 36     C:\WINDOWS\
; 37     C:\WINDOWS\system32\
; 38     C:\Program Files\
; 39     C:\Documents And Settings\Le Soldat Inconnu\Mes Documents\Mes images\
; 40     C:\Documents And Settings\Le Soldat Inconnu\
; 41     C:\WINDOWS\system32\
; 43     C:\Program Files\Fichiers communs\
; 45     C:\Documents And Settings\All Users\Modèles\
; 46     C:\Documents And Settings\All Users\Documents\
; 47     C:\Documents And Settings\All Users\Menu Démarrer\Programmes\Outils D'administration\
; 49     Pas de dossier, il s'agit de : Connexions réseau
; 54     C:\Documents And Settings\All Users\Documents\Mes images\
; 56     C:\WINDOWS\Resources\
; 59     C:\Documents And Settings\Le Soldat Inconnu\Local Settings\Application Data\Microsoft\CD Burning\
; 61     Pas de dossier, il s'agit de : Réseau


; Voici la liste des valeurs obtenues sous Windows ME

; 00     C:\WINDOWS\Bureau\
; 01     Pas de dossier, il s'agit de : Internet explorer
; 02     C:\WINDOWS\Menu Démarrer\Programmes\
; 03     Pas de dossier, il s'agit de : Panneau de configuration
; 04     Pas de dossier, il s'agit de : Imprimantes et télécopieurs
; 05     C:\Mes documents\
; 06     C:\WINDOWS\Favoris\
; 07     C:\WINDOWS\Menu Démarrer\Programmes\Démarrage\
; 08     C:\WINDOWS\Recent\
; 09     C:\WINDOWS\SendTo\
; 10     Pas de dossier, il s'agit de : Corbeille
; 11     C:\WINDOWS\Menu Démarrer\
; 13     C:\Mes documents\Ma musique\
; 14     C:\Mes documents\Mes vidéos\
; 16     C:\WINDOWS\Bureau\
; 17     Pas de dossier, il s'agit de : Poste de travail
; 18     Pas de dossier, il s'agit de : Favoris réseau
; 19     C:\WINDOWS\Voisinage réseau\
; 20     C:\WINDOWS\FONTS\
; 21     C:\WINDOWS\Modèles\
; 24     C:\WINDOWS\All Users\Menu Démarrer\Programmes\Démarrage\
; 25     C:\WINDOWS\All Users\Bureau\
; 26     C:\WINDOWS\Application Data\
; 27     C:\WINDOWS\Voisinage d'impression\
; 28     C:\WINDOWS\Application Data\
; 32     C:\WINDOWS\Temporary Internet Files\
; 33     C:\WINDOWS\COOKIES\
; 34     C:\WINDOWS\Historique\
; 35     C:\WINDOWS\All Users\Application Data\
; 36     C:\WINDOWS\
; 37     C:\WINDOWS\SYSTEM\
; 38     C:\Program Files\
; 39     C:\Mes documents\Mes images\
; 41     C:\WINDOWS\SYSTEM\
; 43     C:\Program Files\Fichiers communs\
; 46     C:\WINDOWS\All Users\Documents\
; 49     Pas de dossier, il s'agit de : Connexions réseau


; Voici la liste des valeurs obtenues sous Windows 98

; 00     C:\WINDOWS\Bureau\
; 01     Pas de dossier, il s'agit de : Internet explorer
; 02     C:\WINDOWS\Menu Démarrer\Programmes\
; 03     Pas de dossier, il s'agit de : Panneau de configuration
; 04     Pas de dossier, il s'agit de : Imprimantes et télécopieurs
; 05     C:\Mes documents\
; 06     C:\WINDOWS\Favoris\
; 07     C:\WINDOWS\Menu Démarrer\Programmes\Démarrage\
; 08     C:\WINDOWS\Recent\
; 09     C:\WINDOWS\SendTo\
; 10     Pas de dossier, il s'agit de : Corbeille
; 11     Menu Démarrer C:\WINDOWS\Menu Démarrer\
; 16     C:\WINDOWS\Bureau\
; 17     Pas de dossier, il s'agit de : Poste de travail
; 18     Pas de dossier, il s'agit de : Favoris réseau
; 19     C:\WINDOWS\Voisinage réseau\
; 20     C:\WINDOWS\FONTS\
; 21     C:\WINDOWS\ShellNew\
; 26     C:\WINDOWS\Application Data\
; 27     C:\WINDOWS\PrintHood\
; 32     C:\WINDOWS\Temporary Internet Files\
; 33     C:\WINDOWS\Cookies\
; 34     C:\WINDOWS\Historique\