Einzelnen Beitrag anzeigen

Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#1

Pfad der "Special Folders" ermitteln

  Alt 24. Nov 2007, 14:54
Moin,

d3g beschreibt in Pfad der "Special Folders" ermitteln, wie man über "CSIDL-Konstanten" zu den dazugehörigen Pfadangaben gelangt (z.B. Pfad des Programme-Ordners herausfinden):

Delphi-Quellcode:
uses ActiveX, ShellApi, ShlObj;

...

function GetSpecialFolder(hWindow: HWND; Folder: Integer): String; // z.B. Folder: CSIDL_PROGRAM_FILES = $26 = 38
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;

  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;
Warum wird dazu so gut wie immer SHGetSpecialFolderLocation benutzt?
Wozu gibt es denn SHGetSpecialFolderPath?
Damit wickelt man die Funktion doch in einem Zweizeiler ab:

Delphi-Quellcode:
uses ShlObj;

...

function GetSpecialFolder(Folder: Integer): PChar;
begin
  Result:=StrAlloc(MAX_PATH);
  SHGetSpecialFolderPath(0, Result, Folder, false);
end;
MfG,
HannosG
Hanno Günther
  Mit Zitat antworten Zitat