2013-02-10 3 views
5

У меня есть KNOWNFOLDERID, и я хотел бы знать соответствующий путь, например C: .... \ folder.Как получить путь к папке из известной папки GUID в Delphi

KNOWNFOLDERID можно найти здесь. http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx

Я хотел бы использование Win API (я не хочу, чтобы создать массив со всеми KNOWNFOLDERID и трактов).

Благодаря

ответ

4

Просто позвоните в функцию API SHGetKnownFolderPath.

Поскольку эта функция была добавлена ​​в 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.

+0

GUID даны в виде строки. Могу ли я использовать Stringtoguid для преобразования строки в GUID, а затем вызывать SHGetKnownFolderPath – user382591

+1

Конечно, вы можете это сделать. –

0

Вы не можете создать массив из известных идентификаторов папок и путей, поскольку нет никаких гарантий того, что пути будут одинаковы в каждой системе. Существуют пути по умолчанию для известных папок, но они являются стандартными значениями, их можно изменить. Многие корпоративные среды делают это, например, для перемещения папки документов пользователя в общий сетевой ресурс, который может быть скопирован более легко.

В любом случае ссылка в ссылке вы предоставили содержит всю необходимую информацию:

SHGetKnownFolderPath является функцией API Win, которая возвращает путь к известной папке. Обратите внимание, что вам нужно освободить указатель на символ unicode, возвращенный сами, вызывая CoTaskMemFree.

Если вы предпочитаете работать с объектом COM, вместо этого вы можете использовать IKNOWNFOLDER.