VB-Homepage Tipp 229

Userbezogene Verzeichnis ermitteln

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


Tipp-Download

Quelle : BASICWORLD, VBPLUS, M.SCHIFFER / http://www.basicworld.com

Zurück zur Übersichtsseite