我有一个允许设置名称的部分解决方案(但不是图标或公司名称)。
可以在 Windows中注册应用程序。这与创建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键并为虚拟应用程序可以处理的每种类型添加一个值。
现在应用程序将出现在“选择默认程序”对话框的“其他程序”下拉菜单中,但不会出现在“打开方式”菜单中。要正确关联它,您需要:
- 转到注册表中文件扩展名的条目。这应该是 in
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
(它也可以是 in HKEY_CURRENT_USER
,但我发现FileExts
版本会覆盖,如果用户手动创建文件关联,Windows 会在那里创建一个,所以最好使用那个)。
- 在OpenWithList
whatever.exe
下,您在上面创建的假货需要有一个条目。这应该是一个名称为任意字母且其值为假 exe 名称的值。
- 同样在OpenWithList下,您需要确保该
MRUList
值包括您在上一步中分配给假可执行文件的字母。
- 我不相信你需要将它添加到OpenWithProgids(它没有这个),但文档告诉你。
- 要使其成为默认处理程序,请在UserChoice下将Progid设置为“
Applications\whatever.exe
”。这是可选的,但需要在此处设置一些内容(如果缺少UserChoice,则不会有任何效果)。
最后,使用SHChangeNotify刷新 Windows 的图标和快捷方式缓存。(毕竟我不确定这是否有必要;我只是注意到它有助于让 Windows 注意到您所做的更改。)
现在在文件类型的“打开方式”菜单上,您应该会看到您放入虚拟 .dll 中的自定义字符串的条目。它仍然会有 shell 命令中提到的真正二进制文件的图标,但您至少可以控制名称。为什么,为什么这么难?
如果有更好的答案,我会暂时保留这个问题。