类似问题:实现一个类似迅雷下载的功能,用户点击下载链接,如果用户未安装迅雷,则弹出迅雷安装对话框,已经安装迅雷,则要求启动迅雷,并下载用户想要的种子。

核心实现:最近开发客户端程序,被要求实现一个自定义的IE地址栏协议,目的是为了通过在IE地址栏中输入一串符合规则的命令,可以达到和客户端程序通信的效果。自己思索良久,并在网上查阅相关资料,发现皆是拷贝,而且内容表述很乱,所以想在这里写一篇随笔,以备其他童鞋查阅用,如有异议随便拍砖~~哈哈

我这里实现的功能,主要是为了以后方便用户通过邮件,IE地址连接等方式可以方便的与客户端程序进行通信。

要实现IE自定义地址协议,首先应该要在注册表里将协议定义好。如下:

找到注册表里面的HKEY_CLASSES_ROOT项,在里面新建一个 项,我这里取名iDesk,这个项,就是协议的入口,接下来上图:

按照上图格式建项,其中command中数据的值是启动程序入口地址, 这点很重要,这个是你要与之通信的那个程序的安装地址,那么下面我来贴上实现上述功能的代码:

        /// <summary>
        /// 创建注册表值
        /// </summary>
        /// <param name="value">程序路径</param>
        public static void CreateRegeStartKey(string value)
        {
            try
            {
                RegistryKey key = Registry.ClassesRoot;
                RegistryKey iDesk = key.CreateSubKey("iDesk");
                iDesk.SetValue("", "Url protocol");
                iDesk.SetValue("Url protocol", value);
                RegistryKey DefaultIcon = key.CreateSubKey("iDesk\\DefaultIcon");
                DefaultIcon.SetValue("", value + ",0");
                RegistryKey command = key.CreateSubKey("iDesk\\shell\\open\\command");
                command.SetValue("", string.Format("\"{0}\",\"%1\"", value));
            }
            catch (Exception ex)
            {
                ExceptionHandler.CreateExceptionLog(ex);
            }
        }

有了注册表的这些项,那么下面与客户端程序通信就比较容易了,这些项要你在安装客户端的时候写进注册表的,你要是不想360弹出阻止窗口的话,最好给应用程序签一下名。

我们在IE地址栏中输入iDesk://www.baidu.com ,这个时候IE浏览器将会寻找你在上面所设置的应用程序地址,并给应用程序传去消息,消息格式为:“,iDesk://www.baidu.com”,引号里面的内容是消息内容,当然,如果安全性较高的话,你可以给消息加密。

那么客户端如何接收消息呢,我想这个就比较简单了,这个要从入口函数的数组里面找,即从static void Main(string[] args)的args[]数组里面取,取出来将协议解析一下,任务就OK了。

结束语:实现上面的功能这样看其实很简单,当然还有很多后续的工作等待我们去处理,但是把复杂的问题细化之后,然后各个击破,其实问题也就变得简单了。就像开头的问题一样,去实现一个迅雷下载功能类似,用户打开网址想要下载一个东西,点击链接地址,这个时候用户如果未安装迅雷,浏览器将会弹出迅雷下载的窗口,让用户下载迅雷(一个activeX控件实现,判断用户有无安装迅雷),否则通过协议打开迅雷,并给迅雷程序传去下载种子的链接地址,等待用户点击确定下载。读懂这篇随笔之后,实现这个功能,岂不是很简单!

转载于:https://www.cnblogs.com/yangtongnet/archive/2011/07/05/2098372.html

IE浏览器—自定义地址协议详解(非转载)相关推荐

  1. Http协议 详解(转载)

    http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分 ...

  2. modbus通讯协议详解(转载)

    转载自:https://www.cnblogs.com/The-explosion/p/11512677.html modbus通讯协议详解 1.Modbus 协议简介  Modbus协议是一种已广泛 ...

  3. RTSP协议详解(转载)

    流媒体传输协议介绍 一.RTSP协议介绍 什么是rtsp? RTSP协议以客户服务器方式工作,,如:暂停/继续.后退.前进等.它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进 ...

  4. PPP协议详解(转载)

    https://mp.weixin.qq.com/s/edFWizQAJVmJkka6W5pJ2A 这篇文章很不错,记录一下链接.

  5. HTTP协议详解(转载)

    http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html 转载于:https://www.cnblogs.com/youmei11 ...

  6. 通俗易懂的USB协议详解(转…

    原文地址:通俗易懂的USB协议详解(转载) 作者: Branchesss 转自东海的博客http://6xudonghai.blog.163.com/blog/static/3364062920086 ...

  7. 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)...

    [转]ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证) ASP.NET验证控件详解 现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服 ...

  8. IoT:MQTT协议详解

    IoT -- (七)MQTT协议详解 转自:https://blog.csdn.net/anxianfeng55555/article/details/80908795 MQTT是什么? MQTT(M ...

  9. HTTP协议详解(转)

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  10. WebSocket协议详解及应用

    标签:websocket WebSocket协议详解及应用(七)-WebSocket协议关闭帧 本篇介绍WebSocket协议的关闭帧,包括客户端及服务器如何发送并处理关闭帧.关闭帧错误码及错误处理方 ...

最新文章

  1. git查看各个branch之间的关系图
  2. mapreduce程序输出评分8.6分以上的书名和评分_如何选编程入门资料?光评分高怎么够|文末赠书...
  3. portal开发下拉框“日期框”查询要怎么配置
  4. python中常见的运行时错误_17个常见的Python运行时错误
  5. VTK:vtkActor2D用法实战
  6. Qt Creator使用自定义着色器
  7. 【转载】请问Silverlight 获取客户端网卡mac码
  8. 分布式系统session一致性的问题
  9. 吐血整理:C#顺序、选择、循环结构用法与案例,这一篇就够了!
  10. CSDN《某一程序员竟然吃过shi?让我们走进他的生活,揭露背后的故事》
  11. 05.MyBtais两种取值符号以及输入参数和输出参数
  12. redis的HyperLogLog与布隆过滤器
  13. iPhone 7疯狂生产 苹果提升在印度存在感
  14. Linux-Shell脚本编程-学习-4-Shell编程-操作数字-加减乘除计算
  15. 通过iMazing将Safari浏览器的书签导出至电脑
  16. 微信小程序需要的软件下载
  17. define is not defined解决办法
  18. Windows XP怎样实现自动登录而无需输入密码
  19. 苹果app的几种发布方式
  20. java项目进度跟踪管理系统

热门文章

  1. 基于 C#遥感图像处理方法(代码实现)
  2. c语言什么类型的编程,编程有哪些数据类型?
  3. Docker与容器化-03-使用Dockerfile创建镜像
  4. SSH项目搭建-03-DAO层,Controller层创建及代码抽取
  5. android wifi操作,热点创建
  6. 昨晚家里停网后,我动了邪念用Python破解了隔壁小姐姐的wifi密码
  7. ios 点击出现另外一套tabbar_iOS 点击UITabBar触发刷新
  8. 计算机应用超期,电脑程序数字签名过期怎么办
  9. oracle goldengate 触发器,Oracle goldengate的触发器错误 OGG-00869
  10. 2021谷饶中学高考成绩查询,2020汕头地理生物中考成绩查询入口