如何从Delphi中的已知文件夹GUID获取文件夹路径

时间:2013-02-10 20:54:40

标签: windows delphi winapi delphi-7 known-folders

我有一个KNOWNFOLDERID,我想知道相应的路径,如C:.... \ folder。

KNOWNFOLDERID可以在这里找到。 http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx

我想使用win api (我不想用所有KNOWNFOLDERID和路径构建一个数组。)

谢谢

2 个答案:

答案 0 :(得分:5)

只需致电SHGetKnownFolderPath API函数。

由于此功能是在Vista中添加的,因此不会在Delphi 7附带的库单元中声明。因此您需要自己声明。

type
  KNOWNFOLDERID = TGuid;

function SHGetKnownFolderPath(
  const rfid: KNOWNFOLDERID;
  dwFlags: DWORD; 
  hToken: THandle; 
  out ppszPath: PWideChar
): HResult; stdcall; external 'Shell32.dll';

现在,由于在Vista中添加了此功能,尝试在XP上调用它将导致失败。因此,我建议使用CSIDL函数而不是Vista已知文件夹API来处理此问题。

答案 1 :(得分:0)

您无法构建已知文件夹ID和路径的数组,因为无法保证每个系统中的路径都相同。已知文件夹有默认路径,但它们只是默认路径,可以更改。例如,许多企业环境都会将用户的文档文件夹移动到可以更容易备份的网络共享。

在任何情况下,您提供的链接中的链接都包含您需要的所有信息:

SHGetKnownFolderPath是Win API函数,它返回已知文件夹的路径。请注意,您需要通过调用CoTaskMemFree来释放自己返回的unicode char指针。

如果您使用COM对象,则可以使用IKNOWNFOLDER代替。