rt

解决方案 »

  1.   

    uses shlobj;//取得系统特殊文件夹
    function GetSpecialFolderDir:string;
    const
       dirName : Array[0..33] of String=
          ('桌面          ','INTERNET        ','程序组       ','控制面板     ',
           '打印机        ','我的文档        ','收藏夹       ','启动组       ',
           '最近文档      ','发送到          ','回收站       ','开始菜单     ',
           '','','','',
           '桌面目录      ','我的电脑        ','网络         ','网上邻居目录 ',
           '字体          ','模板            ','*开始菜单    ','*程序组      ',
           '*启动组       ','*桌面目录       ','应用程序数据 ','PRINTHOOD    ',
           'ALTSTARTUP    ','C_ALTSTARTUP    ','C_FAVORITES  ','Internet缓冲目录 ',
           'COOKIES       ','历史记录        ');
    var
        pidl:pItemIDList;
        buffer:array [ 0..255 ] of char ;
        i: Integer;
        tmp: String;
    begin
      Result:='特殊文件夹路径:'+chr(13)+chr(10);
      for i:=0 to 29 do
       begin
        SHGetSpecialFolderLocation(Application.Handle , i, pidl);
        SHGetPathFromIDList(pidl, buffer);    //转换成文件系统的路径
        tmp:=StrPas(buffer);
        if <>'' then
         Result:=Result+ DirName[i]+ tmp + Chr(13)+chr(10);
      end;
    end;其实 i 的值可以是以下常量,在shlobj中有定义,根据它的名称可知道代表什么:
    CSIDL_BITBUCKET
    CSIDL_CONTROLS
    CSIDL_DESKTOP
    CSIDL_DESKTOPDIRECTORY
    CSIDL_DRIVES
    CSIDL_FONTS
    CSIDL_NETHOOD
    CSIDL_NETWORK
    CSIDL_PERSONAL
    CSIDL_PRINTERS
    CSIDL_PROGRAMS
    CSIDL_RECENT
    CSIDL_SENDTO
    CSIDL_STARTMENU
    CSIDL_STARTUP
    CSIDL_TEMPLATES
    ....