Nach wie vor sieht man Anwendungen, die unbesehen von
festgelegten Pfaden für eine ganze Reihe von Standard-Ordnern
ausgehen. Die Pfade von Ordnern wie "Desktop",
"Programme", "Startmenü", "Favoriten"
und anderen können jedoch sowohl vom jeweils aktiven User abhängig
sein, als auch bewusst vom Anwender oder Administrator geändert
worden sein. Zudem sind die konkreten Namen der meisten dieser
Ordner auch noch von der jeweiligen Sprachversion des Systems
abhängig.
Um dieser Falle und daraus resultierenden Problemen zu entgehen,
können Sie die Pfade dieser Ordner mittels zweier API-Funktionen SHGetSpecialFolderLocation
und SHGetPathFromIDList
ermitteln. Der Aufruf von SHGetSpecialFolderLocation reicht leider
nicht alleine aus, da diese Funktion nur indirekt eine spezielle
Kennung (IDList) liefert, zu der die Funktion SHGetPathFromIDList
den tatsächlichen Pfad in String-Form ermittelt.
Die Hilfsfunktion GetSpecialFolderPath kapselt diese Aufrufe. Sie
brauchen ihr lediglich die Konstante für den gewünschten Ordner
übergeben. Konnte der gewünschte Ordner nicht ermittelt werden,
wird ein leerer String zurückgegeben.
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.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, _
pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _
ByVal pszPath As String) As Long
Public Enum spfSpecialFolderConstants
spfDesktop = &H0
spfPrograms = &H2
spfPersonal = &H5
spfFavorites = &H6
spfStartup = &H7
spfRecent = &H8
spfSendto = &H9
spfStartmenu = &HB
spfDesktopDirectory = &H10
spfNethood = &H13
spfFonts = &H14
spfTemplates = &H15
spfCommonStartmenu = &H16
spfCommonPrograms = &H17
spfCommonStartup = &H18
spfCommonDesktopDirectory = &H19
spfAppdata = &H1A
spfPrinthood = &H1B
spfCommonFavorites = &H1F
spfInternetCache = &H20
spfCookies = &H21
spfHistory = &H22
End Enum
Public Function GetSpecialFolderPath _
(ByVal FolderID As spfSpecialFolderConstants) As String
Dim nItemList As ITEMIDLIST
Dim nPath As String
Const NOERROR = 0
If SHGetSpecialFolderLocation(0, FolderID, nItemList) = NOERROR Then
nPath = Space$(260)
If SHGetPathFromIDList(nItemList.mkid.cb, nPath) <> 0 Then
GetSpecialFolderPath = Left$(nPath, InStr(nPath, vbNullChar) - 1)
End If
End If
End Function
 |
GetSpecialFolderPath
liefert Ihnen die Pfade zu den verschiedenen Standard-Ordnern
|

|