读书人

急求得到系统桌面文件夹的api~解决办

发布时间: 2012-02-07 17:45:36 作者: rapoo

急,求得到系统桌面文件夹的api~
rt

[解决办法]
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
....

读书人网 >.NET

热点推荐