7.8 Wie ermittel ich den Pfad eines besonderen Ordners (z.B. "Eigene Dateien")?
VB4-VB6
Von: Thorsten Dörfler
Windows stellt einige "besonderen Ordner" bereit. Dies sind Ordner, wie "Eigene Dateien", "Startmenü" oder "Anwendungsdaten". Da diese Ordner auf jedem System woanders liegen können, muss man die Pfade zu diesen Ordnern jeweils zur Laufzeit ermitteln. Windows hält für diese Aufgabe, die API Funktion SHGetSpecialFolderLocation bereit:
Private Type SHITEMID cb As Long abID As Byte End Type Private Type ITEMIDLIST mkid As SHITEMID End Type Private Declare Function SHGetSpecialFolderLocation Lib "Shell32" _ (ByVal hwndOwner As Long, ByVal nFolder As Long, _ ByRef ppidl As ITEMIDLIST) As Long Private Declare Function SHGetPathFromIDList Lib "Shell32" _ (ByVal pidList As Long, ByVal lpBuffer As String) As Long Private Const S_OK = 0 Private Const MAX_PATH = 260 Public Enum ShellSpecialFolderConstants ssfDESKTOP = &H0 ' <Desktop> ssfPROGRAMS = &H2 ' Startmenü\Programme ssfPERSONAL = &H5 ' Eigene Dateien ssfFAVORITES = &H6 ' <Benutzer>\Favoriten ssfSTARTUP = &H7 ' Startmenü\Programme\Autostart ssfRECENT = &H8 ' <Benutzer>\Recent ssfSENDTO = &H9 ' <Benutzer>\SendTo ssfSTARTMENU = &HB ' <Benutzer>\Startmenü ssfDESKTOPDIRECTORY = &H10 ' <Benutzer>\Desktop ssfNETHOOD = &H13 ' <Benutzer>\Netzwerkumgebung ssfFONTS = &H14 ' Windows\Fonts ssfTEMPLATES = &H15 ' <Benutzer>\Vorlagen ssfCOMMONSTARTMENU = &H16 ' All Users\Startmenü ssfCOMMONPROGRAMS = &H17 ' All Users\Startmenü\Programme ssfCOMMONSTARTUP = &H18 ' All Users\Startmenü\Autostart ssfCOMMONDESKTOPDIRECTORY = &H19 ' All Users\Desktop ssfAPPDATA = &H1A ' <Benutzer>\Anwendungsdaten ssfPRINTHOOD = &H1B ' <Benutzer>\Druckumgebung ssfCOOKIES = &H21 ' <Benutzer>\Cookies ssfHISTORY = &H22 ' <Benutzer>\Lokale Einstell.\Verlauf ssfCOMMONTEMPLATES = &H2D ' All Users\Vorlagen ssfCOMMONDOCUMENTS = &H2E ' All Users\Dokumente End Enum Public Function GetSpecialFolder(ByVal Folder As ShellSpecialFolderConstants) As String Dim tIIDL As ITEMIDLIST Dim strPath As String If SHGetSpecialFolderLocation(0, Folder, tIIDL) = S_OK Then strPath = Space$(MAX_PATH) If SHGetPathFromIDList(tIIDL.mkid.cb, strPath) <> 0 Then GetSpecialFolder = Left$(strPath, InStr(1, strPath, vbNullChar) - 1) End If End If End Function
Einen besonderen Ordner, in diesem Beispiel "Eigene Dateien", können Sie dann wie folgt ermitteln:
Dim strPath As String strPath = GetSpecialFolder(ssfPERSONAL)
Mit Windows 2000 wurden weitere besondere Ordner hinzugefügt, die teilweise durch die weitervertreibbare shfolder.dll auch für ältere Plattformen zur Verfügung stehen. Eine erweiterte Funktion, die bei Bedarf auf diese DLL zurückgreift, finden Sie unter "Links zum Thema".