Конвертировать Windows 10 Shell ParseName в KnownFolder Id и наоборот - PullRequest
0 голосов
/ 26 января 2019

Я использую метод Windows Shell в Windows 10 для перечисления дочерних элементов в родительском элементе с помощью метода IShellfolder :: EnumObjects () .Затем я использую метод GetDisplayNameOf (...) для получения имени разбора элемента:

string parseName = string.Empty;
if (iFolder.GetDisplayNameOf(apidl, SHGDNF.SHGDN_FORPARSING, ptrStr) == HRESULT.S_OK)
{
    NativeMethods.StrRetToBuf(ptrStr, default(IntPtr),
                              strbuf, NativeMethods.MAX_PATH);

    parseName = strbuf.ToString();
}

Смущает, что такой элемент, как «Этот ПК», имеет имя разбора, например:':: {20D04FE0-3AEA-1069-A2D8-08002B30309D}'

, но с известным идентификатором папки, подобным этому: ':: {0ac0837c-bbf8-452a-850d-79d08e667ca7}'

Есть ли способ эффективно перевести имена разбора в известные идентификаторы папок и наоборот?Я ищу наиболее эффективный метод, потому что он не должен занимать много дополнительного времени при перечислении многих дочерних элементов.

Статический список идентификаторов известных папок https://docs.microsoft.com/de-de/windows/desktop/shell/knownfolderid

Статический список оболочки WindowsParseNames http://andif888.blogspot.com/2015/05/known-folder-ids-in-windows-10-path-and.html

...