Windows shell 编程的基本思想是,您可以将给定的文件类型(扩展名)与 MS 当前调用的 progid(例如 Company.Type.Ver)相关联:
HKCR\.txt
@=Acme.Text.1
HKCR\Acme.Text.1
@=这是 Acme 文本文件关联的 progid
然后,Acme Corp 可以将任意数量的 shell 动词作为 HKCR\Acme.Text.1\shell 的子项,例如 HKCR\Acme.Text.1\shell\open。
但如果我是 XyzCorp,如何向文本文件添加次要动词?
我不想篡夺主文件关联 - 我很高兴它与 Acme.Text.1 关联,但我想添加“导入到 Xyz 编辑器”。
I could:
1. 在 Acme 的 progid 中添加一个动词(例如 HKCR\Acme.Text.1\shell\my-verb)
2. 代表我们双方创建一个新的 progid,并将 Acme 的数据复制到其中,并将 XyzCorp 的动词合并到其中
3.直接在文件扩展名中添加动词(以前至少有一个可以这样做)
4.???
有谁知道这个问题的“正确”答案?
编辑:
我真的对任何涉及修改别人的 PROGID 的解决方案都不感兴趣。我真的更愿意在关联的 PROGID 之外添加一些东西 - IContextMenu 或所需的任何内容,以向给定文件类型添加其他动词/选项。
拥有 ext->progid 似乎是一个疯狂的系统,其中 progid 属于各个开发公司,并且可以随意删除或更改。这让我觉得很脆弱(卸载一些东西然后噗,你的文件扩展名停止正常工作,或者安装一些东西,同样你的次要动词消失,因为 ext 现在映射到一个不同的专有 PROGID,当我们安装了(当时还不知道关于这个另一个还不存在的 progid 的任何事情)),而且只是愚蠢的。经过这么长时间,所有这些版本的 Windows 和 Microsoft 都没有找到一种方法来为给定的文件类型提供多层处理程序?真的吗?!?
我只是觉得那令人震惊!初级编程 101 涉及学习命令模式或其他分层/级联系统。 Windows WinProcs 本身以命令模式模式进行组织 - 因此,从内部窗口上下文到外部,许多可能的处理程序都会在给定的 MSG 上得到破解。
当然有一种方法可以添加适用于多个扩展的动词,而无需覆盖扩展的主要 progid 关联,该关联本身完全独立于主要扩展 -> progid 映射(以便用户可以随着时间的推移安装多个程序,并且仍然可以访问该文件类型的辅助动词)。
我想我可以看看 HKCR.* ...我知道可以在那里添加适用于所有文件类型的动词。但是,我需要找到某种方法来过滤,以便我们的动词仅真正出现在我们应该应用的那些实际文件类型中......