设为首页 加入收藏

TOP

利用Pluggable Protocol实现浏览器打开本地应用程序(一)
2017-10-11 18:26:54 】 浏览:4746
Tags:利用 Pluggable Protocol 实现 浏览器 打开 本地 应用程序

引子

  1. 懂HTML网页设计的人:<a href="mailto:liushaofeng89@qq.com">联系我们</a>这样的用法在网页中随处可见,只要通过点击这个超链接,系统默认的就会打开本地的outlook应用程序,并且自动创建新邮件,目标邮件接收人就是这里的liushaofeng89@qq.com;
  2. 会迅雷的人都知道:ed2k://|file|[僵尸先生].Mr.Vampire.1985.REMASTERED.2Audio.D*64.AC3.iNT-ZY.-cd1.mkv|733160187|701476DF**B50E1CE7|/这样的地址;magnet:?xt=urn:btih:88594AAACBDE40EF3E*ent.com%3a80%2fannou*istribution.bbb3d.render*b_sunflower_1080p_30fps_normal.mp4;这些都是迅雷支持的文件格式,当系统的剪贴板存在这些协议URI时,系统就会打开迅雷;
  3. 用过电驴的人都知道:emule://*** 这是电驴所支持的文件协议格式;
  4. 网民所熟悉的:HTTPHTTPS等等。

      以上这些我们最常见的一些标识,你难道就不好奇他们是怎么工作的吗?

背景

  以上这些技术的实现都是依赖于微软操作系统所提供的Pluggable Protocol,Pluggable Protocol又叫URL Protocol,也有Shell命令的叫法,通用的Protocol协议还有ftp,telnet等,这些协议都是Windows操作系统在安装的时候自带的,在系统的注册表中都提供了这些协议的解析。 

  系统支持哪些协议,可以通过查询注册表HKEY_CLASSES_ROOT/PROTOCOL/handler看到。在日常的生活中,要如何灵活的运用自定义Protocol才是最重要的,最典型的有淘宝页面的“与我联系”按钮,点击时,打开阿里旺旺聊天窗口,腾讯QQ也有用到,什么样的场景适合用到这种技术,这里就不多做说明,感兴趣的可以下来自行研究学习。

  通过注册表观察观察一下这些协议都是如何定义的:

  

  

实现步骤

  要实现上述的效果,主要需要以下几个步骤:

  1. 在网页中定义一种协议。当然协议的名称不能与已有的协议名称冲突。例如本次文章中作者将share作为自定义协议名称。
  2. 编写自己逻辑相关的本地程序或脚本。从自定义的URI协议中获取到的数据,需要用来做什么,这里都可以在本地程序中作为参数传入,然后需要实现什么业务都可以自行编写。
  3. 将协议与本地的程序或脚本相关联。通过注册表配置将本地的程序或脚本与网页或其他方式触发的URI数据绑定映射起来,这样只要是这个协议下的URL都会出发本地的程序被调用,这样就达到了通过网页来调动本地程序的目的。

DEMO一下: 

   今天就带着大家通过自定义协议,从网页调用本地MS-Office应用程序去打开本地的Office文档(我在桌面上创建了一个PluggableProtocol.pptx文档)。

  1.约定URI格式:share://<word|ppt|excel|visio>?<filepath> share://ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.pptx

  2.通过注册表的关联,最终传入到本地程序的数据就是“share://ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.pptx”,那么如何从这个字符串解析出文件地址,对于本地应用程序来说都是So Easy的是吧。通过上面的注册表我们可以发现,这个地址会被一次性的传给本地程序,中间不能做任何格式化处理或正则处理(探索了四五天没有任何结果,如果大家有实现办法,请给我留言,谢谢)。而word程序的调用是如下格式:“start winword <localfilepath|remotefileptah>”,因此这里是需要一个中介,实现URL地址到文件路径的解析转换,然后再把真实的文件路径传给word程序,这里我选择bat脚本来实现。

  接下来我们开始编写bat脚本(脚本放在桌面C:\Users\liushaofeng\Desktop\share.bat):  

ECHO OFF

REM 接收URI地址(share://ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.pptx)
SET PROTOCOL_ADDRESS=%1

REM 接收到文件类型和文件地址(ppt?C:\Users\liushaofeng\Desktop\PluggableProtocol.pptx)
SET FILE_TYPE_PATH=%PROTOCOL_ADDRESS:~8%

REM 文件类型为ppt时,截取文件路径,并传递给word
IF %FILE_TYPE_PATH:~0,3%==ppt (
    REM 启动本地word程序,并传入文件路径地址
    ECHO %FILE_TYPE_PATH:~4%
    start powerpnt %FILE_TYPE_PATH:~4%
)

REM 其他文件类型,可以模仿着往下写

EXIT

   3.关联脚本与自定义协议。

    a.打开注册表:WIN+R,运行下输入regedit,回车。

     

    b.找到HKEY_CLASSES_ROOT,在其上面右键新建项,命名为你需要设置的协议名称,我这里设置为share,并且依次创建如图所示的树形结构。并且在share,DefaultIcon,command三项上分别通过右键配置字符串值:

         

 HKEY_CLASSES_ROOT

   share
      URL Protocol = ""

  Under this new key, the URL Protocol string value indicates that this key declares a custom pluggable protocol handler. Without this key, the handler application will not launch. The value should be an empty string.

  Keys should also be added for DefaultIcon and shell. The Default string value of the DefaultIcon key must be the file name to use as an icon for this new URI scheme. The string takes the form "path, iconindex" with a maximum length of

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇创建不死目录、不死文件 下一篇打开Application Data

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目