c++ - SHOpenFolderAndSelectItems for explorer 替换程序

标签 c++ atl windows-shell

我维护了一个资源管理器/文件管理器工具 (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/

相关文章:

c++ - Xerces C++ SAX 解析问题 : expected class-name before '{' token

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

使用模板的C++静态编译错误

c# - 在 Windows 资源管理器中创建特殊文件夹,例如 DropBox 或 OneDrive

excel - 创建zip错误: Namespace method fails on IShellDispatch

windows - 在Windows资源管理器中获取选定的文件或文件夹

c++ - 你能告诉我为什么这会产生超过 spoj(质数生成器)的时间限制吗

c++ - 为什么*everything* 在 ATL/WTL 中使用模板基类?

c++ - 如何在 Visual Studio Community 2015 中创建 "ATL Project"?

c - 获取 Windows 资源管理器上下文菜单应用程序的覆盖范围!