如何通过代码设置文件关联功能(Mac OSX 和Win)

来源:互联网 发布:大连生态科技城 知乎 编辑:程序博客网 时间:2024/06/16 00:40
一、需求来源
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文件,可以在该文件适当的地方加入
  1. <key>CFBundleDocumentTypes</key>
  2. <array>
  3. <dict> 
  4. <key>CFBundleTypeExtensions</key>
  5. <array>
  6. <string>abc</string> 
  7. </array>
  8. <key>CFBundleTypeIconFile</key> 
  9. <string>abc.png</string> 
  10.  <key>CFBundleTypeName</key> 
  11. <string>abc file</string> 
  12. <key>CFBundleTypeRole</key>
  13. <string>Editor</string>
  14. <key>LSTypeIsPackage</key>
  15. <true/>
  16. <key>NSPersistentStoreTypeKey</key>
  17. <string>XML</string>
  18. </dict>
  19. </array>
   Launch Service 隶属于 Application Service Framework (包含一堆的应用程序接口,开发者可以通过这些接口,调用系统服务),用于使一个运行中的程序,能够打开另一个程序,文档,URL的接口。它可以打开另一个程序;在另一个程序中打开文档或URL;找到对于一个文档或URL最适用的程序;为一个应用程序注册它可以关联的文档类型和URL;获得一个文件,URL等正确的显示方式,比如如何显示此类文件的图标以及信息等;维护和更新最近试用过的最近试用程序和文档的列表。
  由于mac 文件关联比较复杂,如何是基于Qt开发的应用要想设置文件关联可能需要花费一番功夫。具体信息参考:http://maoa.cn/?sort=45 
 
 
 
 
 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 相机拍照后找不到拍的照片怎么办 苹果手机下载软件不被信任怎么办 苹果x手机下载软件不受信任怎么办 华为畅享7plus主板坏了怎么办 华为手机手机主板坏了没备份怎么办 华为手机一年内主板坏了怎么办 华为手机保修期内主板坏了怎么办 华为手机外置sd卡满了怎么办 红米4充不进去电怎么办 苹果5s锁屏密码忘记了怎么办 华为手机桌面和锁屏自动一样怎么办 苹果手机没电了没带充电器怎么办 华为p8手机后摄像头模糊的怎么办 中兴手机充电的地方坏了怎么办? 小米手机与电脑蓝牙传输失败怎么办 捡个华为收机没有账号密码怎么办 华为手机p9激活码忘了怎么办 华为畅享7plus声音小怎么办 华为畅享7plus忘记密码怎么办 华为畅享8plus卡顿怎么办 华为畅享7plus卡机怎么办 华为畅享8plus图标字小怎么办 华为畅享6反应慢发热怎么办 华为畅享5S反应迟钝怎么办 华为畅玩5x玩王者荣耀卡怎么办 不小心把手机里的照片删了怎么办 u盘文件在手机上删了怎么办 荒野行动透视挂功能加载失败怎么办 白色t桖衫被奶茶弄脏了该怎么办 游戏文件不小心解压到c盘了怎么办 装系统时c盘0mb怎么办 电脑设置的开机密码忘了怎么办 电脑开机密码忘了怎么办xp系统 我的电脑在开机时忘了密码怎么办? xp桌面我的电脑图标不见了怎么办 游戏全屏时卡了无法退到界面怎么办 u盘插电脑上提示有病毒怎么办 三星手机文件怎么删除不掉怎么办 用夜神模拟器玩第五人格太卡怎么办 雷电模拟器玩刺激战场太卡了怎么办 绝地求生刺激战场模拟器太卡怎么办