shell - 在 Windows 10 上模拟 Win 7 收藏夹( shell 命名空间扩展)

标签 shell com namespaces windows-10 favorites

你好亲爱的stackoverflow friend

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

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

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

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

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

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

非常感谢!

最佳答案

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

关于shell - 在 Windows 10 上模拟 Win 7 收藏夹( shell 命名空间扩展),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53059802/

相关文章:

linux - 我们如何获得 linux 上的非系统用户列表?

linux - 持续监视 linux 中的目录并在新文件可用时通知

java - 无法使用 PHP 运行 shell 函数

c# - 两个版本的 C# 应用程序之间的 COM 问题

c# - 反射是 C# 中系统命名空间内的嵌套命名空间吗?

arrays - 用shell读取json数组变量

vb.net - 将 Office 从 2003 升级到 2007 是否会破坏通过 COM 互操作使用 Excel 的 VB 程序?

python - 我可以在 VBA 中使用我的 python 自定义对象吗?

html - 是否可以将 'use as' 用于 .phtml 文件中的命名空间?

namespaces - Salesforce 中有多少个命名空间