2013-02-10 99 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來代替。