如何在 Windows shell 中向文件类型添加辅助动词?

2024-01-13

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.* ...我知道可以在那里添加适用于所有文件类型的动词。但是,我需要找到某种方法来过滤,以便我们的动词仅真正出现在我们应该应用的那些实际文件类型中......


这是可能的,而且很容易做到(一旦你知道去哪里寻找)。神奇之处就在于关键HKEY_CLASSES_ROOT\SystemFileAssociations。在这里您会发现许多以文件扩展名命名的子项。只需在这些键下创建您想要的 shell/打开/命令键即可。

这是显示结构的示例注册表文件。如果将其保存为 .reg 文件并导入它,那么您将获得添加到所有 .txt 文件中的“导入到 Xyz 编辑器”命令,并且不会影响主文件关联:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt]

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\shell]

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\shell\xyz-import]
@="Import into Xyz Editor"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\shell\xyz-import\command]
@="notepad.exe \"%1\""

也在HKCR\SystemFileAssociatons有几个不以扩展名命名的键:“text”、“image”、“video”等。这些对应于PerceivedTypeHKCR 中扩展项下的条目。例如,HKCR\.png\PerceivedType设置为“图像”,也是如此HKCR\.jpg\PerceivedType,所以你可以在下面添加处理程序HKCR\SystemFileAssociations\image它将出现在所有“图像”类型中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows shell 中向文件类型添加辅助动词? 的相关文章

  • 如何从 C# 运行 PowerShell 脚本

    我正在尝试使用 C 运行 PowerShell 脚本 但没有成功 这是我的功能 private void ExecutePowerShellCommand string scriptfile RunspaceConfiguration ru
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将
  • C++ 使用 Windows 命名管道

    由于某种原因 桅杆和从属装置都失败了 但是我可以找到任何关于它们如何工作的好例子 所以我不确定我哪里出了问题 在 ConnectNamedPipe 之后 主设备永远不会退出 WaitForSingleObject 并且从设备在第一个 boo
  • git 认为文件已更改

    我在一台机器上对一个项目做了一些工作 然后推送到 github 在另一台机器上克隆并做了一些工作 然后推送 然后我回到第一台机器并做了一个pull 现在 第一台机器认为项目中最初的所有文件都已更改 我试过了 git checkout f a
  • 如何在 Ubuntu VirtualBox 中运行 Meteor 应用程序并使用 Windows 主机上的编辑器进行编辑?

    我希望在运行 Ubuntu 的 virtualbox 来宾中运行一个用于开发目的的流星服务器 该项目将位于主机上的一个文件夹内 该文件夹将共享给来宾 该文件夹本身位于 Dropbox 文件夹内 这样我可以在多个虚拟机和工作站之间共享开发 但
  • 如何使用 Win32 API 与 com 端口 (RS232) 通信

    我正在尝试使用 win32 API 与 com 端口对话 我找到了这个http www robbayer com files serial win pdf http www robbayer com files serial win pdf
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • Visual C++ 找不到“Windows 类型”,如 PVOID、DWORD、ULONG 等

    Windows 似乎无法找到任何这些类型 我完全不知道该怎么办 我在 MSDN 上找到的东西似乎表明它们是默认包含的 但它们在 Native 程序或 CLR 程序中不起作用 我收到的具体错误是
  • 如何在Windows服务器上将node.js文件作为后台进程运行?

    我正在创建一个 node js 项目并将其上传到我的 Windows 服务器 以为移动应用程序提供 API 服务 当我打开命令提示符并键入 node app js 它运行正常 但是当我关闭命令提示符时 我的 Node js 服务器停止运行
  • 什么是 SO_SNDBUF 和 SO_RCVBUF

    你能解释一下到底是什么吗SO SNDBUF and SO RCVBUF选项 好的 出于某种原因 操作系统缓冲传出 传入数据 但我想澄清这个主题 他们的角色 通 常 是什么 它们是每个套接字的缓冲区吗 传输层的缓冲区 例如 TCP 缓冲区 和
  • 在 Windows 上查找父进程 ID

    Problem 给定远程 Windows 主机上的进程 ID 和命令行访问权限 如何找到其父进程的 PID Solution 鉴于 Marc B 的回答 我们可以使用 WMIC 命令示例here https learn microsoft
  • 在 64 位 Windows 上运行 32 位可执行文件时出现问题

    如果允许的话 我会添加 500 个我自己的代表作为赏金 我在用着wkhtml转pdf http wkhtmltopdf org 将 HTML 网页转换为 PDF 这在我的 32 位开发服务器上完美运行 不幸的是 我无法运送我的机器 p 但是
  • 在 Windows 上通过 ctypes 将文件描述符传递给 C 库函数

    我试图通过 ctypes 将文件描述符传递给在 fd 上执行写入的 C 函数 在linux上它可以工作 在 Windows 上则不然 我不明白为什么 我没有 Windows 开发人员的经验 C func signature void fun
  • 已达到网络 BIOS 命令限制

    我的 ASP Net 应用程序从另一台 Windows 服务器上的共享文件夹获取文件 当请求增加时 我收到以下错误 The network BIOS command limit has been reached 我已按照以下步骤操作微软 K
  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • 使用 Windows 网络共享目录时 Hg 存储库损坏

    我希望我能在这里得到一些帮助 因为 SO UX 比 Mercurial 邮件列表更好 多年来我一直在家里愉快地使用 Mercurial 我还将它与 Bitbucket Cloud 一起用于一些更严肃 但仍然是爱好 的项目 去年 我将我的团队
  • “以管理员身份运行”时的 Windows 批处理文件起始目录

    我有一个位于目录中的批处理文件 也必须从那里运行 因为它会更新该目录中的文件 这工作得很好 除非用户以管理员身份运行批处理文件 Vista 上需要 那么起始目录是C Windows System32 有什么办法仍然能够知道批处理文件是从哪个
  • 为什么我的 DLL 无法注册?

    我正在 VS2005 中构建一个项目 但我的几个 DLL 无法注册 我在 Visual Studio 中收到的错误消息是 项目 错误 PRJ0019 工具从 注册 ActiveX 控件 返回错误代码 这很模糊 当我通过命令行手动注册DLL时
  • 使用 Objective-C 进行 Windows 开发

    最近读了一篇关于 Objective C 的文章 我觉得它是一门相当简洁的语言 具有很多很酷的功能 我无意进行任何 iPhone 开发 但是我了解 GCC 能够编译 Objective C 代码 所以我想知道 Objective C 是 W

随机推荐