2013-02-10 166 views

回答

4

只需致电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来处理此问题。

+0

GUID以字符串形式给出。 我可以使用Stringtoguid将字符串转换为GUID,然后调用SHGetKnownFolderPath – user382591 2013-02-10 22:07:08

+1

当然,你可以做到这一点。 – 2013-02-10 22:11:42

0

,因为没有保证的路径将在每一个系统一样。你不能知道的文件ID和路径的数组。有已知文件夹的默认路径,但它们只是默认值,可以更改。例如,许多企业环境都会将用户的文档文件夹移动到可以更容易地备份的网络共享中。

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

SHGetKnownFolderPath是返回已知文件夹的路径赢API函数。请注意,您需要释放通过调用CoTaskMemFree返回的unicode字符指针。

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

相关问题