在 Windows 注册表中,ProgrammaticAccessOnly 字符串值是什么?它是如何工作的?

Has*_*ziz 6 windows windows-registry windows-7 context-menu regedit

这是this one的后续问题。如该答案所示,ProgrammaticAccessOnly可用于隐藏某些上下文菜单项,而无需禁用其底层或相关功能。

通过这种方式,它似乎是LegacyDisable字符串值的更有用的模拟,因为它可以用于以比破坏性更小的方式禁用注册表功能LegacyDisable

但是,与许多其他注册表值-数据对一样,很难从 Microsoft 或其他权威来源获得有关该值及其工作原理的实际文档。我能在不同的论坛帖子之外找到以下内容,来自此处的教程

ProgrammaticAccessOnly 是一个特殊值,它隐藏上下文菜单条目,但允许程序在需要时访问它。

这远不全面,我怀疑该值的范围仅限于上下文菜单。例如,这里至少ProgrammaticAccessOnly=Apartment详细介绍了一次,没有解释它的作用或其他数据类型。

ProgrammaticAccessOnly注册表中的字符串值究竟是如何工作的?总是使用它有什么注意事项LegacyDisable吗?另外,可以使用它的所有可能数据类型的列表是什么?

har*_*ymc 5

我已经回答了您关于LegacyDisable的帖子, 并且对该主题有一些了解。由于这篇文章没有答案,我会尝试,尽管我的答案可能并不令人满意。

这些注册表项的问题在于它们没有记录。每个新版本的 Windows 可能会添加更多或使其他版本无效。由于它们是无证的,微软保留了自由修改它喜欢的任何东西的自由,因此验证它们是否仍然有效的责任落在了用户身上。

有关这些项目的信息来自 Microsoft 通过各种非官方渠道。有时它们会出现在 SDK 示例或 MSDN 上,有时会出现在 Microsoft 工程师的论坛回答中,有时会出现在对 Microsoft 工程师有特权访问权限的 Microsoft 客户中。

我发现有人在文章文件类型注册 中编制了所有已知此类项目的列表 ,每个项目都有说明和文档链接。不足为奇,大多数项目都没有文档链接。

至于ProgrammaticAccessOnly,这篇文章只说“从 IContextMenu 枚举中删除动词?”,但没有文档链接。

通过谷歌搜索,我发现了 一篇 Winaero 文章 ,上面写着:

ProgrammaticAccessOnly 是主要的技巧。它是一个特殊参数,它告诉 Windows 资源管理器外壳只能通过软件以编程方式访问上下文菜单项。用户界面被锁定,因此该命令从上下文菜单中消失!

总之,这些特殊的注册表项似乎被IContextMenu 接口识别 ,其中:

公开创建或合并与 Shell 对象关联的快捷菜单的方法。

IContextMenu 接口由 Shell 扩展处理程序导出,主要由 Windows 资源管理器使用。

综上所述,存在ProgrammaticAccessOnly导致shell枚举忽略shell项,但程序仍然可以通过IContextMenu接口或直接通过修改注册表来引用和更新它。


归档时间:

查看次数:

930 次

最近记录:

8 年,9 月 前