Windows:更改与文件类型相关联的应用程序的名称/图标

4
我想将Windows中的一个文件类型与特定应用程序关联起来,但我需要使得当用户打开“使用其他应用程序打开”菜单时,列表中显示的应用程序名称和图标是针对该文件类型进行定制的(即不仅仅是可执行文件的名称和图标)。
这是因为该二进制文件是通用二进制文件,根据其命令行参数运行许多不同的应用程序(类似于python.exejavaws.exe)。我不希望“使用其他应用程序打开”菜单显示“Python”或“Java”,而是要显示传递给命令行的应用程序的名称和图标。
我知道如何添加文件关联(通过在HKEY_CLASSES_ROOT中创建ProgID,并将ProgID名称添加到OpenWithProgidsHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts中),但我找不到任何方法来更改应用程序在“使用其他应用程序打开”菜单中显示的名称或图标。这可行吗?
编辑以澄清我对添加文件关联的现有理解。)
2个回答

3

我有一个部分解决方案,可以设置名称(但不能设置图标或公司名称)。

在Windows中,可以注册应用程序。这与创建ProgID非常相似,但它允许您设置FriendlyAppName。出于某种原因,您无法在ProgID上设置FriendlyAppName。 不幸的是,FriendlyAppName不是字符串,而是指向.DLL或.EXE文件中资源的引用。想想看。

所以:

  • 为您要关联文件的虚拟应用程序创建一个虚拟.dll文件。它不必包含任何代码,只需包含资源即可。给它一个包含应用程序标题的字符串资源。
  • 创建一个键 HKEY_CLASSES_ROOT\Applications\whatever.exe (whatever应该是特定于虚拟应用程序的唯一名称--它不需要是真实可执行文件的名称,但它必须以.exe或其他可执行文件扩展名结尾)。
    • 按照Programmatic Identifiers的说明设置默认值、DefaultIconshell。当此关联是默认项时,这将设置文件类型的名称和图标以及要运行的shell命令。
    • 还要为其添加引用虚拟.dll的FriendlyAppName值。例如,如果您的应用程序名称字符串是23号字符串,则将设置为"@ PATH \ TO \ DLL.dll,-23"。
    • 添加一个SupportedTypes键,并为虚拟应用程序可以处理的每种类型添加一个值。

现在,该应用程序将出现在“选择默认程序”对话框的“其他程序”下拉菜单中,但不会出现在“打开方式”菜单中。要正确关联它,您需要:

  • 进入注册表中文件扩展名的条目。这应该在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts中(也可能在HKEY_CURRENT_USER中,但我发现FileExts版本会覆盖,如果用户手动创建文件关联,则Windows会在那里创建一个,因此最好使用那个)。
    • OpenWithList 下,需要有一个虚假的whatever.exe条目。这应该是一个值,其名称是任意字母,其值是虚假exe名称。
    • 还在 OpenWithList 下,您需要确保MRUList值包括您在上一步中分配给虚拟可执行文件的字母。
    • 我认为不需要将其添加到 OpenWithProgids 中(没有此项也可以工作),但文档告诉您要这样做。
    • 要使其成为默认处理程序,在 UserChoice 下,将 Progid 设置为“Applications\whatever.exe”。这是可选的,但必须在此处设置某些内容(如果缺少 UserChoice ,则什么也不起作用)。

最后,使用SHChangeNotify刷新Windows的图标和快捷方式缓存。 (我不确定这是否有必要;我只是注意到它有助于使Windows注意到您正在进行的更改。)

现在,在文件类型的“打开方式”菜单上,您应该看到一个自定义字符串的条目,该字符串放置在虚拟.dll中。它仍将具有shell命令中提到的真实二进制文件的图标,但您至少可以控制名称。为什么,为什么这么难?

如果有更好的答案,我会让这个问题保持开放状态一段时间。


0

1
那只能帮我创建一个新的文件类型关联。据我从该文档里所看到的,你可以设置文件类型本身的图标DefaultIcon)和名称(默认值),但是在“打开方式”菜单中不能设置应用程序的图标名称。有什么方式可以在ProgID中设置以更改它在“打开方式”菜单中的外观吗? - mgiuca
你应该能够创建一个完全不被其他地方引用的新的ProgID,然后只需从OpenWithProgIDs键中引用它。 - Dean Harding
1
但是在ProgID中没有任何内容可以让我设置应用程序在“打开方式”菜单中的名称或图标。它将始终是“Python”(在Python示例中),但我希望能够动态地将其设置为Python应用程序的名称。 - mgiuca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接