C# WinForm注册自定义协议

小柊 发表于 2017年02月13日 22时55分32秒

一、前言

自定义协议是什么?这么突然问起来可能不太会有人想起来,但如果给你看以下几个地址,你们应该会马上反应过来:

  • tencent://xxxxxxxxxx……
  • thunder://xxxxxxxxxx……
  • qqdl://xxxxxxxxxx……
  • aliim://xxxxxxxxxx……

 

是的,上面四个地址分别就是QQ、迅雷、QQ旋风、阿里旺旺的自定义协议。

如果我们在网页上单击这些自定义协议的超链接后,对应的客户端就会被唤起,非常的方便。

那我们能不能为自己的.net Framework程序设计并注册一个自定义协议呢?答案当然是可以。

 

二、操作

关于注册自定义协议,微软的MSDN上专门有一篇文章讲述如何操作:《Registering an Application to a URI Scheme》,这篇文章告诉我们,如果需要注册自定义协议,可以通过在注册表指定位置添加键值,MSDN文章中以注册“Alert://”协议为例(下面步骤中项名和值名均不含中文引号):

 

1.在注册表 HKEY_CLASSES_ROOT 基项中新建项,项名为协议名(“Alert://”协议的协议名就是“Alert”);

2.设置协议项的默认值为“URL:协议名 Protocol”;

3.在协议项下新建字符串值,值名称要求为“URL Protocol”;值为

4.(可选)在协议项下新建新子项,名称为“DefaultIcon”,其子项默认值为“响应程序路径,1

5.在协议项下新建子项,子项名为“shell

6.在“shell”项下新建子项,子项名为“open

7.在“open”项下新建子项,子项名为“command

8.修改“command”项默认值为“"响应程序路径" "%1"

 

大功告成。可能看的比较烦或者看不懂,具体可以参考下图:

 

三、代码

总感觉以后应该可能会用,所以直接就做成了一个Helper辅助类,代码如下:

(注意:这里需要操作注册表,Windows Vista平台及以上请注意申请UAC权限

 

 

四、实践

在用户通过鼠标单击超链接或其他操作从而触发了自定义协议后,Windows会自动唤醒响应程序,并将用户单击的协议链接作为启动参数。

启动参数大家都懂,可以在修改Main函数为:

 

 

此时args数组即为程序启动时被赋予的启动参数。

除此以外也可以用

 

 

这个属性和

 

 

这个办法获得。

 

我这里做了一个简单的示范程序,首先我们注册一个“Chunfeng”协议(程序默认将自己作为响应程序):

 

之后我们随便去一个浏览器试试我们的Chunfeng协议有没有生效(一般浏览器为了安全,都会进行二次确认):

 

完美(前面的“1.”是我自己添加的):

 

示范程序源码下载:

链接:http://pan.baidu.com/s/1o7Cdj9g 密码:uzmw

 

五、写在最后

最后的最后,还是要提醒这么一点。在微软MSDN文章里有这么一段:

Security Warning:  Applications that handle URI schemes must consider how to respond to malicious data. Because handler applications can receive data from untrusted sources, the URI and other parameter values passed to the application may contain malicious data that attempts to exploit the handling application.

 

响应程序必须考虑如何处理恶意数据,因为应用程序可以可以从不信任的源接受数据。

 

 

 

 

小柊

2017年2月13日 22:50:59

相关文章

  4 条评论发布于 “C# WinForm注册自定义协议

回复 小柊 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注