如何在 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 中向文件类型添加辅助动词? 的相关文章

  • robocopy 脚本:系统资源不足

    我有一个之前可以运行的脚本 一个机器人复制脚本 备份服务器坏了 新的服务器丢失了一些配置 但我不是 Windows 用户 脚本如下 C Windows system32 Robocopy F Equipos NASSERVERBACKUP
  • 强制窗口在打开时获得焦点

    我有一个 WPF 应用程序 它通过套接字连接与 C MFC 应用程序进行通信 如果用户按下 C 应用程序中的特定按钮 则会显示一个新的 WPF 窗口 以下是调用以启动 WPF 窗口的代码 var window new Window wind
  • 使用 Python 将 Excel 中的图表导出为图像

    我一直在尝试将 Excel 中的图表导出为 Python 中的图像文件 JPG 或 ING 我正在查看 WIn32com 这是我到目前为止所拥有的 import win32com client as win32 excel win32 ge
  • 在 Windows 11 上无需管理员权限即可运行 Visual Studio 2022

    我在 Windows 11 上安装了 Visual Studio 2022 当我启动它时 它始终以管理员权限运行 我想在没有管理员权限的情况下运行它 我的 Windows 只有一个帐户 该帐户具有管理员权限 x 我做了什么 确认VS2022
  • 在 Android SDK 中设置 JAVA_HOME

    我和对方有一些冲突JAVA HOME配置 当我使用以下代码时 System out println System getenv JAVA HOME I get C jdk1 6 0 23这是正确的地方 但是 当我在 Android buil
  • 在 Windows 2008 上将 myprogram.exe 作为服务运行时出现问题

    MyProgram exe 是用来侦听来自管道的请求并使用命令提示符使其工作完美 但我尝试使用 Windows 服务来工作但没有成功我在 Windows Server 2008 Enterprise 上尝试了以下步骤 gt sc creat
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • 如何让脚本执行结束后自动删除?

    是否可以制作一个Python脚本 在Windows中执行结束时删除 py文件 自删除 这种方式使您的程序不依赖于操作系统 from os import remove from sys import argv remove argv 0 奖励
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • 导入错误:无法导入名称线程

    这是我第一次学习Python 我继续尝试线程这篇博文 http www saltycrane com blog 2008 09 simplistic python thread example 问题是它似乎已经过时了 import time
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 代码退出-1073741515 (0xc0000135)“未找到依赖的 dll”

    我正在尝试编写一个简单的程序 与 2019 年相比 Windows 10 64 位 调试 gt x64 遵循 将 Visual C 项目配置为面向 64 位平台 1 include
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • 取消后调用 boost::asio 异步处理程序没有错误

    我的代码在单个线程中使用 boost asio 和 io service 来执行各种套接字操作 所有操作都是异步的 每个处理程序都依赖于boost system error code 特别boost asio error operation
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https
  • 将 CrashDumps 转储到应用程序运行所在的同一文件夹中

    我编写了一个应用程序 我希望对其进行一定程度的自动调试 我想使用 Windows 错误报告将故障转储输出到应用程序运行所在的同一文件夹中 我的想法是 我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件 然后根据需要上传它们进行分析

随机推荐