SHOpenFolder并选择资源管理器更换程序的项目
SHOpenFolderAndSelectItems for explorer replacement program
我维护了一个资源管理器/文件管理器工具(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注册标志,但没有任何运气
你知道我做错了什么吗?
好吧,我想明白了。诀窍是真正绕过有缺陷的文档
相关文章:
- 如何将我的小程序转换为用于项目的函数?
- Visual Studio 如何在内核模式驱动程序项目中使用C++标准库?
- 如何从 CLion 的运行窗口中删除程序项目路径
- VS2017 中缺少 Win32 控制台应用程序.如何创建C++空项目?
- PyFunctionObject 在 Py_Finalize 中使程序崩溃,如果它在 PyTuple 中被设置了项目
- CMake:find_package中的项目如何破坏程序?
- 如何将此项目更改为 OpenCV 实时人脸检测应用程序?
- 在 C++/CLI/C# 项目中启用"Native Code Debugging"导致应用程序崩溃
- Makefile:编译一个llvm程序,作为g++编译的bnfc项目的一部分
- 将 Dr. Memory 与 Visual Studio 项目配合使用时出错:缺少应用程序所需的库
- 无法编译QT创建快速应用程序项目
- 混合模式程序集是针对版本 'v2.0.50727' 构建的 ...本机C++/Visual C++/C# 项目错误
- 如何将boost.asio添加到windows通用应用程序项目中
- 如何将MFC应用程序项目添加到Visual C 2008中的Win32应用程序项目
- 如何在应用程序项目中使用android原生代码
- 引用Windows应用商店应用程序项目中的C++WinRT组件
- 卸载程序不会删除复制到VS2010安装程序项目中的系统文件夹。
- GDB 断点未停止程序(项目符号物理库中的断点)
- visual 无法在控制台应用程序项目中包含头文件C++
- C/ c++应用程序项目(NetBeans)中的多个源文件