【问题标题】:Windows: Changing the name/icon of an application associated with a file typeWindows:更改与文件类型关联的应用程序的名称/图标
【发布时间】:2013-05-30 06:50:59
【问题描述】:

我想将 Windows 中的文件类型与特定应用程序相关联,但我需要这样做,以便当用户打开“打开方式”菜单时,列表中应用程序的名称和图标是针对该应用程序定制的文件类型(即,不仅仅是可执行文件的名称和图标)。

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

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

编辑以阐明我对添加文件关联的现有理解。)

【问题讨论】:

    标签: windows registry file-association


    【解决方案1】:

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

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

    所以:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这只有助于我创建新的文件类型关联。据我从that documentation 得知,您可以设置文件类型的 icon (DefaultIcon) 和 name (默认值)本身,但没有用于设置应用程序的 iconname 的字段,如“打开方式”菜单中所示。我可以在 ProgID 中设置什么来改变它在“打开方式”菜单中的外观吗?
      • 您应该能够创建一个在其他任何地方都没有引用的全新 ProgID,然后只需从 OpenWithProgIDs 键中引用它。
      • 但 ProgID 中没有任何内容可以让我在“打开方式”菜单中设置应用程序的名称或图标。它始终是“Python”(在 Python 示例中),但我希望能够将其动态设置为 Python 应用程序的名称。
      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多