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

时间:2013-05-30 06:51:00

标签: windows registry file-association

我想将Windows中的文件类型与特定应用程序相关联,但我需要在用户打开“打开方式”菜单时将其设置为列表中的应用程序的名称和图标。文件类型(即,不仅仅是可执行文件的名称和图标)。

这是因为二进制文件是一个通用二进制文件,它运行许多不同的应用程序,具体取决于其命令行参数(类似于python.exejavaws.exe)。我不希望“打开方式”菜单显示“Python”或“Java”,我希望它显示在命令行上传递的应用程序的名称和图标。

我知道如何添加文件关联(在HKEY_CLASSES_ROOT中创建ProgID,并将ProgID名称添加到OpenWithProgidsHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts),但我找不到任何方式更改应用程序的名称或图标,因为它显示在该类型的文件的“打开方式”菜单中。这可能吗?

已编辑以澄清我对添加文件关联的现有理解。)

2 个答案:

答案 0 :(得分:3)

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

Windows中可以register an application。这与创建ProgID非常相似,但它允许您设置 FriendlyAppName 。出于某种原因,您无法在ProgID上设置FriendlyAppName。 遗憾的是, FriendlyAppName 不是字符串,而是对.DLL或.EXE文件中的资源的引用。去图。

所以:

  • 为要与其关联文件的虚拟应用程序创建虚拟.dll文件。它不必包含任何代码,只需要资源。给它一个包含应用程序标题的字符串资源。
  • 创建一个密钥HKEY_CLASSES_ROOT\Applications\whatever.exe(任何应该是特定于虚拟应用程序的唯一名称 - 需要是真正可执行文件的名称,但它 需要以.exe或其他可执行扩展名结尾)。
    • 设置默认值 DefaultIcon shell ,如Programmatic Identifiers中所述。当此关联是默认关联时,这将设置文件类型的名称和图标,以及要运行的shell命令。
    • 同时为其指定虚拟.dll的 FriendlyAppName 值。例如,如果您的应用名称字符串是字符串编号23,请将 FriendlyAppName 设置为“@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命令中提到的真实二进制文件的图标,但您至少可以控制名称。为什么,为什么这么难?

如果有更好的答案,我会暂时搁置这个问题。

答案 1 :(得分:0)

这有点复杂,但基本上你需要create a ProgID来引用应用程序本身,然后在扩展名中添加OpenWithProgIDs键。

有关设置ProgID is here的详细信息。