我想将Windows中的文件类型与特定应用程序相关联,但我需要在用户打开“打开方式”菜单时将其设置为列表中的应用程序的名称和图标。文件类型(即,不仅仅是可执行文件的名称和图标)。
这是因为二进制文件是一个通用二进制文件,它运行许多不同的应用程序,具体取决于其命令行参数(类似于python.exe
或javaws.exe
)。我不希望“打开方式”菜单显示“Python”或“Java”,我希望它显示在命令行上传递的应用程序的名称和图标。
我知道如何添加文件关联(在HKEY_CLASSES_ROOT
中创建ProgID,并将ProgID名称添加到OpenWithProgids或HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
),但我找不到任何方式更改应用程序的名称或图标,因为它显示在该类型的文件的“打开方式”菜单中。这可能吗?
(已编辑以澄清我对添加文件关联的现有理解。)
答案 0 :(得分:3)
我有一个部分解决方案,允许设置名称(但不是图标或公司名称)。
Windows中可以register an application。这与创建ProgID非常相似,但它允许您设置 FriendlyAppName 。出于某种原因,您无法在ProgID上设置FriendlyAppName。 遗憾的是, FriendlyAppName 不是字符串,而是对.DLL或.EXE文件中的资源的引用。去图。
所以:
HKEY_CLASSES_ROOT\Applications\whatever.exe
(任何应该是特定于虚拟应用程序的唯一名称 - 不需要是真正可执行文件的名称,但它 需要以.exe
或其他可执行扩展名结尾)。
现在,应用程序将出现在“选择默认程序”对话框的“其他程序”下拉列表中,但不会出现在“打开方式”菜单中。要正确关联它,您需要:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
中(它也可以在HKEY_CURRENT_USER
中,但我发现FileExts
版本会覆盖,如果用户手动创建文件关联,Windows会在那里创建一个,所以最好用那个)。
whatever.exe
条目添加条目。这应该是一个名称为任意字母的值,其值为伪exe名称。MRUList
值包含您在上一步中分配给虚假可执行文件的字母。Applications\whatever.exe
”。这是可选的,但需要是这里设置的东西(如果缺少 UserChoice ,则什么都不起作用)。最后,点击SHChangeNotify以刷新Windows'图标和快捷方式缓存。 (我不确定这是否有必要;我只是注意到它有助于让Windows注意到你正在做的改变。)
现在,在文件类型的“打开方式”菜单中,您应该看到放入虚拟.dll的自定义字符串的条目。它仍将具有shell命令中提到的真实二进制文件的图标,但您至少可以控制名称。为什么,为什么这么难?
如果有更好的答案,我会暂时搁置这个问题。
答案 1 :(得分:0)
这有点复杂,但基本上你需要create a ProgID来引用应用程序本身,然后在扩展名中添加OpenWithProgIDs键。
有关设置ProgID is here的详细信息。