将Windows 10 Shell ParseName转换为KnownFolder ID,反之亦然

时间:2019-01-25 22:14:32

标签: c# windows shell enumeration known-folders

我正在Windows 10上使用Windows Shell方法使用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();
}

令人困惑的是,诸如“ This PC”之类的项目具有如下解析名称: ':: {20D04FE0-3AEA-1069-A2D8-08002B30309D}'

,但是这样的已知文件夹ID: ':: {0ac0837c-bbf8-452a-850d-79d08e667ca7}'

是否有一种方法可以有效地将解析名称转换为已知的文件夹ID,反之亦然?我正在寻找最有效的方法,因为它在枚举许多孩子时不会占用太多时间。

已知文件夹ID的静态列表 https://docs.microsoft.com/de-de/windows/desktop/shell/knownfolderid

Windows Shell ParseNames的静态列表 http://andif888.blogspot.com/2015/05/known-folder-ids-in-windows-10-path-and.html

0 个答案:

没有答案