Special folders

From HashVB
Revision as of 13:48, 6 October 2005 by Dee (Talk | contribs)

Jump to: navigation, search

There are numerous ways to get "special" paths in windows. You can read them directly from the registry, but this is not recommended. You can also get a few select ones by reading the environment variables, but again, these are not guaranteed. The proper way is to use the SHGetSpecialFolderLocation() function.

Private Declare Function SHGetSpecialFolderLocation Lib "shell32" _
 (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As Long) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" _
 (ByVal pidl As Long, ByVal pszPath As String) As Long

Private Const ERROR_SUCCESS = 0
Private Const MAX_LENGTH = 260

Public Function GetSpecialFolder(ByVal CSIDL As Long) As String
Dim sPath As String
Dim pidl As Long

  'Get the ID list form the Path ID
  If SHGetSpecialFolderLocation(0, CSIDL, pidl) = ERROR_SUCCESS Then
    'Allocate the space for the path
    sPath = Space$(MAX_LENGTH)
    'Get the real path form the ID list
    If SHGetPathFromIDList(ByVal pidl, ByVal sPath) Then
      'Strip off the trailing null characters
      GetSpecialFolder = Left$(sPath, InStr(sPath, Chr$(0)) - 1)
      If Right(GetSpecialFolder, 1) <> "\" Then GetSpecialFolder = GetSpecialFolder & "\"
    End If
  End If
End Function

CSIDL folder values

The values for various folders are as follows:

Folder Constant Value Example
Documents
My Documents CSIDL_PERSONAL &H05 (user)\My Documents
My Pictures CSIDL_MYPICTURES &H27 (user)\My Documents\My Pictures
My Music &H0D (user)\My Documents\My Music
Common documents CSIDL_COMMON_DOCUMENTS &H2E (all users)\Documents
Common Pictures &H36 (all users)\Documents\My Pictures
Common Music &H35 (all users)\Documents\My Music
Common Videos &H37 (all users)\Documents\My Videos
Start menu
Start menu CSIDL_STARTMENU &H0B (user)\Start Menu
Programs CSIDL_PROGRAMS &H02 (user)\Start Menu\Programs
Startup CSIDL_STARTUP &H07 (user)\Start Menu\Programs\Startup
Common start menu CSIDL_COMMON_STARTMENU &H16 (all users)\Start Menu
Common programs CSIDL_COMMON_PROGRAMS &H17 (all users)\Start Menu\Programs
Common Startup CSIDL_COMMON_STARTUP &H18 (all users)\Start Menu\Programs\Startup
Shell folders
Desktop CSIDL_DESKTOPDIRECTORY &H10 (user)\Desktop
Favourites CSIDL_FAVORITES &H06 (user)\Favorites
Recent documents CSIDL_RECENT &H08 (user)\Recent
Send to... CSIDL_SENDTO &H09 (user)\SendTo
Templates CSIDL_TEMPLATES &H15 (user)\Templates
Common desktop CSIDL_COMMON_DESKTOPDIRECTORY &H19 (all users)\Desktop
Common favourites CSIDL_COMMON_FAVORITES &H1F (all users)\Favourites
Common templates CSIDL_COMMON_TEMPLATES &H2D (all users)\Templates
"Data" folders
Application data CSIDL_APPDATA &H1A (user)\Application Data
Local application data CSIDL_LOCAL_APPDATA &H1C (user)\Local Settings\Application Data
Common application data CSIDL_COMMON_APPDATA &H23 (all users)\Application Data
IE folders
Temporary internet files CSIDL_INTERNET_CACHE &H20
IE Cookies CSIDL_COOKIES &H21
IE History CSIDL_HISTORY &H22
System folders
Windows directory CSIDL_WINDOWS &H24 C:\Windows
System directory CSIDL_SYSTEM &H25 C:\Windows\System32
Fonts CSIDL_FONTS &H14 C:\Windows\Fonts
Program files CSIDL_PROGRAM_FILES &H26 C:\Program Files
Common files CSIDL_PROGRAM_FILES_COMMON &H2B C:\Program Files\Common Files
User profile CSIDL_PROFILE &H28 (user)
Admin tools
Common admin tools CSIDL_COMMON_ADMINTOOLS &H2F (all users)\Start Menu\Programs\Administrative Tools
Admin tools CSIDL_ADMINTOOLS &H30 {user}\Start Menu\Programs\Administrative Tools

See also