我有一个KNOWNFOLDERID
,我想知道相应的路径,如 C:....\folder。
KNOWNFOLDERID
可以在这里找到。
http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx
我想使用 win api (我不想构建一个包含所有 KNOWNFOLDERID 和路径的数组)。
谢谢
我有一个KNOWNFOLDERID
,我想知道相应的路径,如 C:....\folder。
KNOWNFOLDERID
可以在这里找到。
http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx
我想使用 win api (我不想构建一个包含所有 KNOWNFOLDERID 和路径的数组)。
谢谢
只需调用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 来处理这个问题。
您无法构建已知文件夹 ID 和路径的数组,因为无法保证每个系统中的路径都相同。已知文件夹有默认路径,但它们只是默认值,可以更改。许多公司环境这样做是为了,例如,将用户的文档文件夹移动到可以更轻松地备份的网络共享。
无论如何,您提供的链接中的链接包含您需要的所有信息:
SHGetKnownFolderPath是返回已知文件夹路径的 Win API 函数。请注意,您需要通过调用 CoTaskMemFree 释放自己返回的 unicode char 指针。
如果您更喜欢使用 COM 对象,则可以改用IKNOWNFOLDER。