FTYPE / ASSOC优先级并从命令行添加到OpenWithList

时间:2014-01-13 01:52:03

标签: windows command-line cmd

(不确定这是否属于超级用户,但似乎这里有一个cmd.exe标记,所以这里......)

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

无论如何,我想让用户选择关联这些快捷方式:

  1. 作为特定文件扩展名或文件类型的默认处理程序。
  2. 在“打开方式”列表中显示(即使用户选择不将应用程序设为默认处理程序)
  3. 就默认处理而言,我找到了ftypeassoc(和associate)命令,但我已经读过用户选择将覆盖它们的行为。有没有办法确保我可以从命令行获取优先级,将文件扩展名与类型和特定可执行文件相关联(直到用户再次更改它),或者如果不可能,那么至少通过C ++等? / p>

    至于打开方式列表:

     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”扩展名的文件时,它没有显示出来。

    对于这两点,我真的很感激。

1 个答案:

答案 0 :(得分: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,其完整路径必须如上定义。这是你的主要错误。 &#34;%1&#34; part允许您自定义程序的参数,这样它就不必只是引号中打开的文档,如下所示。反斜杠只是Regedit的转义字符,您可以根据需要丢弃它们。

OpenWithList在某些意义上是棘手的,因为有条目的字母和盲写可能会覆盖一些用户最喜欢的应用程序。一种方法是打电话给你的项目&#34; z&#34;降低覆盖的概率。正确的方法是枚举密钥并为您的应用程序提供第一封免费信件。 MRUList不是必不可少的,虽然它应该每次都使用一次字母,而你的字母一开始就碰到了。

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

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