Mit dem 32Bit Windows kam, neben vielem anderen, auch
die Möglichkeit, daß selbst auf Einzelplatz PCs mehrere User sich mit unterschiedlichen
Anmeldungen einloggen konnten.
Das bringt allerdings auch mit sich, daß zur Verwaltung der userabhängigen Daten auch
unterschiedliche Verzeichnisse existieren.
Was also, wenn Sie für einen speziellen User etwas einrichten wollen, oder wenn Sie Daten
aus Ihrem Programm genau in sein Verzeichnis kopieren möchten.
Ich sag's Ihnen, nehmen Sie sich diesen Tipp an und es wird zumindestens ein paar Schritte
leichter.
Sie erhalten hier die userabhängigen Verzeichnisse für
Desktop-; Favoriten-; Autostart-; Papierkorb-; Netzwerkumgebung- und Startmenüordner.
Desweiteren noch den Ordner der Fontdateien und bei Office 97 auch den Standardordner für
die Dokumente und einiges mehr noch.
1. Grundvoraussetzung sind einige Deklarationen unter
Allgemein/Deklarationen
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
Const NOERROR = 0
Const CSIDL_FONTS = &H14
Const CSIDL_DESKTOP = &H0
Const CSIDL_PROGRAMS = &H1
Const CSIDL_CONTROLS = &H2
Const CSIDL_PRINTERS = &H3
Const CSIDL_PERSONAL = &H4
Const CSIDL_FAVORITES = &H5
Const CSIDL_STARTUP = &H6
Const CSIDL_RECENT = &H7
Const CSIDL_SENDTO = &H8
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_TEMPLATES = &H15
2. Um nun einen bestimmten Ordner zu ermitteln, benötigen Sie folgenden
Aufruf.
Dim ItemList As ITEMIDLIST
Dim Pfad As String
If SHGetSpecialFolderLocation(Form1.hWnd, CSIDL_FONTS, ItemList) = NOERROR Then
Pfad = Space$(255)
If SHGetPathFromIDList(ItemList.mkid.cb, Pfad) <> 0 Then
Pfad = Left$(Pfad, InStr(Pfad, vbNullChar) - 1)
Else
Pfad = ""
End If
'Definieren Sie hier die Ausgabe des ermittelten Ordners
List1.AddItem "Schriftarten-Ordner: " & IIf(Pfad =
"", "Nicht gefunden", Pfad)
End If
Um einen anderen Ordner, als den als Beispiel oben abgebildeten, zu ermitteln, müssen Sie
lediglich die Konstante austauschen. Also statt
CSIDL_FONTS 'für den Schriftartenordner
CSIDL_RECENT 'für den Papierkorbordner u.s.w.
Wenn Ihnen das Auslesen der Registry mehr liegt, können Sie diese Daten auch direkt
auslesen. Diese Angaben finden Sie bei W95 unter
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders |