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

如何获取打开/保存对话框(Open/Save Dialog)的PIDL?

获取打开/保存对话框PIDL的问题

我已针对该问题研究许久,目前可通过以下代码获取资源管理器对话框的PIDL:

::CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL, IID_IShellWindows, (void**)&psw)

但这段代码仅能获取资源管理器对话框,我在微软文档中未找到任何关于获取打开/保存对话框PIDL的相关内容。

完整实现代码如下:

HRESULT hr = S_OK;

CoInitialize(NULL);


IShellWindows *psw = NULL;
if (!SUCCEEDED(::CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL, IID_IShellWindows, (void**)&psw)) || !psw)
{
    CoUninitialize();
    return;
}

long lCount = 0;
if (!SUCCEEDED(psw->get_Count(&lCount)))
{
    psw->Release();
    CoUninitialize();
    return;
}

IDispatch *pdisp = NULL;
VARIANT v;
V_VT(&v) = VT_I4;
for (V_I4(&v) = 0; V_I4(&v) < lCount; V_I4(&v)++)
{
    if (!SUCCEEDED(psw->Item(v, &pdisp)) || !pdisp)
    {
        continue;
    }
 
    IWebBrowserApp *pwba = NULL;
    if (!SUCCEEDED(pdisp->QueryInterface(IID_IWebBrowserApp, (void**)&pwba)) || !pwba)
    {
        pdisp->Release();
        continue;
    }

    IServiceProvider *psp = NULL;
    if (!SUCCEEDED(pwba->QueryInterface(IID_IServiceProvider, (void**)&psp)) || !psp)
    {
        pdisp->Release();
        pwba->Release();
        continue;
    }

    IShellBrowser *psb = NULL;
    if (!SUCCEEDED(psp->QueryService(SID_STopLevelBrowser, IID_IShellBrowser, (void**)&psb)) || !psb)
    {
        pdisp->Release();
        pwba->Release();
        psp->Release();
        continue;
    }

    IShellView* psv = NULL;;
    if (!SUCCEEDED(psb->QueryActiveShellView(&psv)) || !psv)
    {
        pdisp->Release();
        pwba->Release();
        psp->Release();
        psb->Release();
        continue;
    }

    IFolderView2 *pfv = NULL;
    if (!SUCCEEDED(psv->QueryInterface(IID_IFolderView2, (void**)&pfv)) || !pfv)
    {
        pdisp->Release();
        pwba->Release();
        psp->Release();
        psb->Release();
        psv->Release();
        continue;
    }
    ...
}

内容的提问来源于stack exchange,提问作者Suarez Zhou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:20:29