Eu tenho uma função dessa mas é em VB... pois bem.. postarei aqui talvez algum colega consiga adaptar para o que precisa
'Código que recupera Pastas do Windows, como Strings:
'Ex: C:\Windows\Desktop, C:\Windows\Histórico...
'-------------------
'Código para o Form
'-------------------
Option Explicit
Private Sub Form_Load()
Call AchePastas
End Sub
Private Sub AchePastas()
MsgBox " 0- " & ListaPastas(0) & vbCrLf & _
" 2- " & ListaPastas(2) & vbCrLf & _
" 5- " & ListaPastas(5) & vbCrLf & _
" 6- " & ListaPastas(6) & vbCrLf & _
" 7- " & ListaPastas(7) & vbCrLf & _
" 8- " & ListaPastas(
& vbCrLf & _
" 9- " & ListaPastas(9) & vbCrLf & _
"11- " & ListaPastas(11) & vbCrLf & _
"19- " & ListaPastas(19) & vbCrLf & _
"20- " & ListaPastas(20) & vbCrLf & _
"21- " & ListaPastas(21) & vbCrLf & _
"26- " & ListaPastas(26) & vbCrLf & _
"27- " & ListaPastas(27) & vbCrLf & _
"32- " & ListaPastas(32) & vbCrLf & _
"33- " & ListaPastas(33) & vbCrLf & _
"34- " & ListaPastas(34), , " Pastas do Windows"
Unload Me
End Sub
'------------------------
'Código para o módulo BAS
'------------------------
Option Explicit
'APIs
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ItemDaLista) As Long
'Constantes
Public Type LOCMEIO
CB As Long
ABID As Byte
End Type
Public Type ItemDaLista
MKID As LOCMEIO
End Type
'Função Pública
Public Function ListaPastas(ByVal CSIDL As Long) As String
Dim Zz As Long
Dim StrDoPath As String
Dim IDL As ItemDaLista
Const NOERRO = 0
Const TAM_MAX = 260
On Error GoTo PareFuncao:
Zz = SHGetSpecialFolderLocation(Form1.hWnd, CSIDL, IDL)
'troque o nome do Form1 se ele tiver outro nome
If Zz = NOERRO Then
StrDoPath = Space$(TAM_MAX)
Zz = SHGetPathFromIDList(ByVal IDL.MKID.CB, ByVal StrDoPath)
If Zz Then ListaPastas = Left$(StrDoPath, InStr(StrDoPath, Chr$(0)) - 1)
End If
Exit Function
PareFuncao:
End Function