Standardverzeichnisse
 Info  
Von : Wolfgang Kluge
 Zusatz  
Printfreundliche Ansicht
Ein großes Vorwort bedarf es hierbei wohl nicht.. Standardverzeichnisse sind unter Windows ja anpassbar und daher zu ermitteln, bevor man was da reinschreiben will.
Viele Programme (bzw. die Programmierer dazu) tun dies nicht, und es entstehen Verzeichnisse wie "C:\Programs\xxx" auf einem deutschsprachigem oder eben "C:\Programme\xxx" auf einem englischsprachigem System(usw)..

Das ist natürlich nicht gut und muß auch nicht sein.

 Deklaration:
Private Type SHITEMID
  cb As Long
  abID As Byte
End Type

Private Type ITEMIDLIST
  mkid As SHITEMID
End Type

Private Declare Sub SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwnd As Long, ByVal csidl As Long, ByRef ppidl As ITEMIDLIST)
Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Function CoTaskMemFree Lib "ole32.dll" (ByRef hMem As Long) As Long
Private Const CSIDL_ADMINTOOLS = &H30
Private Const CSIDL_ALTSTARTUP = &H1D
Private Const CSIDL_APPDATA = &H1A ' Anwendungsdaten
Private Const CSIDL_BITBUCKET = &HA
Private Const CSIDL_COMMON_ADMINTOOLS = &H2F ' Verwaltung
Private Const CSIDL_COMMON_ALTSTARTUP = &H1E
Private Const CSIDL_COMMON_APPDATA = &H23 ' All Users\Anwendungsdaten
Private Const CSIDL_COMMON_DESKTOPDIRECTORY = &H19 ' All Users\Desktop
Private Const CSIDL_COMMON_DOCUMENTS = &H2E ' All Users\Dokumente
Private Const CSIDL_COMMON_FAVORITES = &H1F ' All Users\Favoriten
Private Const CSIDL_COMMON_MUSIC = &0035 ' All Users\Meine Musik
Private Const CSIDL_COMMON_PICTURES = &0036 ' All Users\Meine Bilder
Private Const CSIDL_COMMON_PROGRAMS = &0017
Private Const CSIDL_COMMON_STARTMENU = &H16 ' All Users\Startmenü
Private Const CSIDL_COMMON_STARTUP = &H18 ' All Users\Autostart
Private Const CSIDL_COMMON_TEMPLATES = &H2D ' All Users\Vorlagen
Private Const CSIDL_COMMON_VIDEO = &0037 ' All Users\Meine Videos
Private Const CSIDL_CONTROLS = &H3
Private Const CSIDL_COOKIES = &H21 ' Cookies
Private Const CSIDL_DESKTOP = &H0
Private Const CSIDL_DESKTOPDIRECTORY = &H10
Private Const CSIDL_DRIVES= &H11
Private Const CSIDL_FAVORITES = &H6
Private Const CSIDL_FONTS = &H14
Private Const CSIDL_HISTORY = &H22 ' Verlauf
Private Const CSIDL_INTERNET = &H1
Private Const CSIDL_INTERNET_CACHE = &H20 ' Temporäre Internetdateien
Private Const CSIDL_LOCAL_APPDATA = &H1C ' Anwendungsdaten
Private Const CSIDL_MYPICTURES = &H27 ' Eigene Bilder
Private Const CSIDL_MYMUSIC = &HD ' Eigene Musik
Private Const CSIDL_MYVIDEO = &HE ' Eigene Videos
Private Const CSIDL_NETHOOD = &H13 ' Netzwerkumgebung
Private Const CSIDL_NETWORK = &H12
Private Const CSIDL_PERSONAL = &H5 ' Eigene Dateien
Private Const CSIDL_PRINTERS = &H4
Private Const CSIDL_PRINTHOOD = &H1B ' Druckumgebung
Private Const CSIDL_PROFILE = &H28 ' Dokumente und Einstellungen\Username
Private Const CSIDL_PROGRAM_FILES = &H26 ' Programme
Private Const CSIDL_PROGRAM_FILES_COMMON = &H2B ' Gemeinsame Dateien
Private Const CSIDL_PROGRAM_FILES_COMMONX86 = &H2C
Private Const CSIDL_PROGRAM_FILESX86 = &H2A
Private Const CSIDL_PROGRAMS = &H2 ' Startmenü\Programme
Private Const CSIDL_RECENT = &H8
Private Const CSIDL_RESOURCES = &H38 ' %windir%\Resources\, For theme and other windows resources
Private Const CSIDL_RESOURCES_LOCALIZED = &H38 ' %windir%\Resources\<LangID>
Private Const CSIDL_SENDTO = &H9
Private Const CSIDL_STARTMENU = &HB
Private Const CSIDL_STARTUP = &H7 ' Autostart
Private Const CSIDL_SYSTEM = &H25 ' System oder System32
Private Const CSIDL_SYSTEMX86 = &H29
Private Const CSIDL_TEMPLATES = &H15 ' Vorlagen
Private Const CSIDL_WINDOWS = &H24 ' WinNT oder Windows


Nach der Deklaration kann man nun die Konstante für "sein" Verzeichnis auswählen und Einsetzen.,. In etwa so:
Dim tmp As String, iil As ITEMIDLIST
' initialisieren der Variable!!
tmp = Space(512)

' recent-Verzeichnis ausgeben
SHGetSpecialFolderLocation Me.hwnd, CSIDL_RECENT, iil
SHGetPathFromIDList iil.mkid.cb, tmp

CoTaskMemFree iil.mkid.cb

tmp = Left(tmp, InStr(1, tmp, vbNullChar) - 1)
' ausgabe des Verzeichnisses
MsgBox tmp