Montag, 14. Januar 2008

Herausfinden der Pfadnamen von CSLID-Ordnern / Locating the paths of CSLID folders

Windows stellt eine Reihe von allgemein zugänglichen Standardverzeichnissen bereit.

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