Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.3
; Explication du programme :
; Récupérer le nom, l'adresse et l'icône des dossiers spéciaux de windows
; Liste des dossiers
#CSIDL_DESKTOP = $0000 ; <DESKTOP>
#CSIDL_PROGRAMS = $0002 ; START MENU\PROGRAMS
#CSIDL_CONTROLS = $0003 ; MY COMPUTER\CONTROL PANE
#CSIDL_PRINTERS = $0004 ; MY COMPUTER\PRINTERS
#CSIDL_PERSONAL = $0005 ; MY DOCUMENTS
#CSIDL_FAVORITES = $0006 ; <USER NAME>\FAVORITES
#CSIDL_STARTUP = $0007 ; START MENU\PROGRAMS\STARTUP
#CSIDL_RECENT = $0008 ; <USER NAME>\RECENT
#CSIDL_SENDTO = $0009 ; <USER NAME>\SENDTO
#CSIDL_BITBUCKET = $000A ; <DESKTOP>\RECYCLE BIN
#CSIDL_STARTMENU = $000B ; <USER NAME>\START MENU
; #CSIDL_MYDOCUMENTS = #CSIDL_PERSONAL ; Personal was just a silly name For My Documents
#CSIDL_MYMUSIC = $000D ; "MY MUSIC" FOLDER
#CSIDL_MYVIDEO = $000E ; "MY VIDEOS" FOLDER
#CSIDL_DESKTOPDIRECTORY = $0010 ; <USER NAME>\DESKTOP
#CSIDL_DRIVES = $0011 ; MY COMPUTER
#CSIDL_NETHOOD = $0013 ; <USER NAME>\NETHOOD
#CSIDL_FONTS = $0014 ; WINDOWS\FONTS
#CSIDL_TEMPLATES = $0015
#CSIDL_COMMON_STARTMENU = $0016 ; ALL USERS\START MENU
#CSIDL_COMMON_PROGRAMS = $0017 ; ALL USERS\START MENU\PROGRAMS
#CSIDL_COMMON_STARTUP = $0018 ; ALL USERS\STARTUP
#CSIDL_COMMON_DESKTOPDIRECTORY = $0019 ; ALL USERS\DESKTOP
#CSIDL_APPDATA = $001A ; <USER NAME>\APPLICATION DATA
#CSIDL_PRINTHOOD = $001B ; <USER NAME>\PRINTHOOD
#CSIDL_ALTSTARTUP = $001D ; NON LOCALIZED STARTUP
#CSIDL_COMMON_ALTSTARTUP = $001E ; NON LOCALIZED COMMON STARTUP
#CSIDL_COMMON_FAVORITES = $001F
#CSIDL_INTERNET_CACHE = $0020
#CSIDL_COOKIES = $0021
#CSIDL_HISTORY = $0022
#CSIDL_COMMON_APPDATA = $0023 ; ALL USERS\APPLICATION DATA
#CSIDL_WINDOWS = $0024 ; WINDOWS\
#CSIDL_PROGRAM_FILES = $0026 ; C:\PROGRAM FILES
#CSIDL_MYPICTURES = $0027 ; C:\PROGRAM FILES\MY PICTURES
#CSIDL_PROFILE = $0028 ; USERPROFILE
#CSIDL_SYSTEMX86 = $0029 ; X86 SYSTEM DIRECTORY ON RISC
#CSIDL_PROGRAM_FILESX86 = $002A ; X86 C:\PROGRAM FILES ON RISC
#CSIDL_PROGRAM_FILES_COMMON = $002B ; C:\PROGRAM FILES\COMMON
#CSIDL_PROGRAM_FILES_COMMONX86 = $002C ; X86 PROGRAM FILES\COMMON ON RISC
#CSIDL_COMMON_TEMPLATES = $002D ; ALL USERS\TEMPLATES
#CSIDL_COMMON_DOCUMENTS = $002E ; ALL USERS\DOCUMENTS
#CSIDL_COMMON_ADMINTOOLS = $002F ; ALL USERS\START MENU\PROGRAMS\ADMINISTRATIVE TOOLS
#CSIDL_ADMINTOOLS = $0030 ; <USER NAME>\START MENU\PROGRAMS\ADMINISTRATIVE TOOLS
#CSIDL_CONNECTIONS = $0031 ; NETWORK AND DIAL-UP CONNECTIONS
#CSIDL_COMMON_MUSIC = $0035 ; ALL USERS\MY MUSIC
#CSIDL_COMMON_PICTURES = $0036 ; ALL USERS\MY PICTURES
#CSIDL_COMMON_VIDEO = $0037 ; ALL USERS\MY VIDEO
#CSIDL_RESOURCES = $0038 ; RESOURCE DIRECOTRY
#CSIDL_RESOURCES_LOCALIZED = $0039 ; LOCALIZED RESOURCE DIRECOTRY
#CSIDL_COMMON_OEM_LINKS = $003A ; LINKS TO ALL USERS OEM SPECIFIC APPS
#CSIDL_CDBURN_AREA = $003B ; USERPROFILE\LOCAL SETTINGS\APPLICATION DATA\MICROSOFT\CD BURNING
#CSIDL_FLAG_DONT_VERIFY = $4000 ; COMBINE WITH CSIDL_ VALUE TO RETURN AN UNVERIFIED FOLDER PATH
#CSIDL_FLAG_DONT_UNEXPAND = $2000 ; COMBINE WITH CSIDL_ VALUE TO AVOID UNEXPANDING ENVIRONMENT VARIABLES
#CSIDL_FLAG_NO_ALIAS = $1000 ; COMBINE WITH CSIDL_ VALUE TO INSURE NON-ALIAS VERSIONS OF THE PID
#CSIDL_FLAG_MASK = $FF00 ; MASK FOR ALL POSSIBLE FLAG VALUES
ProcedureDLL.s GetSpecialFolderLocation2(CSIDL.L) ; Récupère l'adresse d'un dossier spécifique de Windows
Protected SpecialFolderLocation.s, PIDL.L, Dossier.SHFILEINFO
SpecialFolderLocation = Space(#MAX_PATH)
If SHGetFolderPath_(0, CSIDL, 0, #SHGFP_TYPE_DEFAULT, @SpecialFolderLocation) = 0
If SpecialFolderLocation
If Right(SpecialFolderLocation, 1) <> "\"
SpecialFolderLocation + "\"
EndIf
EndIf
EndIf
ProcedureReturn SpecialFolderLocation
EndProcedure
ProcedureDLL.s GetSpecialFolderName2(CSIDL.L) ; Récupère le nom d'un dossier spécifique de Windows
Protected Dossier.SHFILEINFO, PIDL.L
If SHGetSpecialFolderLocation_(0, CSIDL, @PIDL) = 0
SHGetFileInfo_(PIDL, 0, @Dossier, SizeOf(SHFILEINFO), #SHGFI_PIDL | #SHGFI_DISPLAYNAME)
EndIf
ProcedureReturn PeekS(@Dossier\szDisplayName)
EndProcedure
#SHIL_SMALL = $1
#SHIL_LARGE = $0
#SHIL_EXTRALARGE = $2
#SHIL_JUMBO = $4
#LOAD_LIBRARY_AS_DATAFILE = 2
DataSection
IID_IImageList :
Data.l $46EB5926
Data.w $582E, $4017
Data.b $9F, $DF, $E8, $99, $8D, $AA, $09, $50
EndDataSection
Structure IMAGELISTDRAWPARAMS
cbSize.l
himl.l
i.l
hdcDst.l
x.l
y.l
cx.l
cy.l
xBitmap.l
yBitmap.l
rgbBk.l
rgbFg.l
fStyle.l
dwRop.l
fState.l
frame.l
crEffect.l
EndStructure
Interface IImageList2 Extends iUnknown
Add(hbmImage, hbmMask, pi)
ReplaceIcon(i, hIcon, pi)
SetOverlayImage(iImage, iOverlay)
Replace(i, hbmImage, hbmMask)
AddMasked(hbmImage, crMask, pi)
Draw(pimldp.IMAGELISTDRAWPARAMS)
Remove(i)
GetIcon(i, flags, picon)
GetImageInfo(i, pImageInfo.IMAGEINFO)
Copy(iDst, punkSrc.IImageList, iSrc, uFlags)
Merge(i1, punk2.IImageList, i2, dx, dy, riid, ppv)
Clone(riid, ppv)
GetImageRect(i, prc.RECT)
GetIconSize(cx, cy)
SetIconSize(cx, cy)
GetImageCount(pi)
SetImageCount(uNewCount)
SetBkColor(clrBk, pclr)
GetBkColor(pclr)
BeginDrag(iTrack, dxHotspot, dyHotspot)
EndDrag()
DragEnter(hwndLock, x, y)
DragLeave(hwndLock)
DragMove(x, y)
SetDragCursorImage(punk.IImageList, iDrag, dxHotspot, dyHotspot)
DragShowNolock(fShow)
GetDragImage(ppt.POINT, pptHotspot.POINT, riid, ppv)
GetItemFlags(i, dwFlags)
GetOverlayImage(iOverlay, piIndex)
EndInterface
Global OS = OSVersion()
ProcedureDLL.L GetSpecialFolderIcon2(CSIDL.L, Size.L)
Protected hIcon.L, FileInfo.SHFILEINFO, dll_Shell32.L, hResult.L, *Guid.L, IconFile.L
Select Size
Case #SHIL_SMALL, 16
SHIL = #SHIL_SMALL
Case #SHIL_LARGE, 32
SHIL = #SHIL_LARGE
Case #SHIL_EXTRALARGE, 48
SHIL = #SHIL_EXTRALARGE
Case #SHIL_JUMBO, 128, 256
If OS >= #PB_OS_Windows_Vista
SHIL = #SHIL_JUMBO
Else
SHIL = #SHIL_EXTRALARGE
EndIf
Default
SHIL = #SHIL_SMALL
EndSelect
If SHGetSpecialFolderLocation_(0, CSIDL, @IconFile) = 0
If OS >= #PB_OS_Windows_XP ; Pour Windows XP et plus, toute taille d'icône
dll_Shell32 = OpenLibrary(#PB_Any, "Shell32.dll")
If dll_Shell32
*Guid = ?IID_IImageList
SHGetFileInfo_(IconFile, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_SYSICONINDEX | #SHGFI_PIDL)
hResult = CallFunction(dll_Shell32, "SHGetImageList", SHIL, *Guid, @ImageList.IImageList2)
If hResult = 0
ImageList\GetIcon(FileInfo\iIcon, #ILD_TRANSPARENT, @hIcon)
ImageList\Release()
EndIf
CloseLibrary(dll_Shell32)
EndIf
Else ; Avant windows XP, icône 16*16 ou 32*32
If SHIL = #SHIL_EXTRALARGE Or SHIL = #SHIL_LARGE
SHGetFileInfo_(IconFile, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_PIDL | #SHGFI_LARGEICON)
hIcon = InfosFile\hIcon
Else
SHGetFileInfo_(IconFile, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_PIDL | #SHGFI_SMALLICON)
hIcon = InfosFile\hIcon
EndIf
EndIf
EndIf
ProcedureReturn hIcon
EndProcedure
;- Programme principal
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 800, 300, "Dossiers spéciaux", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 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 = GetSpecialFolderName2(n) ; On récupère le nom du dossier
Adresse.s = GetSpecialFolderLocation2(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é :")
Icone16 = GetSpecialFolderIcon2(0, 16) ; en 16 * 16
Icone32 = GetSpecialFolderIcon2(0, 32) ; en 32 * 32
Icone48 = GetSpecialFolderIcon2(0, 32) ; en 48 * 48
ImageGadget(2, 5, 235, 16, 16, Icone16) ; en 16 * 16
ImageGadget(3, 5 + 16 + 4, 235, 32, 32, Icone32) ; en 32 * 32
ImageGadget(4, 5 + 16 + 4 + 32 + 4, 235, 48, 48, Icone48) ; en 48 * 48
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case 1
Select EventType()
Case #PB_EventType_Change
Position = GetGadgetState(1)
If Position >= 0
Valeur = Val(GetGadgetItemText(1, Position, 0))
DestroyIcon_(Icone16)
DestroyIcon_(Icone32)
DestroyIcon_(Icone48)
Icone16 = GetSpecialFolderIcon2(Valeur, 16)
Icone32 = GetSpecialFolderIcon2(Valeur, 32)
Icone48 = GetSpecialFolderIcon2(Valeur, 48)
SetGadgetState(2, Icone16)
SetGadgetState(3, Icone32)
SetGadgetState(4, Icone48)
EndIf
Case #PB_EventType_LeftDoubleClick
Position = GetGadgetState(1)
If Position >= 0
Debug GetGadgetItemText(1, Position, 2)
RunProgram("explorer.exe", "/e,/n," + Chr(34) + GetGadgetItemText(1, Position, 2) + Chr(34), "")
EndIf
EndSelect
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
DestroyIcon_(Icone16)
DestroyIcon_(Icone32)
DestroyIcon_(Icone48)
End
; Voici la liste des valeurs obtenu sous Windows 7
; 00 C:\Users\LSI\Desktop\
; 01
; 02 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
; 03
; 04
; 05 C:\Users\LSI\Documents\
; 06 C:\Users\LSI\Favorites\
; 07 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
; 08 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Recent\
; 09 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\SendTo\
; 10
; 11 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Start Menu\
; 13 C:\Users\LSI\Music\
; 14 C:\Users\LSI\Videos\
; 16 C:\Users\LSI\Desktop\
; 17
; 18
; 19 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Network Shortcuts\
; 20 C:\Windows\Fonts\
; 21 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Templates\
; 22 C:\ProgramData\Microsoft\Windows\Start Menu\
; 23 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\
; 24 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\
; 25 C:\Users\Public\Desktop\
; 26 C:\Users\LSI\AppData\Roaming\
; 27 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Printer Shortcuts\
; 28 C:\Users\LSI\AppData\Local\
; 29 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
; 30 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\
; 31 C:\Users\LSI\Favorites\
; 32 C:\Users\LSI\AppData\Local\Microsoft\Windows\Temporary Internet Files\
; 33 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Cookies\
; 34 C:\Users\LSI\AppData\Local\Microsoft\Windows\History\
; 35 C:\ProgramData\
; 36 C:\Windows\
; 37 C:\Windows\system32\
; 38 C:\Program Files (x86)\
; 39 C:\Users\LSI\Pictures\
; 40 C:\Users\LSI\
; 41 C:\Windows\SysWOW64\
; 42 C:\Program Files (x86)\
; 43 C:\Program Files (x86)\Common Files\
; 44 C:\Program Files (x86)\Common Files\
; 45 C:\ProgramData\Microsoft\Windows\Templates\
; 46 C:\Users\Public\Documents\
; 47 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
; 48 C:\Users\LSI\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
; 49
; 53 C:\Users\Public\Music\
; 54 C:\Users\Public\Pictures\
; 55 C:\Users\Public\Videos\
; 56 C:\Windows\resources\
; 59 C:\Users\LSI\AppData\Local\Microsoft\Windows\Burn\Burn1\
; 61
; 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 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\