[转]Windows 注册自定义的协议

摘要:
新注册的密钥必须与协议方案匹配,才能添加。在此新密钥下,默认字符串值将显示新协议的名称,URL协议字符串值将包含协议特定信息或空字符串。DDEEXECkeys之后的命令和值都用于调用处理新协议的应用程序。

[转自] http://blog.sina.com.cn/s/blog_86e4a51c01010nik.html

1、注册应用程序来处理自定义协议

         你必须添加一个新的key以及相关的value到HKEY_CLASSES_ROOT中,来使应用程序可以处理特殊的URL协议。

         新注册的key必须与协议scheme相匹配才可以被添加。例如,增加一个“alert:”协议,被增加到HKEY_CLASSES_ROOT的key必须是alert。在这个新的key之下,默认的字符串value将显示新协议的名字,并且URL协议字符串value将包含协议特有的信息或者空字符串。Keys将同样被添加到DefaultIcon和shell中。

         默认的DefaultIcon key的字符串value必须是新URL协议图标文件名的路径。

         在shell key之下,一个key使用一个动词(就像open)将被添加。一个command(命令) key和一个DDEEXEC(动态数据交换执行) key都是使用动词来添加的。这command和DDEEXEC keys之后的values都是用来调用(或者启动)处理新协议的应用程序。

2、启动处理程序

         当一个用户点击一个注册了你的自定义URL协议的链接后,Windows Internet Explorer(IE)启动注册的URL协议的处理器。如果指定shellopen命令在注册表中包含一个%1参数的话,Internet Explorer传递这个URI给注册协议的处理器。这最后的统一资源标识符(URI)被编码(%1);即16进制换码符被转换为等价的UTF-16字符。例如,用%20字符串取代空格。

         安全警示:应用程序处理URL协议必须全力面对恶意数据。因为处理程序接收来自不信任源的数据,URL和其它参数值传递给应用程序可能包含的恶意数据企图使用处理程序。因此,处理程序可以首先启动基于外部数据的空闲行为确认这些行为以及它们的用户。

3、示例

         接下来的例子演示如何注册alert.exe应用程序,来处理alert协议。

         引用内容

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOTalert]

@="URL:Alert Protocol"

"URL Protocol"="C:Program FilesAlertalert.exe"

[HKEY_CLASSES_ROOTalertDefaultIcon]

@="C:Program FilesAlertalert.exe,1"

[HKEY_CLASSES_ROOTalertshell]

[HKEY_CLASSES_ROOTalertshellopen]

[HKEY_CLASSES_ROOTalertshellopencommand]

@="C:Program FilesAlertalert.exe" "%1"

         增加这些设置信息到注册表,尝试导航到像“alert:Hello%20World”这样的URLs中,将会尝试启动alert.exe程序并且在命令行中传递“Hello World”。

4、协议处理实例

         下面的代码包含了一个简单的C#控制台应用程序演示了一种实现alert协议处理程序的方式:复制内容到剪贴板 程序代码

using System;

using System.Collections.Generic;

using System.Text;

namespace Alert1

{

  class Program

  {

    static string ProcessInput(string s)

    {

       // TODO Verify and validate the input 

       // string as appropriate for your application.

       return s;

    }

    static void Main(string[] args)

    {

      Console.WriteLine("Alert.exe invoked with the following parameters. ");

      Console.WriteLine("Raw command-line: " + Environment.CommandLine);

      Console.WriteLine(" Arguments: ");

      foreach (string s in args)

      {

        Console.WriteLine(" " + ProcessInput(s));

      }

      Console.WriteLine(" Press any key to continue...");

      Console.ReadKey();

    }

  }

}

免责声明:文章转载自《[转]Windows 注册自定义的协议》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇特来电CMDB应用实践『GoLang』反射下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在css使用自定义字体

在css文件中通过@font-face自定义字体,src 为字体文件的相对路径。 @font-face { font-family: "LED";//为字体取名字 src: url("fonts/HD_UnidreamLED.ttf") format('truetype');//字体文件 } //在样式中使用该字体 .led { font-size:50...

ThingJS官方示例教程(二)

上一节我们说到了如何在ThingJS中上传我们的图片、js、css资源,同时也详细说明如何去使用这些资源,在拥有了JavaScript基础、同样也了解到如何去使用上传到ThingJS的资源的情况下,我们就可以开始通过ThingJS在线开发平台制作我们的第一个“HelloWorld”项目了。 ThingJS项目初制作 在ThingJS中,最重要的就是我们的A...

iOS UIAlertView添加输入框

这玩意有时不用就忘,还是记录一下吧 添加: UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"新建文件夹" message:@"" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; [a...

drf之框架基础

(一)drf基础 全称:django-rest framework 接口:什么是接口、restful接口规范(协议) CBV(基于FBV的基础上形成)、CBV生命周期源码----基于restful规范下的CBV接口 请求生命周期:请求组件、解析组件、响应组件 序列化组件(序列化、反序列化简单来说就是对象转为字符串、字符串转为对象,目的是为传输数据(传给别的...

JavaScript初学指南

目录: 包含与引入(Embedding,including) write 和 writeln 文档对象(document object) bgColor 和 fgColor 消息框(Message Box) 变量(Variables)和条件(Conditions) 函数(Function) onClick onLoad onUnload 表单(Form)...

一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL

一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL 介绍   不知道大家在使用 ASP.NET MVC 时有没有一些扩展要求,反正我是有很多。在使用 MVC 这几年(PS:我是从 1.0 开始学,2.0、3.0 开发至今),我深深地觉得 MVC 的扩展性真是太好了,几乎你大部分的“合理”需求,用 MVC 都能实现。好了,废话不多...