Here is a simple dropin mod I made for getting special folder locations more quickly anyway hope you find it usfull.
WinSpecialFolder.bas
Example
WinSpecialFolder.bas
Code:
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
(ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHGetSpecialFolderLocation Lib _
"shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder _
As Long, pidl As ITEMIDLIST) As Long
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
Public Enum SP_ID
CSIDL_ADMINTOOLS = 48
CSIDL_ALTSTARTUP = 29
CSIDL_APPDATA = 26
CSIDL_BITBUCKET = 10
CSIDL_CDBURN_AREA = 59
CSIDL_COMMON_ADMINTOOLS = 47
CSIDL_COMMON_ALTSTARTUP = 30
CSIDL_COMMON_APPDATA = 35
CSIDL_COMMON_DESKTOPDIRECTORY = 25
CSIDL_COMMON_DOCUMENTS = 46
CSIDL_COMMON_FAVORITES = 31
CSIDL_COMMON_MUSIC = 53
CSIDL_COMMON_PICTURES = 54
CSIDL_COMMON_PROGRAMS = 23
CSIDL_COMMON_STARTMENU = 22
CSIDL_COMMON_STARTUP = 24
CSIDL_COMMON_TEMPLATES = 45
CSIDL_COMMON_VIDEO = 55
CSIDL_COMPUTERSNEARME = 61
CSIDL_CONNECTIONS = 49
CSIDL_CONTROLS = 3
CSIDL_COOKIES = 33
CSIDL_DESKTOP = 0
CSIDL_DESKTOPDIRECTORY = 16
CSIDL_DRIVES = 17
CSIDL_FAVORITES = 6
CSIDL_FONTS = 20
CSIDL_HISTORY = 34
CSIDL_INTERNET = 1
CSIDL_INTERNET_CACHE = 32
CSIDL_LOCAL_APPDATA = 28
CSIDL_MYDOCUMENTS = 5
CSIDL_MYMUSIC = 13
CSIDL_MYPICTURES = 39
CSIDL_MYVIDEO = 14
CSIDL_NETHOOD = 19
CSIDL_NETWORK = 18
CSIDL_PERSONAL = 5
CSIDL_PHOTOALBUMS = 69
CSIDL_PLAYLISTS = 63
CSIDL_PRINTERS = 4
CSIDL_PRINTHOOD = 27
CSIDL_PROFILE = 40
CSIDL_PROGRAM_FILES = 38
CSIDL_PROGRAM_FILESX86 = 42
CSIDL_PROGRAM_FILES_COMMON = 43
CSIDL_PROGRAM_FILES_COMMONX86 = 44
CSIDL_PROGRAMS = 2
CSIDL_RECENT = 8
CSIDL_RESOURCES = 56
CSIDL_RESOURCES_LOCALIZED = 57
CSIDL_SAMPLE_MUSIC = 64
CSIDL_SAMPLE_PLAYLISTS = 65
CSIDL_SAMPLE_PICTURES = 66
CSIDL_SAMPLE_VIDEOS = 67
CSIDL_SENDTO = 9
CSIDL_STARTMENU = 11
CSIDL_STARTUP = 7
CSIDL_SYSTEM = 37
CSIDL_SYSTEMX86 = 41
CSIDL_TEMPLATES = 21
CSIDL_WINDOWS = 36
End Enum
Public Function GetSpecialFolderPath(id As SP_ID) As String
Dim idl As ITEMIDLIST
Dim Buff As String * 260
Dim RetVal As Long
Dim Pos As Integer
RetVal = SHGetSpecialFolderLocation(0, id, idl)
If (RetVal = 0) Then
RetVal = SHGetPathFromIDList(idl.mkid.cb, Buff)
'Get position of null
Pos = InStr(Buff, Chr$(0))
If (Pos <> 0) Then
'Strip null and return path
GetSpecialFolderPath = Left$(Buff, Pos - 1)
End If
End If
End Function
Code:
Private Sub Command1_Click()
Call MsgBox(GetSpecialFolderPath(CSIDL_TEMPLATES))
Call MsgBox(GetSpecialFolderPath(CSIDL_ADMINTOOLS))
End Sub