SpecialFolder herausfinden

  • Der "SpecialFolder" ist unter Vista der Ordner bei dem man keine
    User-Rechte benötigt.

    Code
    1. [B][COLOR=#0000af]function[/COLOR][/B] GetSpecialFolder(hWindow: HWND; Folder: Integer): [COLOR=#0000af][B]String[/B][/COLOR]; [COLOR=#0000af][B]var[/B][/COLOR] pMalloc: IMalloc; pidl: PItemIDList; Path: PChar; [COLOR=#0000af][B]begin[/B][/COLOR] [COLOR=#008000]// get IMalloc interface pointer[/COLOR] [COLOR=#0000af][B]if[/B][/COLOR] (SHGetMalloc(pMalloc) <> S_OK) [COLOR=#0000af][B]then[/B][/COLOR] [COLOR=#0000af][B]begin[/B][/COLOR] MessageBox(hWindow, '[COLOR=#000080]Couldn[/COLOR]''[COLOR=#000080]t get pointer to IMalloc interface.[/COLOR]', '[COLOR=#000080]SHGetMalloc(pMalloc)[/COLOR]', 16); Exit; [COLOR=#0000af][B]end[/B][/COLOR];   [COLOR=#008000]// retrieve path[/COLOR] SHGetSpecialFolderLocation(hWindow, Folder, pidl); GetMem(Path, MAX_PATH); SHGetPathFromIDList(pidl, Path); Result :[COLOR=#0000af]=[/COLOR] Path; FreeMem(Path);   [COLOR=#008000]// free memory allocated by SHGetSpecialFolderLocation[/COLOR] pMalloc.Free(pidl); [COLOR=#0000af][B]end[/B][/COLOR];



    Nun der Code um den Pfad des Ordners in einer Box anzuzeigen.

    Code
    1. [B][COLOR=#0000af]procedure[/COLOR][/B] TForm1.Button1Click(Sender: TObject);
    2. [COLOR=#0000af][B]begin[/B][/COLOR]
    3. ShowMessage(GetSpecialFolder(Handle, CSIDL_RECENT));
    4. [COLOR=#0000af][B]end[/B][/COLOR];
  • Uff das ist aber der Recent Files = Verlauf Ordner. Für den zweiten Parameter sind weitere Werte möglich, die sich in der Windows.pas finden müssen.


    Paar wichtige sind z.b.:


    CSIDL_SYSTEM, CSIDL_WINDOWS, CSIDL_APPDATA, CSIDL_COMMON_APPDATA, CSIDL_DESKTOP, CSIDL_AUTORUN, CSIDL_PROGRAMS


    Durch die ShGetSpecialFolderLocation API kann man eigentlich alle wichtigen System und User Pfade ermitteln.

  • Guten Abend,
    meiner Meinung nach ist CSIDL_APPDATA der wichtigste, wenn man Dateien über etwas längere Zeit speichern will, wie z.B. Einstellungen von Programmen.

    MfG Breeze
    &quot;...Fortschritt ist der Austausch von Wissen...&quot;