我只能得到98下的收藏夹路径,2K和XP的都不能得到,请高人指点一下,如何才能通用得到任意操作系统下的收藏夹路径。我的代码如下:function GetFavoritesPath : String;
var
   reg : TRegistry;
begin
     Result := '';
     reg := TRegistry.Create;
     try
        with reg do
        begin
             RootKey:=HKEY_CURRENT_USER;
             if OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders',false)=true then
                Result:=ReadString('Favorites')+'\';
             CloseKey;
        end;
     finally
            reg.Free;
     end;
end;

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Registry, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    Reg: TRegistry;
    deskpath:string;
    begin
    Reg := TRegistry.Create;
    try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false) then 
    deskpath:=Reg.readString('Favorites');
    showmessage(deskpath);
    finally
    Reg.CloseKey; 
    Reg.Free;
    inherited;
    end;
    end;end.XP SP2+ D7调试通过
      

  2.   

    用这个API:GetSystemDirectory 获得系统盘符
        在加上‘\Documents and Settings\Administrator.MYHOME-HHBEE3K2\Favorites’
        注意用户名的不同
    另外用控件ShellTreeView1
        双击该控件选定 Use Standard &Folder=rfFavorites
        该控件的Path=收藏夹路径
      

  3.   

    dxxb(天下无雪) 的方法和楼主的思路是一样的
    主要就是XP和98下,收藏夹在注册表中的地址不一样
      

  4.   

    直接读注册表可以实现也可以这样
    你看看
    //取特殊文件夹目录
    //----------------------------------------------------------------
    unit ShlObjfunction GetSpecialFolderDir(const folderid: integer): string;
    var
      pidl              : pItemIDList;
      buffer            : array[0..255] of char;
    begin
      SHGetSpecialFolderLocation(Application.Handle, folderid, pidl);
      SHGetPathFromIDList(pidl, buffer);    //转换成文件系统的路径
      result := strpas(buffer);
    end;
    //取收藏夹目录
    //----------------------------------------------------------------function GetFavPath: string;
    begin
      result := GetSpecialFolderDir(CSIDL_FAVORITES);
    end;
      

  5.   

    不清楚
    看看这里
    http://search.csdn.net/Expert/topic/677/677348.xml?temp=.4862635