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

王朝delphi·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

我的主页: http://www.tommstudio.com/

在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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航