RSS
StartseiteKnowledge LibraryTop 10Impressum

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".

Links zum Thema