You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除远程位置后,如何让Windows Explorer实例导航至默认目录?

问题

我做的项目是在Windows资源管理器中创建图标以访问远程位置,让Windows上的导航体验和本地文件系统一致。目前添加、移除该位置图标的功能已正常工作,但如果Windows资源管理器在图标移除前已打开该远程位置,移除后仍会显示该位置,任何交互操作都会触发报错。

我的目标是:移除远程位置时,让所有打开该位置的Windows资源管理器实例自动导航到默认位置(如用户目录)。

已实现功能

已成功获取所有打开的Windows资源管理器实例及其当前打开的路径,代码如下:

std::vector<IWebBrowserApp*> getOpenWindowsExplorers()
{
    std::vector<IWebBrowserApp*> openExplorers;
    IShellWindows *psw;
    if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL,
                                   IID_IShellWindows, (void**)&psw))) {
        VARIANT v;
        V_VT(&v) = VT_I4;
        IDispatch  *pdisp;
        BOOL fFound = FALSE;
        for (V_I4(&v) = 0; !fFound && psw->Item(v, &pdisp) == S_OK;V_I4(&v)++)
        {
            IWebBrowserApp *pwba;
            if (SUCCEEDED(pdisp->QueryInterface(IID_IWebBrowserApp, (void**)&pwba)))
            {
                openExplorers.push_back(pwba);
            }
            pdisp->Release();
        }
        psw->Release();
    }
    return openExplorers;
}

QString getCurrentOpenFolder(IWebBrowserApp* explorer)
{
    QString folderPath;

    IServiceProvider *psp;
    if (SUCCEEDED(explorer->QueryInterface(IID_IServiceProvider, (void**)&psp)))
    {
        IShellBrowser *psb;
        if (SUCCEEDED(psp->QueryService(SID_STopLevelBrowser, IID_IShellBrowser, (void**)&psb)))
        {
            IShellView *psv;
            if (SUCCEEDED(psb->QueryActiveShellView(&psv)))
            {
                IFolderView *pfv;
                if (SUCCEEDED(psv->QueryInterface(IID_IFolderView, (void**)&pfv)))
                {
                    IPersistFolder2 *ppf2;
                    if (SUCCEEDED(pfv->GetFolder(IID_IPersistFolder2, (void**)&ppf2)))
                    {
                        LPITEMIDLIST pidlFolder;
                        if (SUCCEEDED(ppf2->GetCurFolder(&pidlFolder)))
                        {
                            TCHAR g_szPath[MAX_PATH];
                            if (SHGetPathFromIDList(pidlFolder, g_szPath))
                            {
                                folderPath = QString::fromWCharArray(g_szPath);
                            }
                            CoTaskMemFree(pidlFolder);
                        }
                        ppf2->Release();
                    }
                    pfv->Release();
                }
                psv->Release();
            }
            psb->Release();
        }
        psp->Release();
    }
    return folderPath;
}

当前困惑

找不到设置Windows资源管理器路径的官方/非官方文档,目前找到两个线索但不确定如何使用:

  • IPersistFolder的Initialize方法似乎可实现需求,但需要PCIDLIST参数,不清楚如何获取用户目录或其他硬编码路径对应的PCIDLIST,官方文档也未说明具体使用方法。
  • IWebBrowser::Navigate方法看似符合需求,但相关文档为非官方内容,没有参数说明,官方文档也未提及该方法。

请问实现该需求的最佳方式是什么?


内容的提问来源于stack exchange,提问作者Mickaël C. Guimarães

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:20:39