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