SHOpenFolder并选择资源管理器更换程序的项目

SHOpenFolderAndSelectItems for explorer replacement program

本文关键字:程序 项目 选择 资源管理器 SHOpenFolder      更新时间:2023-10-16

我维护了一个资源管理器/文件管理器工具(explorer2),它可以取代windows资源管理器来打开文件夹。但是,我无法捕获SHOpenFolderAndSelectItems API执行的"打开文件夹并选择项目"操作。

我发现了其他一些文件管理器程序员的一个旧线程,它暗示正确的方法是将"类似资源管理器"的工具注册为shell窗口,然后响应一些查询来提供接口和服务,如IWebBrowserApp,这将允许选择项

我成功地将我的顶级窗口注册为这样的

CComPtr<IShellWindows> pShellWindows;
HRESULT hr = pShellWindows.CoCreateInstance(CLSID_ShellWindows);
hr = pShellWindows->Register(static_cast<IDispatch*>(this),
(SHANDLE_PTR)hwTop, /*SWC_3RDPARTY*/SWC_EXPLORER, &m_dwCookie);
ATLASSERT(SUCCEEDED(hr));

如果在shell窗口中枚举,则该窗口确实会出现。但是,当它作为SHOpenFolderAndSelectItems的结果启动时(在HKEY_CLASSES_ROOT\Directory\shell中声明为资源管理器替换),不会尝试对注册的IDispatch执行QueryInterface或任何其他操作。我已经尝试了SWC_3RDPARTY和SWC_EXPLORER注册标志,但没有任何运气

你知道我做错了什么吗?

好吧,我想明白了。诀窍是真正绕过有缺陷的文档