利用URL Protocol实现网页调用本地应用程序

来源:互联网 发布:轩辕剑坐骑10进阶数据 编辑:程序博客网 时间:2024/05/16 15:58

由于做项目需要实现如题的一个功能,所以搜寻了相关资料。

下面转载CSDN的一篇文章和百度文库的一篇文章,标记有待后期详细学习。

CSDN博文:http://blog.csdn.net/chinahaerbin/article/details/8783024

百度文库:http://wenku.baidu.com/view/df42b5e1856a561252d36f68.html

自定义URL Protocol 协议

一些应用软件可以在浏览器中点击一个url后自动启动,并执行操作。这是咋实现的呢?
我在 google了许多也找个博客说明。接照这些文档我也新手试了一下。

通过网站调用可执行程序,主要是修改注册表,注册 URL Protocol 协议。

第一步:按照如下图所示建立注册表

其中 在注册表的 [HKEY_CLASSES_ROOT] 主键下 建立[qiaoker]建。
[qiaoker] 此键可以自定义任意。

第二步:注册表中建立相关键值对。

 

 

注意到上面 command 项的值为 C:\Program Files (x86)\Qiaoker\updater.exe "%1" ,这个"%1"是传递给 updater.exe的参数。
使用时我们会在后面讲到如何使。

 

第三步:编写测试页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
    <body>
        <div>
            <a href="qiaoker://cid:110&username:xxh">
            执行可执行文件
            </a>
        </div>
    </body>
</html>

说明:QiaokerProtocol: 是注册表中注册的协议名称。
   cid:110&username:xxh 是传入可执行程序的参数。
   程序收到参数据自已去解析字符串中的相关信息。

其它说明:
 我是用 Inno Setup IDE 生成的注册表, 在程序安装时写入注册表,卸载时删除相关注册表信息。
 Inno Setup 写入注册表的代码如下:
 [Registry]
Root: HKCR; SubKey: QiaokerProtocol; ValueData: "Qiaoker Protocol"; ValueType: string; Flags: CreateValueIfDoesntExist UninsDeleteKey;
Root: HKCR; SubKey: QiaokerProtocol; ValueName: "URL Qiaoker Protocol"; Flags: CreateValueIfDoesntExist; ValueType: string;
Root: HKCR; SubKey: QiaokerProtocol\DefaultIcon; ValueData: E:\Client1VNSkia2\bin\debug\updater.exe; Flags: CreateValueIfDoesntExist; ValueType: string;
Root: HKCR; SubKey: QiaokerProtocol\shell\open\command; ValueData: "E:\Client1VNSkia2\bin\debug\updater.exe ""%1"""; Flags: CreateValueIfDoesntExist; ValueType: string;

动手实现

1)自动进行reg注册表注册

下面自己利用VS2008编写一个控制台程序,输出hello world字符串,进行实际测试。

此处参考百度文库中的说明,利用记事本直接构造一个reg文件,实现上述自动注册的功能:

################################添加自定义URL Protocol##################################
#####################################################################################
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Webshell]
"URL Protocol"="D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe"
@="WebshellProtocol"
[HKEY_CLASSES_ROOT\Webshell\DefaultIcon]
@="D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe,1"
[HKEY_CLASSES_ROOT\Webshell\shell]
[HKEY_CLASSES_ROOT\Webshell\shell\open]
[HKEY_CLASSES_ROOT\Webshell\shell\open\command]
@="\"D:\\Documents\\Visual Studio 2008\\Projects\\zs_test_sln\\Release\\webshell2.exe\" \"%1\""
#####################################################################################
在#内的为自定义URL Protocol的注册表信息,对每一行说明一下:

第一行是注册表工具的版本信息,可以自己改一改,或者自己导入任意一个注册信息,把这一行复制过来就行了;

第二行中的Simu就是在HKEY_CLASSES_ROOT下面添加一个Simu树,其中Simu的名称就对应着自定义URL Protocol的名称,在web中调用的时候需要这个名称;

第三行中的"x:\\simu\\Simulink.exe"是指定应用程序的路径,注意只能是exe的程序;

第四行是协议的名称,可以是任意字符串,后面不会用到;

第五行表示在Simu中再加一个分支,照抄,不用管;

第六行中的x:\\simu\\Simulink.exe也是对应的程序路径,后面的1照抄;

第七行同第五行;第八行同第五行;第九行同第五行;

第十行也是将路径换成自己的程序路径即可,其中%1表示到参数,参数可以在你的程序simulink.exe中解析得到。
将#之间的内容复制到一个txt文档中,修改后缀名为.reg,双击该文件即可直接导入到注册表中。如下图:


2)生成exe控制台程序

webshell2.exe是利用VS2008建立的win32 控制台程序,源代码如下:

[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. // webshell2.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <Windows.h>  
  6.   
  7. int _tmain(int argc, _TCHAR* argv[])  
  8. {  
  9.     if(argc<2)  
  10.     {  
  11.         printf("zssure hello\n");  
  12.         Sleep(1000*10);  
  13.     }  
  14.     else  
  15.         printf("%s\n",argv[1]);  
  16.     Sleep(1000*10);  
  17.     return 0;  
  18. }  

只是输出zssure hello字符串,但是因为控制台窗口会一闪而过,所以添加了Sleep语句,目的是为了能够让大家看到浏览器实实在在调用了控制台程序,实际运行过程中可以注释掉Sleep语句。

3)构造网页测试代码

然后构造一个最简单的测试页面进行调用测试,测试页面代码仅为一行,如下:

[html] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. <html>  
  2. <a href="Webshell:hello">Wheshell</a>  
  3. </html>  
实际运行的演示效果如下所示:


作者:  zssure

时间:  20140514

E-mail: zssure@163.com

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 毕业证照片丢了怎么办 离线网盘有违规内容怎么办 手机不能向下拉怎么办 cad运行不了插件怎么办 ai中缺少文字怎么办 电脑被格式化了怎么办 迷你世界地图下载失败怎么办 网页上广告太多怎么办 网页打开广告太多怎么办 PS界面图标小怎么办 百度地图反应慢怎么办 汽车导航不播报怎么办 wps菜单栏隐藏了怎么办 手机导航声音小怎么办 手机导航不好用怎么办 手机导航箭头不准怎么办 手机处于离线状态怎么办 穷人让人看不起怎么办 非洲人口过多怎么办啊 鼻子上长白头怎么办 高铁查到违禁品怎么办 青岛涂料备案证怎么办 淘宝集运不能寄怎么办 防静电指数过高怎么办 手机玻璃上裂痕怎么办 车辆环保检测不合格怎么办 眼镜被擦破镜片怎么办 手机边框有刮痕怎么办 手机金属壳磨损怎么办 手机后面凹下去怎么办 pu鞋子有刮痕怎么办 漆皮皮鞋有刮痕怎么办 手机有屏幕刮痕怎么办 鞋子刮花了怎么办 手机上屏幕划痕怎么办 篮球鞋磨小脚趾怎么办 小白鞋边上蹭黑怎么办 行李忘在高铁上怎么办 新加坡东西掉了怎么办 怕空调怕风吹怎么办 夏天不能吹空调怎么办