在 Windows 10 上模仿 Win 7 收藏夹(Shell 命名空间扩展)

Mimic Win 7 Favorites on Windows 10 (Shell Namespace Extension)

亲爱的 Whosebug 朋友们大家好

几个月前我问过你一个关于的问题。不幸的是,我们仍然面临这个问题(无法取消固定虚拟 objects)。在多次致电 Microsoft 支持后,他们回答我们应该订阅高级支持……对于小公司来说太贵了。

因此我们决定在我们的 Shell 命名空间扩展中模仿 Windows 7 个收藏夹。

在资源管理器中没什么大不了的,用视图的句柄和 lnk 的目标调用 ShellExecuteEx object 绝对 pidl 就像一个魅力。

好得令人难以置信,是的,因为它在 IFileDialogs 中没有按预期工作... 首先,由于对话框中显示的明显原因,lnks(包装在虚拟 object 中,但解析名称是文件系统路径)。所以我们尝试使用 "SFGAO_FOLDER"、"SFGAO_FILESYSANCESTOR" 等属性,但是 shell 正在调用 IShellFolder 的 EnumObjects,这不是我们想要的。

所以我们决定尝试使用接口 IObjectWithSite,在我们的收藏夹文件夹中实现它。然后我们就可以使用来自 IFileDialogs 的事件,例如 OnSelectionChange。然后我们尝试了和explorer一样的方法,获取视图句柄(首先查询IOleWindow接口,获取window句柄,在parentIShell文件夹中创建视图使用window handle) 并调用 ShellExecuteEx... 结果是... =]已选中。

可能是我的方法太复杂了,你有什么想法吗?

非常感谢!

感谢 Simon,我能够找到解决方案,但仍在进行中。问题在于解决方案中实现了 IContextMenu、IContextMenu2 和 IContextMenu3 接口。在 Windows 7 上,调用了 .lnk 菜单处理程序,很好,在 Windows 10 上,另一方面,您需要调用 SHCreateDefaultContextMenu,然后合并菜单处理程序(SHCreateDefaultContextMenu 将调用 IShellFolder::GetUIObjectOf 与 IID_IQueryAssociations)。所以代码已经过时了...谢谢!