Standardverzeichnisse
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
Private Const CSIDL_BITBUCKET = &HA
Private Const CSIDL_COMMON_ADMINTOOLS = &H2F
Private Const CSIDL_COMMON_ALTSTARTUP = &H1E
Private Const CSIDL_COMMON_APPDATA = &H23
Private Const CSIDL_COMMON_DESKTOPDIRECTORY = &H19
Private Const CSIDL_COMMON_DOCUMENTS = &H2E
Private Const CSIDL_COMMON_FAVORITES = &H1F
Private Const CSIDL_COMMON_MUSIC = &0035
Private Const CSIDL_COMMON_PICTURES = &0036
Private Const CSIDL_COMMON_PROGRAMS = &0017
Private Const CSIDL_COMMON_STARTMENU = &H16
Private Const CSIDL_COMMON_STARTUP = &H18
Private Const CSIDL_COMMON_TEMPLATES = &H2D
Private Const CSIDL_COMMON_VIDEO = &0037
Private Const CSIDL_CONTROLS = &H3
Private Const CSIDL_COOKIES = &H21
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
Private Const CSIDL_INTERNET = &H1
Private Const CSIDL_INTERNET_CACHE = &H20
Private Const CSIDL_LOCAL_APPDATA = &H1C
Private Const CSIDL_MYPICTURES = &H27
Private Const CSIDL_MYMUSIC = &HD
Private Const CSIDL_MYVIDEO = &HE
Private Const CSIDL_NETHOOD = &H13
Private Const CSIDL_NETWORK = &H12
Private Const CSIDL_PERSONAL = &H5
Private Const CSIDL_PRINTERS = &H4
Private Const CSIDL_PRINTHOOD = &H1B
Private Const CSIDL_PROFILE = &H28
Private Const CSIDL_PROGRAM_FILES = &H26
Private Const CSIDL_PROGRAM_FILES_COMMON = &H2B
Private Const CSIDL_PROGRAM_FILES_COMMONX86 = &H2C
Private Const CSIDL_PROGRAM_FILESX86 = &H2A
Private Const CSIDL_PROGRAMS = &H2
Private Const CSIDL_RECENT = &H8
Private Const CSIDL_RESOURCES = &H38
Private Const CSIDL_RESOURCES_LOCALIZED = &H38
Private Const CSIDL_SENDTO = &H9
Private Const CSIDL_STARTMENU = &HB
Private Const CSIDL_STARTUP = &H7
Private Const CSIDL_SYSTEM = &H25
Private Const CSIDL_SYSTEMX86 = &H29
Private Const CSIDL_TEMPLATES = &H15
Private Const CSIDL_WINDOWS = &H24
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
tmp = Space(512)
SHGetSpecialFolderLocation Me.hwnd, CSIDL_RECENT, iil
SHGetPathFromIDList iil.mkid.cb, tmp
CoTaskMemFree iil.mkid.cb
tmp = Left(tmp, InStr(1, tmp, vbNullChar) - 1)
MsgBox tmp