Delphi获取系统特殊文件夹路径


本文整理自网络,侵删。

 Delphi获取系统特殊文件夹路径
在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

 

 

使用API函数SHGetSpecialFolderLocation和SHGetPathFromIDList uses shlobj; procedure TForm1.Button1Click(Sender: TObject); var pidl: PItemIDList; FavPath: array[0..MAX_PATH] of char; temp:array [1..17] of integer; i:byte; begin temp[1]:=CSIDL_DESKTOP; //桌面  temp[2]:=CSIDL_DESKTOPDIRECTORY ; //桌面目录  temp[3]:=CSIDL_FONTS ; //字体目录  temp[4]:=CSIDL_NETHOOD ; //网络邻居  temp[5]:=CSIDL_PERSONAL ; //我的文档目录  temp[6]:=CSIDL_PROGRAMS ; //开始菜单程序目录  temp[7]:=CSIDL_RECENT ; //存放用户最近访问文件快捷方式的目录  temp[8]:=CSIDL_SENDTO ; //"发送到"目录  temp[9]:=CSIDL_STARTMENU ; //开始菜单目录  temp[10]:=CSIDL_STARTUP ; //开始菜单启动项目录  temp[11]:=CSIDL_FAVORITES ; //收藏夹目录  for i:=1 to 17 do begin SHGetSpecialFolderLocation(Handle, temp[i], pidl); SHGetPathFromIDList(pidl, favpath); listbox1.Items.Add(StrPas(FavPath)); end; end;

相关阅读 >>

Delphi 动态调用chm文件

Delphi 如何读取文件头 判断文件类型

Delphi 复制文件到全盘

Delphi twebbrowser get html source after ajax load

Delphi tfilestream和tmemorystream分别读取、创建、合并文件

Delphi 传输文件例子的核心代码

Delphi加载驱动的代码演示

Delphi 切换大小写的例子

Delphi char string

Delphi winsoft comport for android usb

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...