Diese über Common System Location IDentifiers (CSLIDs) referenzierten Ordner werden über das Shell.Application - Objekt zum Abruf bereitgestellt. Hierbei steht für jeden Ordner den das jeweilige Windows BS unterstützt ein eigenes Ordnerobjekt zur Verfügung.
Der unten aufgeführte Mustercode beruht auf WinXPSP2 als BasisBS. Ältere oder andere BS-Versionen stellen einige der aufgelisteten Pfade nicht bereit.
Das Shell.Application - Objekt ist Bestandteil der Active Desktop Komponenten. Um auf dieses Objekt unter Win95 und WinNT4 zugreifen zu können muss zwingend der IE4 oder IE4.01 installiert sein. Neuere Versionen der Browsers enthalten die entsprechenden Komponenten nicht mehr.
Da somit nicht alle Ordnerobjekte in den verschiedenen BS zur Verfügung stehen und ebenfalls nicht alle BS-Varianten ein '.Self' Unterobjekt bereitstellen ist es unter Umständen notwendig, die Abfrage der Ordner über eine spezielle Schleife abzufragen (zu sehen im zweiten 'TRY...CATCH'-Block der Funktion 'ShowInfo()'.
#DEFINE NS_DESKTOP 0
#DEFINE NS_PROGRAMS 0x2
#DEFINE NS_CONTROLS 0x3
#DEFINE NS_PRINTERS 0x4
#DEFINE NS_PERSONAL 0x5
#DEFINE NS_FAVORITES 0x6
#DEFINE NS_STARTUP 0x7
#DEFINE NS_RECENT 0x8
#DEFINE NS_SENDTO 0x9
#DEFINE NS_BITBUCKET 0xa
#DEFINE NS_STARTMENU 0xb
#DEFINE NS_DESKTOPDIRECTORY 0x10
#DEFINE NS_DRIVES 0x11
#DEFINE NS_NETWORK 0x12
#DEFINE NS_NETHOOD 0x13
#DEFINE NS_FONTS 0x14
#DEFINE NS_TEMPLATES 0x15
#DEFINE NS_COMMONSTARTMENU 0x16
#DEFINE NS_COMMONPROGRAMS 0x17
#DEFINE NS_COMMONSTARTUP 0x18
#DEFINE NS_COMMONDESKTOPDIR 0x19
#DEFINE NS_APPDATA 0x1a
#DEFINE NS_PRINTHOOD 0x1b
#DEFINE NS_LOCALAPPDATA 0x1c
#DEFINE NS_ALTSTARTUP 0x1d
#DEFINE NS_COMMONALTSTARTUP 0x1e
#DEFINE NS_COMMONFAVORITES 0x1f
#DEFINE NS_INTERNETCACHE 0x20
#DEFINE NS_COOKIES 0x21
#DEFINE NS_HISTORY 0x22
#DEFINE NS_COMMONAPPDATA 0x23
#DEFINE NS_WINDOWS 0x24
#DEFINE NS_SYSTEM 0x25
#DEFINE NS_PROGRAMFILES 0x26
#DEFINE NS_MYPICTURES 0x27
#DEFINE NS_PROFILE 0x28
CLEAR
PUBLIC oShell as Object
LOCAL lcScreenFont as String
lcScreenFont = _screen.FontName
_screen.FontName = [Courier New]
oShell = CREATEOBJECT([Shell.Application])
IF VARTYPE(oShell) = [O]
ShowInfo(NS_DESKTOP) && Desktop
ShowInfo(NS_PROGRAMS) && Programme
ShowInfo(NS_CONTROLS) && Systemsteuerung (Registrykey)
ShowInfo(NS_PRINTERS) && Drucker und Faxgeräte (Registrykey)
ShowInfo(NS_PERSONAL) && Eigene Dateien
ShowInfo(NS_FAVORITES) && Favoriten
ShowInfo(NS_STARTUP) && Autostart
ShowInfo(NS_RECENT) && Zuletzt verwendete Dateien
ShowInfo(NS_SENDTO) && Senden an
ShowInfo(NS_BITBUCKET) && Papierkorb (Registry)
ShowInfo(NS_STARTMENU) && Startmenü
ShowInfo(NS_DESKTOPDIRECTORY) && Desktop
ShowInfo(NS_DRIVES) && Arbeitsplatz (Registrykey)
ShowInfo(NS_NETWORK) && Netzwerkumgebung (Registrykey)
ShowInfo(NS_FONTS) && Schriftarten
ShowInfo(NS_TEMPLATES) && Vorlagen
ShowInfo(NS_COMMONSTARTMENU) && Startmenü 'All Users'
ShowInfo(NS_COMMONPROGRAMS) && Programme 'All Users'
ShowInfo(NS_COMMONSTARTUP) && Autostart 'All Users'
ShowInfo(NS_COMMONDESKTOPDIR) && Desktop ' All Users'
ShowInfo(NS_APPDATA) && Anwendungsdaten
ShowInfo(NS_PRINTHOOD) && Druckumgebung
ShowInfo(NS_LOCALAPPDATA) && Lokale Einstellungen / Anwendungsdaten
ShowInfo(NS_ALTSTARTUP) && ?????
ShowInfo(NS_COMMONALTSTARTUP) && ?????
ShowInfo(NS_COMMONFAVORITES) && Favoriten 'All Users'
ShowInfo(NS_INTERNETCACHE) && Temporäre Internetdateien
ShowInfo(NS_COOKIES) && Cookies
ShowInfo(NS_HISTORY) && Verlauf
ShowInfo(NS_COMMONAPPDATA) && Anwendungsdaten 'All Users'
ShowInfo(NS_WINDOWS) && Windows
ShowInfo(NS_SYSTEM) && System32
ShowInfo(NS_PROGRAMFILES) && Programme
ShowInfo(NS_MYPICTURES) && Eigene Bilder
ShowInfo(NS_PROFILE) && Profile
ENDIF
_screen.FontName = lcScreenFont
oShell = [ ]
oFolder = [ ]
RELEASE lcScreenFont, oShell, oFolder
FUNCTION ShowInfo
LPARAMETERS vNameSpaceID
LOCAL loFolder as Object
loFolder = oShell.NameSpace(m.vNameSpaceID)
IF VARTYPE(loFolder) = [O]
* Unter XP-SP2 stehen fast alle Ordner zur Verfügung
TRY
? PADR(loFolder.Self.Name,30,[ ]), loFolder.Self.Path
CATCH
* Info ausgeben, Zugriff auf NameSpace fehlgeschlagen ist
? ['->] + PADR(TRANSFORM(m.vNameSpaceID,[@0]),27,[ ]), [nicht verfügbar]
ENDTRY
* Unter älteren WinBS oder nur basierend auf dieser 2. Routine
* stehen diverse Ordner nicht zur Verfügung
lcPath = NULL
TRY
FOR EACH item IN loFolder.ParentFolder.Items
IF item.name == loFolder.Title
? PADR(['-> ] + item.name,30,[ ]), Item.Path
EXIT
ENDIF
ENDFOR
CATCH
* Info ausgeben, Zugriff auf NameSpace fehlgeschlagen ist
? PADR(['-> ] + TRANSFORM(m.vNameSpaceID,[@0]),30,[ ]), [nicht verfügbar]
ENDTRY
ENDIF
loFolder = [ ]
RELEASE loFolder
ENDFUNC
Keine Kommentare:
Kommentar veröffentlichen