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);
}
Другие вопросы по тегам