uses
{ ... },
ActiveX,
// IMalloc
ShellAPI,
// SHGetSpecialFolderLocation() und SHGetPathFromIDList()
ShlObj;
// CSIDL_-Konstanten
//fehlende CSIDL_-Konstanten kann man nach folgendem Muster definieren:
const CSIDL_COMMON_APPDATA = $0023;
CSIDL_MYMUSIC = $0013;
CSIDL_MYPICTURES = $0014;
//FONTS
CSIDL_LOCAL = $0022;
CSIDL_SYSTEM = $0025;
CSIDL_WINDOWS = $0024;
CSIDL_PROGRAM_FILES = $0026;
CSIDL_LOCAL_APPDATA = $001C;
function GetSpecialFolder(hWindow: HWND; Folder: Integer):
String;
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;
function GetSpecialFolder2(FolderID : longint) :
string;
var
Path : pchar;
idList : PItemIDList;
begin
GetMem(Path, MAX_PATH);
SHGetSpecialFolderLocation(0, FolderID, idList);
SHGetPathFromIDList(idList, Path);
Result :=
string(Path);
FreeMem(Path);
end;
function GetDrives:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_Drives));
end;
function GetMyMusic:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(13));
end;
function GetTmpInternetDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_INTERNET_CACHE));
end;
function GetCookiesDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_COOKIES));
end;
function GetHistoryDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_HISTORY));
end;
function GetDesktop:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_DESKTOP));
end;
function GetDesktopDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_DESKTOPDIRECTORY));
end;
function GetProgDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_PROGRAMS));
end;
function GetMyDocDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_PERSONAL));
end;
function GetFavDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_FAVORITES));
end;
function GetStartUpDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_STARTUP));
end;
function GetRecentDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_RECENT));
end;
function GetSendToDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_SENDTO));
end;
function GetStartMenuDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_STARTMENU));
end;
function GetNetHoodDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_NETHOOD));
end;
function GetFontsDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_FONTS));
end;
function GetTemplateDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_TEMPLATES));
end;
function GetAppDataDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_APPDATA));
end;
function GetPrintHoodDir:
string;
begin
Result := IncludeTrailingBackslash(GetSpecialFolder2(CSIDL_PRINTHOOD));
end;
//damit kriegt man angezeigt, was auf dem eigenen PC möglich ist
//for i := 0 to 64 do Memo1.Lines.add(IntToStr(i)+' : '+ GetSpecialFolder(Form1.Handle,i));