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 xe6 android下捕获功能键

Delphi 2009 泛型容器单元(generics.collections)[5]: tobject...<t> 系列

paramstr返回运行当行程序的某个参数

Delphi 在窗体上创建自己的光标并输入文字

ttreeview的两个事件ondragdrop、ondragover 实现自动拖放功能

Delphi webbrowser 表单赋值模拟点击

Delphi 正则表达式起步

Delphi tzipfile 用法

Delphi 如何解决在dll的入口函数中创建或结束线程时卡死

Delphi 百度输入提示 Delphi 实现

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



打赏

取消

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

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

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

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

评论

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