Acceder a Mis Documentos con APIs

AsAcOpAcO
16 de Febrero del 2004
Buenas, alguien sabe decirme que debo y como puedo acceder a la carpeta mis documentos a traves de las APIs? es decir, que VB lea la entrada de cual es la ruta predeterminada de la carpeta Mis Documentos del usuario que esta conectado con ese ordenador. No se si me explico bien. De todas formas, gracias por vuestra ayuda.

Marceliano
16 de Febrero del 2004
Te explicas perfectamente.
Esto va muy bien (y vale para otras carpetas especiales según verás en las constantes:

Option Explicit

Const CSIDL_DESKTOP = &H0
Const CSIDL_PROGRAMS = &H2
Const CSIDL_CONTROLS = &H3
Const CSIDL_PRINTERS = &H4
Const CSIDL_PERSONAL = &H5
Const CSIDL_FAVORITES = &H6
Const CSIDL_STARTUP = &H7
Const CSIDL_RECENT = &H8
Const CSIDL_SENDTO = &H9
Const CSIDL_BITBUCKET = &HA
Const CSIDL_STARTMENU = &HB
Const CSIDL_DESKTOPDIRECTORY = &H10
Const CSIDL_DRIVES = &H11
Const CSIDL_NETWORK = &H12
Const CSIDL_NETHOOD = &H13
Const CSIDL_FONTS = &H14
Const CSIDL_TEMPLATES = &H15
Const MAX_PATH = 260
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type

'Con un ejemplo a "Mis Documentos":
Public Function GetMyDocumentsFolder() As String
GetMyDocumentsFolder = GetSpecialfolder(CSIDL_PERSONAL)
End Function

Private Function GetSpecialfolder(CSIDL As Long) As String
Dim r As Long
Dim IDL As ITEMIDLIST
Dim Path As String
'Get the special folder
r = SHGetSpecialFolderLocation(100, CSIDL, IDL)
If r = NoError Then
'Create a buffer
Path = Space(512)
'Get the path from the IDList
r = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal Path)
'Remove the unnecessary chr$(0)'s
GetSpecialfolder = left$(Path, InStr(Path, Chr$(0)) - 1)
Exit Function
End If
GetSpecialfolder = ""
End Function