2014-01-13 60 views
2

增加OpenWithList(不知道这是否属于在超级用户,但它似乎有一个cmd.exe的标签在这里,所以这里去...)FTYPE/ASSOC的优先级和命令行

作为背景,我正在开发一个Firefox附加组件(这个问题不需要Firefox的知识,因为Firefox附加组件可以调用命令行)。附加组件旨在为cmd.exe构建不同类型的快捷方式(特别是为了我的项目https://github.com/brettz9/webappfind,它允许直接从桌面打开文件到网络应用程序)。

不管怎么说,我想给用户这些快捷键关联的选项:

  1. 至于具体的文件扩展名或文件类型的默认处理程序。
  2. 到开放中展示了应用程序(即使用户选择不使应用程序的默认处理程序)列表

至于默认处理,我已经找到了ftypeassoc(和associate)命令,但我已经读过,用户选择将覆盖他们的行为。有什么方法可以确保我可以在命令行中将文件扩展名关联到类型和特定的可执行文件(直到用户再次更改它),或者如果它是不可能的,那么至少通过C++或类似的文件可以获得优先级?

至于打开方式列表:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<file extension>\OpenWithList 

...在我的测试(与一个exe),此命令:

reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList /v d /d D:\wamp\www\webappfind\cplusplus\WebAppFinder-view-mode-Firefox.exe 

...确实导致的exe文件显示在:

reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList 

...但它并没有显示出来,当我后来右键单击与“.SVG”扩展名的文件。

我真的很感谢这两点的帮助。

回答

2
REGEDIT4 

[HKEY_CURRENT_USER\Software\Classes\Applications\MYFOO.exe\shell\open\command] 
@="\"C:\\MYFOO.exe\" \"%1\"" 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo] 
"Application"="MYFOO.EXE" 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo\OpenWithList] 
"a"="MYFOO.EXE" 
"MRUList"="a" 

因此,我调查了什么使这些文件关联。看起来您必须创建一个从裸EXE名称到完整路径的映射,如前两个long-ish行所示。然后,您只能在.extension分支中使用EXE名称。设置.extension的应用程序值将立即为您提供默认应用程序。请记住,只能使用APP.EXE,其完整路径必须如上定义。这是你的主要错误。 “%1”部分允许您自定义程序的参数,以便它不必仅仅是引号中的打开文档,如下所示。反斜杠只是Regedit的转义字符,如果您认为合适,您可以丢弃它们。

OpenWithList是有棘手的意义上,有字母的条目,只是盲写可能会覆盖一些用户最喜爱的应用程序。一种方法是打电话给你的项目“z”来降低重写的可能性。正确的方法是列举关键字,并为您的应用程序提供第一封免费信件。 MRUList并不是必不可少的,尽管它每次都应该使用一封信,而且你的信件一开始就碰到了。

有关用户友好性的注意事项:资源管理器将缓存这些值直到下次重新启动。确保您更新注册表并首先放置exe文件,然后再创建文件。虽然缓存只能完全影响文件的显示,并且运行时会再次读取注册表,并会按需要执行。

提示:如果您决定使用Regedit而不是reg,则参数/s将跳过确认消息并立即应用这些值。确保在完整路径中使用双反斜杠,如图所示。在准备您的临时.reg文件时,确保将两个CRLF追加到最后,否则毛刺可能会导致您的最后一行代码被忽略。此示例以REGEDIT4开头,表示ANSI文件。如果您需要在应用程序路径中支持Unicode,则必须使用Windows Registry Editor Version 5.00开始文件并将其存储为UTF16。这已经是调用reg的高级解决方案,因为您无法通过命令行来获取CMD.EXE来处理特殊的UTF内容,而不会发生任何改动。

+0

非常渴望尝试这一点,并打算在第二天或至少在赏金结束之前这样做。谢谢! –

+1

我目前太忙了,无法得到一个完整的确认,但是你的工作激励我找到其他有用的链接(请参阅https://github.com/brettz9/executable-builder/commit/ace744555385b61771fdf98d8d54f8b66611830b#diff-f120a35df9cdfce8a669cfadfaa86f3b ),尤其是OpenWithProgids优先于XP上的OpenWithList,SHChangeNotify和SHCNE_ASSOCCHANGED事件可以导致关联(一个使用VBScript)来避免系统重新启动。非常非常感谢你! –