SpecialFolder herausfinden

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

    Code
    [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
    [B][COLOR=#0000af]procedure[/COLOR][/B] TForm1.Button1Click(Sender: TObject); 
    [COLOR=#0000af][B]begin[/B][/COLOR] 
      ShowMessage(GetSpecialFolder(Handle, CSIDL_RECENT)); 
    [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;