Option Explicit
'
Private Const CSIDL_DESKTOP As Long = &H0
Private Const CSIDL_INTERNET As Long = &H1
Private Const CSIDL_PROGRAMS As Long = &H2
Private Const CSIDL_CONTROLS As Long = &H3
Private Const CSIDL_PRINTERS As Long = &H4
Private Const CSIDL_PERSONAL As Long = &H5
Private Const CSIDL_FAVORITES As Long = &H6
Private Const CSIDL_STARTUP As Long = &H7
Private Const CSIDL_RECENT As Long = &H8
Private Const CSIDL_SENDTO As Long = &H9
Private Const CSIDL_BITBUCKET As Long = &HA
Private Const CSIDL_STARTMENU As Long = &HB
Private Const CSIDL_MYDOCUMENTS As Long = &HC
Private Const CSIDL_MYMUSIC As Long = &HD
Private Const CSIDL_MYVIDEO As Long = &HE
Private Const CSIDL_DESKTOPDIRECTORY As Long = &H10
Private Const CSIDL_DRIVES As Long = &H11
Private Const CSIDL_NETWORK As Long = &H12
Private Const CSIDL_NETHOOD As Long = &H13
Private Const CSIDL_FONTS As Long = &H14
Private Const CSIDL_TEMPLATES As Long = &H15
Private Const CSIDL_COMMON_STARTMENU As Long = &H16
Private Const CSIDL_COMMON_PROGRAMS As Long = &H17
Private Const CSIDL_COMMON_STARTUP As Long = &H18
Private Const CSIDL_COMMON_DESKTOPDIRECTORY As Long = &H19
Private Const CSIDL_APPDATA As Long = &H1A
Private Const CSIDL_PRINTHOOD As Long = &H1B
Private Const CSIDL_LOCAL_APPDATA As Long = &H1C
Private Const CSIDL_ALTSTARTUP As Long = &H1D
Private Const CSIDL_COMMON_ALTSTARTUP As Long = &H1E
'
Private Const CSIDL_COMMON_FAVORITES As Long = &H1F
Private Const CSIDL_INTERNET_CACHE As Long = &H20
Private Const CSIDL_COOKIES As Long = &H21
Private Const CSIDL_HISTORY As Long = &H22
Private Const CSIDL_COMMON_APPDATA As Long = &H23
Private Const CSIDL_WINDOWS As Long = &H24
Private Const CSIDL_SYSTEM As Long = &H25
Private Const CSIDL_PROGRAM_FILES As Long = &H26
Private Const CSIDL_MYPICTURES As Long = &H27
Private Const CSIDL_PROFILE As Long = &H28
Private Const CSIDL_PROGRAM_FILES_COMMON As Long = &H2B
Private Const CSIDL_COMMON_TEMPLATES As Long = &H2D
Private Const CSIDL_COMMON_DOCUMENTS As Long = &H2E
Private Const CSIDL_COMMON_ADMINTOOLS As Long = &H2F
Private Const CSIDL_ADMINTOOLS As Long = &H30
Private Const CSIDL_CONNECTIONS As Long = &H31
Private Const CSIDL_COMMON_MUSIC As Long = &H35
Private Const CSIDL_COMMON_PICTURES As Long = &H36
Private Const CSIDL_COMMON_VIDEO As Long = &H37
Private Const CSIDL_RESOURCES As Long = &H38
Private Const CSIDL_RESOURCES_LOCALIZED As Long = &H39
Private Const CSIDL_COMMON_OEM_LINKS As Long = &H3A
Private Const CSIDL_CDBURN_AREA As Long = &H3B
Private Const CSIDL_COMPUTERSNEARME As Long = &H3D
'
Public Enum SpecialFolders
'
Desktop = CSIDL_DESKTOP
Internet = CSIDL_INTERNET
Programs = CSIDL_PROGRAMS
Controls = CSIDL_CONTROLS
Printers = CSIDL_PRINTERS
Personal = CSIDL_PERSONAL
Favorites = CSIDL_FAVORITES
Startup = CSIDL_STARTUP
Recent = CSIDL_RECENT
SendTo = CSIDL_SENDTO
BitBucket = CSIDL_BITBUCKET
StartMenu = CSIDL_STARTMENU
MyDocuments = CSIDL_MYDOCUMENTS
MyMusic = CSIDL_MYMUSIC
MyVideo = CSIDL_MYVIDEO
DesktopDirectory = CSIDL_DESKTOPDIRECTORY
Drives = CSIDL_DRIVES
Network = CSIDL_NETWORK
NetHood = CSIDL_NETHOOD
Fonts = CSIDL_FONTS
Templates = CSIDL_TEMPLATES
Common_StartMenu = CSIDL_COMMON_STARTMENU
Common_Programs = CSIDL_COMMON_PROGRAMS
Common_Startup = CSIDL_COMMON_STARTUP
Common_DesktopDirectory = CSIDL_COMMON_DESKTOPDIRECTORY
AppData = CSIDL_APPDATA
PrintHood = CSIDL_PRINTHOOD
Local_AppData = CSIDL_LOCAL_APPDATA
AltStartup = CSIDL_ALTSTARTUP
Common_AltStartup = CSIDL_COMMON_ALTSTARTUP
'
Common_Favorites = CSIDL_COMMON_FAVORITES
Internet_Cache = CSIDL_INTERNET_CACHE
Cookies = CSIDL_COOKIES
History = CSIDL_HISTORY
Common_ApPData = CSIDL_COMMON_APPDATA
Windows = CSIDL_WINDOWS
System = CSIDL_SYSTEM
Program_Files = CSIDL_PROGRAM_FILES
MyPictures = CSIDL_MYPICTURES
Profile = CSIDL_PROFILE
Program_Files_Common = CSIDL_PROGRAM_FILES_COMMON
Common_Program_Files = CSIDL_PROGRAM_FILES_COMMON
Common_Templates = CSIDL_COMMON_TEMPLATES
Common_Documents = CSIDL_COMMON_DOCUMENTS
Common_AdminTools = CSIDL_COMMON_ADMINTOOLS
AdminTools = CSIDL_ADMINTOOLS
Connections = CSIDL_CONNECTIONS
Common_Music = CSIDL_COMMON_MUSIC
Common_Pictures = CSIDL_COMMON_PICTURES
Common_Video = CSIDL_COMMON_VIDEO
Resources = CSIDL_RESOURCES
Resources_Localized = CSIDL_RESOURCES_LOCALIZED
Common_OEM_Links = CSIDL_COMMON_OEM_LINKS
CDBurn_Area = CSIDL_CDBURN_AREA
ComputersNearMe = CSIDL_COMPUTERSNEARME
'
End Enum
'
Private Type SHITEMID
cb As Long
abID As Byte
End Type
'
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
'
Public Function GetSpecialfolder(CSIDL As Long) As String
'
Dim r As Long
Dim IDL As ITEMIDLIST
Dim strPath As String
'
Const NOERROR = 0
'Const MAX_LENGTH = 260
'
r = SHGetSpecialFolderLocation(100, CSIDL, IDL)
If r = NOERROR Then
strPath = Space$(512)
r = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal strPath)
GetSpecialfolder = Left$(strPath, InStr(strPath, Chr$(0)) - 1)
End If
'
End Function