首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SHGetDesktopFolder()不返回文件系统根目录

SHGetDesktopFolder()不返回文件系统根目录
EN

Stack Overflow用户
提问于 2022-08-12 09:52:33
回答 1查看 56关注 0票数 0

Microsoft文档之后,调用SHGetDesktopFolder()函数应该返回文件系统根:

检索桌面文件夹的IShellFolder接口,该文件夹是名称空间的根。

所以我运行了以下代码:

代码语言:javascript
复制
void LogDesktopFolderContent()
{
    IShellFolder* pDesktopFolder = nullptr;

    // get the desktop folder
    HRESULT hr = ::SHGetDesktopFolder(&pDesktopFolder);

    if (FAILED(hr))
        return;

    IEnumIDList* pEnumIDList;

    // list its content
    hr = pDesktopFolder->EnumObjects(nullptr, SHCONTF_NONFOLDERS, &pEnumIDList);

    if (FAILED(hr))
    {
        pDesktopFolder->Release();
        return;
    }

    do
    {
        LPITEMIDLIST pItem;
        hr = pEnumIDList->Next(1, &pItem, nullptr);

        if (pItem)
        {
            wchar_t buffer[MAX_PATH + 1];

            if (::SHGetPathFromIDListW(pItem, buffer))
            {
                ::OutputDebugString(buffer);
                ::OutputDebugString(L"\r\n");
            }

            ::CoTaskMemFree(pItem);
        }

        if (hr != S_OK)
            break;
    } while (1);

    pDesktopFolder->Release();
}

因此,我得到了以下文件:

用户C:\用户\管理桌面\私有C:\Users\Admin\Desktop\raw_registry_connections.png C:\ C:\Users\Admin\Desktop\StartSystem.bat \Admin\Desktop\Rad Studio公共Dir.lnk Dir.lnk C:\User\Admin\Desktop\ Alien Cube.url C:\User\Admin\桌面\折磨Souls.url C:\Users\Admin\Desktop\Notes.txt

这是我的桌面文件夹的内容。但是,这不是我的文件系统的根。

那么,我做错了什么,或者用Shell API获取文件系统根的正确方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2022-08-12 10:31:16

这是根源。例如,c:\Windows\Notepad.exe位于shell命名空间中的(Desktop)\This PC\c:\Windows\Notepad.exe

一个问题是,“这个PC”是一个文件夹,你要求非文件夹。另一个问题是,您正在调用SHGetPathFromIDListW,这只适用于具有文件系统路径的东西,而“此PC”则不起作用。要遍历命名空间,您应该只使用IShellFolder+pidl和/或IShellItem。要获取项目的“真实”名称,请打电话给IShellFolder::GetDisplayNameOf并请求SHGDN_FORPARSING

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73332300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档