IE浏览器IFolderview2创建文件夹发布通知

IExplorerbrowser IFolderview2 create folder post notification

本文关键字:通知 布通知 浏览器 IFolderview2 创建 文件夹 IE      更新时间:2023-10-16

我有一个MFC应用程序,它使用IExplorerBrowser接口在我的应用程序中实现windows shell。在这个应用程序中,我有一个按钮,用户可以单击它并在资源管理器的shell视图中创建一个文件夹。创建文件夹后,应用程序应允许用户重命名文件夹。换句话说,我希望它的工作方式与用户在Windows资源管理器中创建文件夹的方式完全相同。我使用IFileOperations接口的NewItem方法来创建文件夹。这是我在应用程序中创建文件夹的确切代码

HRESULT CreateFolder( __in IShellItem *pDestinationFolder, PCWSTR pszNewName )
{
HRESULT hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE );
if ( SUCCEEDED( hr ) )
{
    CComPtr<IFileOperation> pFileOperation;
    hr = CoCreateInstance( CLSID_FileOperation,
        NULL,
        CLSCTX_ALL,
        IID_PPV_ARGS( &pFileOperation ) );
    if ( SUCCEEDED( hr ) )
    {
        hr = pFileOperation->SetOperationFlags( FOF_NO_UI );
        if ( SUCCEEDED( hr ) )
        {
            hr = pFileOperation->NewItem( pDestinationFolder, FILE_ATTRIBUTE_DIRECTORY, pszNewName, NULL, NULL );
            if ( SUCCEEDED( hr ) )
            {
                hr = pFileOperation->PerformOperations();
            }
        }

    }
}
CoUninitialize();
return hr;
}

调用CreateFolder(…)后,我使用IFolderView2接口的SelectItem方法将文件夹置于选择模式。以下是将文件夹置于编辑模式的代码:

HRESULT hr = m_pIExplorerBrowser->GetCurrentView( IID_PPV_ARGS( pFolderView2 ) );
if( SUCCEEDED( hr ) )
pFolderView2->SelectItem( nLastCreatedFolderIndex, SVSI_EDIT );

问题是CreateFolder的完成时间晚于我的SelectItem方法调用。我一直在寻找一个事件,当CreateFolder更新视图时,它会告诉我,这样我就可以在那之后发送我的SelectItem方法。

如果能在这个问题上提供任何帮助,我们将不胜感激。

我终于找到了问题的答案。这已经被作为另一个关于斯塔克夫流的问题提出了。什么是";Shell命名空间";创建新文件夹的方法?