Как получить путь к папке из GUID известной папки в Delphi
У меня есть KNOWNFOLDERID
и я хотел бы знать соответствующий путь, как C:....\ папка.
KNOWNFOLDERID
можно найти здесь. http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx
Я хотел бы использовать win api (я не хочу создавать массив со всеми KNOWNFOLDERID и путями).
Спасибо
2 ответа
Просто позвоните 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, а не API-интерфейсы известных папок Vista.
Вы не можете создать массив известных идентификаторов и путей к папкам, поскольку нет уверенности, что пути будут одинаковыми в каждой системе. Есть пути по умолчанию для известных папок, но они просто по умолчанию, их можно изменить. Во многих корпоративных средах это делается, например, для перемещения папки с документами пользователя в общий сетевой ресурс, для которого проще создавать резервные копии.
В любом случае ссылка в предоставленной вами ссылке содержит всю необходимую вам информацию:
SHGetKnownFolderPath - это функция Win API, которая возвращает путь к известной папке. Обратите внимание, что вам нужно освободить указатель на кодировку Unicode, возвращенный самим, вызвав CoTaskMemFree.
Если вы предпочитаете работать с COM-объектом, вы можете использовать IKNOWNFOLDER.