我维护了一个资源管理器/文件管理器工具(xplorer2),它可以取代Windows资源管理器打开文件夹。但是我无法捕获SHOpenFolderAndSelectItems API执行的“打开文件夹和选择项”操作。
我找到了一个其他文件管理器程序员的old thread,暗示正确的方法是将“类似资源管理器”的工具注册为shell窗口,然后响应一些查询以提供IWebBrowserApp等接口和服务这将允许选择项目
我已成功将shell窗口注册到顶级窗口
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注册标志
任何想法我做错了什么?