自定义浏览器协议,实现web页面调用本地程序

自定义浏览器协议,实现web页面调用本地程序

    工作中遇到这样一种需求,就是在web页面上面点击一个按钮或者链接,能够调取本地的exe程序,并且能够给exe程序传递参数。这个功能开始是通过ActiveX插件实现的,这种只能在IE浏览器上面使用,还要设置很多浏览器选项。用户体验很差。

    后来参考QQ或者mailto的方式,通过自定义浏览器协议,解决了浏览器的兼容性问题。说一下实现步骤。

1、定义一个本地待调用程序local.exe,这个程序会接受浏览器的调用,并接受浏览器传过来的参数。

  ★ 如果本地程序只有这一个,则直接调用起来即可。

  ★ 果本地程序有多个,可以使用这个程序调用起来其他程序(比如使用win32中的ShellExecuteEx调用)。

2、定义本地程序的安装程序installer.exe,这个安装程序可以通过web页面下载下来,然后点击安装(就像安装QQ.exe)。

安装程序会做以下几件事:

  <1>、将local.exe安装到某个目录下面,比如C:\Program Files\local.exe

  <2>、在HKEY_CLASSES_ROOT下面添加一项。注册表项的名字是自己定义的,比如叫做myLocal,这个名字会在web页面上面使用。规则如下图:

 自定义浏览器协议,实现web页面调用本地程序_第1张图片

 

3、web页面调用的时候,需要使用myLocal标签。

  ★假如本地只有这一个程序,可以使用myLocal://arg=xxxx

  ★假如本地有多个程序,可以使用myLocal://type=xxx&arg=xxx

local.exe程序会在程序开头读取命令行参数,并进行解析。

 

4、对于命令行参数不止一个的情况,可以将所有的参数使用base64编码,拼成一个字符串。然后local.exe接受之后,再进行解码即可。

 

这样就实现了web页面调用本地exe程序的功能。

你可能感兴趣的:(问题解决)