我想将Windows中的文件types与特定的应用程序关联起来,但是当用户打开“打开方式”菜单时,需要将该文件types与列表中的应用程序的名称和图标进行自定义即不是简单的可执行文件的名称和图标)。
这是因为二进制文件是一个普通的二进制文件,它运行许多不同的应用程序,具体取决于它的命令行参数(类似于python.exe
或javaws.exe
)。 我不希望“Open With”菜单显示“Python”或“Java”,我希望它显示在命令行上传递的应用程序的名称和图标。
我知道如何添加文件关联(通过在HKEY_CLASSES_ROOT
创buildProgID ,并将ProgID名称添加到OpenWithProgids或HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
),但我找不到任何方法来更改名称或应用程序的图标显示在“打开方式”菜单中,以显示该types的文件。 这可能吗?
( 编辑澄清我对添加文件关联的现有理解。)
我有一个部分解决方案,允许设置名称(但不是图标或公司名称)。
可以在Windows中注册一个应用程序 。 这与创建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命令中提到的真正的二进制图标,但至少可以控制名称。 为什么这么难?
如果有更好的答案,我会把这个问题放一会儿。
这有点复杂,但基本上你需要创建一个ProgID来引用应用程序本身,然后在扩展中添加一个OpenWithProgIDs键。
关于设置ProgID的更多细节在这里 。