Como acessar o Desktop Directory do usuário atual ou outros diretórios
A função é muito simples, mas é difícil encontrar os parâmetros corretos:
uses ShlObj;
function GetDesktopDirectory: string;
var
PIDL: PItemIDList;
InFolder: array[0..MAX_PATH] of Char;
begin
SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL);
SHGetPathFromIDList(PIDL, InFolder);
Result := InFolder;
end;
Alterando o parâmetro, você pode acessar outras Special Folders, como:
CSIDL_FAVORITES - Explorer Favorites
CSIDL_PROGRAMS - Program Files
CSIDL_APPDATA - Application Data
CSIDL_INTERNET_CACHE
CSIDL_COOKIES
CSIDL_HISTORY
Diretórios comuns – Diretório base em um sistema de vários perfis (Multi Profile)
CSIDL_COMMON_STARTMENU -
CSIDL_COMMON_PROGRAMS
CSIDL_COMMON_STARTUP
CSIDL_COMMON_DESKTOPDIRECTORY
CSIDL_COMMON_FAVORITES