一、需求来源
1.比如我想在右键单击后缀为.abc的文件时,open with那个列表里面能选择我的app。
2.本来存在某个应用已经关联该类型的文件,现需要修改成以我的应用为优先级的关联设置。
二、分析文件关联原理
1.Windows: Windows系统很早就加入了文件关联的功能,它大大增加了日常使用操作系统的便利性。所谓的文件关联就是指系统把指定扩展名的文件自动关联到相应的应用程序,比如.doc文件默认情况下就自动和Microsoft Word关联。当用户双击.doc文件的时候,系统会自动用Microsoft Word打开它。这篇文章将介绍怎样在Windows系统下面手动设置或者用程序自动设置文件关联。
2.Mac OSX:在文件关联和右键菜单方面,每当系统安装一个新的应用程序,都会调用 Launch Service 的 API 注册关联的文件类型。有两种情况,一种是通过 pkg 安装包安装的,通常这些应用程序会通过脚本主动向 Launch Service 注册;而第二种常见的拖拽式 .app 应用程序,则是由 Finder 和系统通过对应用程序的的一些判断后代理注册的。应用程序通过 Launch Service 注册以后,就和特定的支持文档产生了关联。
三、解决办法:
1.Windows:HKEY_LOCAL_MACHINE\Software\Classes:该注册表项包括适用所有用户的默认文件关联设置;HKEY_CURRENT_USER\Software\Classes:该注册表项包含只适用当前用户的文件关联设置;除上面两个注册表项和文件关联相关外,还有另外一个非常重要的注册表项:HKEY_CLASSES_ROOT;该注册表项目里面的设置是保证Windows浏览器能够选择正确的应用程序打开相应文件的关键所在。在Windows 2000之后,该注册表项目中的文件关联设置分别存在上面所说的两个注册表项中去了。而HKEY_CLASS_ROOT 注册表项则成为融合(注意,对于相关的文件类型,HKEY_CURRENT_USER下面的设置会覆盖HKEY_LOCAL_MACHINE下面的设置)上面两个注册表项内容的一个镜像。为了更新文件关联设置,你必须更新"HKEY_CURRENT_USER\Software\Classess"或者"HKEY_LOCAL_MACHINE\Software\Classess"下的注册表项,而不是直接更新HKEY_CLASS_ROOT下的注册表项;Windows 通过代码则要修改register, 方法就比较简单了, 大家可以在网上找到答案.但是可能涉及到权限问题,某些杀毒软件会提示警告信息,不以理会即可,或者干脆卸载之。具体参考 http://www.cnblogs.com/xuguilin/archive/2011/01/09/1931169.html。
2.Mac OSX:每个mac app都有一个Info.plist文件,可以在该文件适当的地方加入
Launch Service 隶属于 Application Service Framework (包含一堆的应用程序接口,开发者可以通过这些接口,调用系统服务),用于使一个运行中的程序,能够打开另一个程序,文档,URL的接口。它可以打开另一个程序;在另一个程序中打开文档或URL;找到对于一个文档或URL最适用的程序;为一个应用程序注册它可以关联的文档类型和URL;获得一个文件,URL等正确的显示方式,比如如何显示此类文件的图标以及信息等;维护和更新最近试用过的最近试用程序和文档的列表。
由于mac 文件关联比较复杂,如何是基于Qt开发的应用要想设置文件关联可能需要花费一番功夫。具体信息参考:http://maoa.cn/?sort=45