Как получить путь к папке из 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.

Другие вопросы по тегам