你好,亲爱的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等)崩溃,并选择了正确的虚拟对象的新资源管理器窗口。
我的方法可能太复杂了,您有任何想法吗?
非常感谢!
答案 0 :(得分:0)
感谢Simon,我能够找到解决方案,但仍在进行中。问题在于解决方案中实现了IContextMenu,IContextMenu2和IContextMenu3接口。在Windows 7上,很好地调用了.lnk菜单处理程序,另一方面,在Windows 10上,您需要调用SHCreateDefaultContextMenu,然后合并菜单处理程序(SHCreateDefaultContextMenu随后将使用IID_IQueryAssociations调用IShellFolder :: GetUIObjectOf)。所以代码已经过时了...谢谢!