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

时间:2018-10-30 08:04:32

标签: shell com namespaces windows-10 favorites

你好,亲爱的stackoverflow朋友

几个月前,我问了一个有关QuickAccess (Pin/Unpin)的问题。不幸的是,我们仍然面临这个问题(无法取消固定虚拟对象)。几次致电Microsoft支持之后,他们回答说我们应该订阅高级支持...对于一家小公司来说太贵了。

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

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

太好了,是的,因为它无法在IFileDialogs中正常工作... 首先,由于对话框中显示的明显原因,未将lnks(包装在虚拟对象中,但解析名称为“文件系统路径”)。因此,我们尝试使用“ SFGAO_FOLDER”,“ SFGAO_FILESYSANCESTOR”等属性,但是随后外壳调用了IShellFolder的EnumObjects,这不是我们想要的。

因此,我们决定使用IObjectWithSite接口,并在“收藏夹”文件夹中实现它。然后,我们可以使用IFileDialogs中的事件,例如OnSelectionChange。然后,我们尝试了与资源管理器中相同的方法,即获取视图句柄(首先查询IOleWindow接口,获取窗口句柄,使用窗口句柄在父级IShellFolder中创建视图)并调用ShellExecuteEx ...结果是..一个大应用程序(记事本) ,Word等)崩溃,并选择了正确的虚拟对象的新资源管理器窗口。

我的方法可能太复杂了,您有任何想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

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