首页  编辑  

如何取得某些特殊文件夹路径

Tags: /超级猛料/Stream.File.流、文件和目录/目录/   Date Created:

如何取得某些特殊文件夹路径

在Windows 下有很多的特殊含义的文件夹,如桌面,网上邻居,字体,我的文档,

程序组,最近文档,发送到,开始菜单,启动等,有时可能需要取得这些文件夹

的真正路径。

一种方法是通过读注册表文件,存放在HKEY_CURRENT_USER根下,目录为:

Software\MicroSoft\Windows\CurrentVersion\Explorer

可看到在shell folder段中存放着上述文件夹所对应的实际物理目录,至于如何

读注册表的操作不再给出,请自行解决。

另一种方法是调用shell函数可以得到相应的目录,但是不是所有在shell folder

目录下的文件夹都可以获得,请注意。

function 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;

其中:folderid可以取下面的值:但是请注意,有些是虚的文件夹,不是文件系统

的一部分,所以用SHGetPathFromIDList是取不出路径的,但是在此也列出了。打'*'

号的为不是真正的文件系统,应该用作它用。

   CSIDL_BITBUCKET         *   回收站

   CSIDL_CONTROLS          *   控制面板

   CSIDL_DESKTOP           *   桌面

   CSIDL_DESKTOPDIRECTORY      桌面目录       //如C:\WINDOWS\Desktop

   CSIDL_DRIVES            *   我的电脑

   CSIDL_FONTS                 字体           //如C:\WINDOWS\FONTS

   CSIDL_NETHOOD               网上邻居目录   //如C:\WINDOWS\NetHood

   CSIDL_NETWORK           *   网上邻居

   CSIDL_PERSONAL              我的文档       //如C:\My Documents

   CSIDL_PRINTERS          *   打印机

   CSIDL_PROGRAMS              程序组         //如C:\WINDOWS\Start Menu\Programs

   CSIDL_RECENT                最近文档       //如C:\WINDOWS\Recent

   CSIDL_SENDTO                发送到         //如C:\WINDOWS\SentTo

   CSIDL_STARTMENU             开始菜单       //如C:\WINDOWS\Start Menu

   CSIDL_STARTUP               启动           //如C:\WINDOWS\启动

   CSIDL_TEMPLATES             模版           //如C:\WINDOWS\ShellNew