Hay otra manera de conocer las carpetas de windows sabiendo su respectiva constante :
CSIDL_DESKTOP for WINDOWS\Desktop
CSIDL_DESKTOPDIRECTORY for WINDOWS\Desktop
CSIDL_FONTS for WINDOWS\FONTS
etc...
etc...
Que al fin y al cabo son del tipo Integer, sabiendo esto, el paso a seguir obvio era hacer un loop cambiendo este entero sin importar como lo llamaron desde mocosoft...
Lo único que necesitamos es un Form con un TMemo y el siguiente código...
Código Delphi
[-]
uses shlobj, ActiveX;
function GetSystemPath(Folder: Integer): string;
var
PIDL: PItemIDList;
Path: LPSTR;
AMalloc: IMalloc;
begin
Path := StrAlloc(MAX_PATH);
SHGetSpecialFolderLocation(Application.Handle, Folder, PIDL);
if SHGetPathFromIDList(PIDL, Path) then
Result := Path
else
Result := '';
SHGetMalloc(AMalloc);
AMalloc.Free(PIDL);
StrDispose(Path);
end;
procedure TForm1.FormCreate(Sender: TObject);
var a : Integer;
begin
Memo1.Clear;
for a := 0 to 59 do
Memo1.Lines.Add(IntToStr (a) + #9 + GetSystemPath(a))
end;
y listo... descartamos los valores repetidos y le ponemos el nombre que queremos a las constantes que nos interesan...
espero que esto les sea de utilidad, si se puede comenten...