我维护了一个资源管理器/文件管理器工具 (xplorer2),它可以代替 Windows 资源管理器来打开文件夹。但是,我无法捕获由 SHOpenFolderAndSelectItems API 执行的“打开文件夹并选择项目”操作。
我找到了一个 old thread由其他一些文件管理器程序员暗示正确的方法是将“类似资源管理器”的工具注册为 shell 窗口,然后响应一些查询以提供接口(interface)和服务,如 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 中声明为资源管理器替代品)而启动时,不会尝试对 QueryInterface 或 IDispatch 上注册的任何其他操作。我已经尝试了 SWC_3RDPARTY 和 SWC_EXPLORER 注册标志,但没有任何运气
知道我做错了什么吗?
最佳答案
好的,我想通了。诀窍是绕过buggy documentation
关于c++ - SHOpenFolderAndSelectItems for explorer 替换程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118653/