Winapi: программно получить путь к специальной папке, учитывая ее CLSID в виде строки
Предлагает ли Windows API какой-либо способ получения специального пути к папке (например, "Мои документы"), учитывая его CLSID в виде строки (т. Е.::{450d8fba-ad25-11d0-98a8-0800361b1103})? Можно ли это сделать каким-либо образом? Кроме того, это должно быть сделано с помощью функций, поддерживаемых в Windows XP.
Заранее спасибо.
1 ответ
Решение
Основной API, который вам нужен для этого SHParseDisplayName
, Это займет ::{GUID}
отформатировать путь и преобразовать его в PIDL.
Если PIDL тогда имеет строковую форму (как в вашем примере, поскольку он разрешается в папку "Документы"), вы можете использовать SHGetPathFromIDList
преобразовать это.
LPITEMIDLIST pidl;
if (SUCCEEDED(SHParseDisplayName(L"::{450d8fba-ad25-11d0-98a8-0800361b1103}", nullptr, &pidl, 0, nullptr)))
{
wchar_t wchPath[MAX_PATH];
if (SUCCEEDED(SHGetPathFromIDList(pidl, wchPath)))
{
// string form of path is now in wchPath
}
ILFree(pidl);
}