Resumen Directorios de usuario

Al final, buscando, buscando encontré MSDN (sección Development Platform) una referencia a la función SHGetFolderPath, que he traducido así:

Declare Function SHGetFolderPath _
        Lib "SHFolder.DLL" _
        Alias "SHGetFolderPathA" (ByVal hwndOwner As Long, _
                                  ByVal nFolder As Integer, _
                                  ByVal hToken As Long, _
                                  ByVal dwFlags As Long, _
                                  ByVal pszPath As String) As Long


y se la llama así:

Dim strDir As String
Dim lngResult As Long

strDir = Space(260)

lngResult = SHGetFolderPath(0&, nFolder , 0&, dwFlags, strDir)

If lngResult = 0 Then
  ' ben
  strDir = Left$(strDir, InStr(strDir, Chr$(0)) - 1)
Else
  strDir = ""
End If


dwFlags tiene 2 valores posibles:
'dwFlags
Public Const SHGFP_TYPE_CURRENT = 0 ' // current value for user,
verify it exists
Public Const SHGFP_TYPE_DEFAULT = 1 ' // default value, may not
exist

nFolder es enumerado, y puede tomar alguno de los siguiente:
' Constantes para el argumento nFolder
' (Usar valores en arcDirectorio para llamar a ARCGetShellFolder)
'
Public Const CSIDL_DESKTOP = &H0 ' //
Public Const CSIDL_INTERNET = &H1 ' // Internet Explorer (icon on desktop)
Public Const CSIDL_PROGRAMS = &H2 ' // Start Menu\Programs
Public Const CSIDL_CONTROLS = &H3 ' // My Computer\Control Panel
Public Const CSIDL_PRINTERS = &H4 ' // My Computer\Printers
Public Const CSIDL_PERSONAL = &H5 ' // My Documents
Public Const CSIDL_FAVORITES = &H6 ' // \Favorites
Public Const CSIDL_STARTUP = &H7 ' // Start Menu\Programs\Startup
Public Const CSIDL_RECENT = &H8 ' // \Recent
Public Const CSIDL_SENDTO = &H9 ' // \SendTo
Public Const CSIDL_BITBUCKET = &HA ' // \Recycle Bin
Public Const CSIDL_STARTMENU = &HB ' // \Start Menu
Public Const CSIDL_DESKTOPDIRECTORY = &H10 ' // name>\Desktop
Public Const CSIDL_DRIVES = &H11 ' // My Computer
Public Const CSIDL_NETWORK = &H12 ' // Network Neighborhood
Public Const CSIDL_NETHOOD = &H13 ' // \nethood
Public Const CSIDL_FONTS = &H14 ' // windows\fonts
Public Const CSIDL_TEMPLATES = &H15
Public Const CSIDL_COMMON_STARTMENU = &H16 ' // All Users\Start Menu
Public Const CSIDL_COMMON_PROGRAMS = &H17 ' // All Users\Programs
Public Const CSIDL_COMMON_STARTUP = &H18 ' // All Users\Startup
Public Const CSIDL_COMMON_DESKTOPDIRECTORY = &H19 ' // All Users\Desktop
Public Const CSIDL_APPDATA = &H1A ' // name>\Application Data
Public Const CSIDL_PRINTHOOD = &H1B ' // name>\PrintHood
Public Const CSIDL_LOCAL_APPDATA = &H1C ' // name>\Local Settings\Applicaiton Data (non roaming)
Public Const CSIDL_ALTSTARTUP = &H1D ' // non localized startup
Public Const CSIDL_COMMON_ALTSTARTUP = &H1E ' // non localized common startup
Public Const CSIDL_COMMON_FAVORITES = &H1F
Public Const CSIDL_INTERNET_CACHE = &H20
Public Const CSIDL_COOKIES = &H21
Public Const CSIDL_HISTORY = &H22
Public Const CSIDL_COMMON_APPDATA = &H23 ' // All Users\Application Data
Public Const CSIDL_WINDOWS = &H24 ' // GetWindowsDirectory()
Public Const CSIDL_SYSTEM = &H25 ' // GetSystemDirectory()
Public Const CSIDL_PROGRAM_FILES = &H26 ' // C:\Program Files
Public Const CSIDL_MYPICTURES = &H27 ' // C:\Program Files\My Pictures
Public Const CSIDL_PROFILE = &H28 ' // USERPROFILE
Public Const CSIDL_SYSTEMX86 = &H29 ' // x86 system directory on RISC
Public Const CSIDL_PROGRAM_FILESX86 = &H2A ' // x86 C:\Program Files on RISC
Public Const CSIDL_PROGRAM_FILES_COMMON = &H2B ' // C:\Program Files\Common
Public Const CSIDL_PROGRAM_FILES_COMMONX86 = &H2C ' // x86 Program Files\Common on RISC
Public Const CSIDL_COMMON_TEMPLATES = &H2D ' // All Users\Templates
Public Const CSIDL_COMMON_DOCUMENTS = &H2E ' // All Users\Documents
Public Const CSIDL_COMMON_ADMINTOOLS = &H2F ' // All Users\Start Menu\Programs\Administrative Tools
Public Const CSIDL_ADMINTOOLS = &H30 ' // \Start Menu\Programs\Administrative Tools

' nFolder (otros. Para sumar)

Public Const CSIDL_FLAG_CREATE = &H8000 ' // combine with CSIDL_ value to force create on SHGetSpecialFolderLocation()
Public Const CSIDL_FLAG_DONT_VERIFY = &H4000 ' // combine with CSIDL_ value to force create on SHGetSpecialFolderLocation()
Public Const CSIDL_FLAG_MASK = &HFF00 ' // mask for all possible flag values


Un ejemplo:

SHGetFolderPath(0&, CSIDL_PERSONAL + CSIDL_FLAG_CREATE, 0&, dwFlags, SHGFP_TYPE_CURRENT)

Podría devolver "C:\Mis documentos" y además, si el directorio todavía no existe, él se encarga de crearlo.

Una nota:

La librería SHFolder.DLL que proporciona esta función solo existe en Windows2000, o en Win95/98/NT4 con Internet Explorer 4.0 o superior.



---------------------------------------------------------------------
 Alberto Rodríguez Calvo (cittarc@usc.es)
 Centro de Innovación e Transferencia de Tecnoloxia (CITT)
 Universidade de Santiago de Compostela
 Páxina Web do CITT: http://www.usc.es/citt

 Avda. Ciencias s/n, Campus Sur Tfno (9)81 599800
 15706 Santiago de Compostela (A Coruña) (9)81 563100 Ext 14380
 España Fax (9)81 599309
---------------------------------------------------------------------



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com