您的位置:首页 > 其它

如何取得系统中的桌面的路径

2007-08-13 17:18 260 查看
我们在编写程序的时候,经常会需要得到系统中的一些特殊目录,例如:桌面、收藏夹、历史文件、字体等。在windows98、windows NT、windows 2000中他们的位置是不一样的,尤其在windows2000和wodows NT中,他们的位置随着登陆用户的不同而改变。那么我们要如何取得这些特殊目录的具体位置呢?
当然是利用Api函数,现在我介绍两个Api函数,利用他们就可以轻松简单的获取这些特殊系统目录。

Function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer;
var ppidl: PItemIDList): HResult; stdcall;


Function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL;stdcall;

其中由nFolder参数指定的就是各个特殊系统目录:

CSIDL_DESKTOP:毫无疑问这就是桌面;

CSIDL_DRIVERS:我的电脑;

CSIDL_FAVORITES:收藏夹;

CSIDL_STARTUP:开始菜单;

CSIDL_NETWORK:网上邻居;

还有很多,你可以查阅一下Delphi的Win32 Api函数的帮助文件,不过在帮助文件下的这些参数也不是很全,像收藏夹帮助文件里面就没有,你可以查阅一下它的头文件:shlobj.pas。

下面我就利用这两个函数取得桌面的路径(在win98和win2000下都可以使用):

uses shlobj;

[b] pitem:PITEMIDLIST;
s:string;
[b]shGetSpecialFolderLocation(handle,CSIDL_DESKTOP,pitem);
setlength(s,100);
shGetPathFromIDList(pitem,pchar(s));
end;
[/b]begin
[/b]var


在字符串s中存储的就是桌面的路径值。简单吧!就是这么简单,但要是你不知道,你就得绕一个大圈子。

使用API函数SHGetSpecialFolder。shlobj.h里有SHGetSpecialFolder的原型声明。这个函数可以帮我们找到windows的Desktop目录、启动目录、我的文档目录等。

SHGetSpecialFolder需要三个参数。 第一个参数是HWND,它指定了"所有者窗口":在调用这个函数时可能出现的对话框或消息框。第二个参数是一个整数id,决定哪个目录是待查找目录,它的取值可能是:

CSIDL_BITBUCKET 回收站

CSIDL_CONTROLS 控制面板

CSIDL_DESKTOP Windows 桌面desktop

CSIDL_DESKTOPDIRECTORY desktop的目录

CSIDL_DRIVES 我的电脑

CSIDL_FONTS 字体目录

CSIDL_NETHOOD 网上邻居

CSIDL_NETWORK 网上邻居virtual folder

CSIDL_PERSONAL 我的文档

CSIDL_PRINTERS 打印机

CSIDL_PROGRAMS 程序组

CSIDL_RECENT 大多数最近打开的文档列一

CSIDL_SENDTO “发送到”菜单项

CSIDL_STARTMENU 任务条启动菜单项

CSIDL_STARTUP 启动目录

CSIDL_TEMPLATES 临时文档

最后一个参数是pidl地址。SHGetSpecialFolderLocation把地址写到pidl。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: