C# 自定义 web 的uri 协议 并接收参数

.Net技术 码拜 9年前 (2016-05-25) 2397次浏览
RT C# winform  怎么样自定义 uri 协议 并且 接收 web 传来的参数呢
相似于  打开 一个网站  使用QQ 交谈 他就会 打开 本地的QQ  进行会话
解决方案

200

安装QQ的时候,安装程序同时登记了它的协议。
主要原理是在注册表的HKEY_CLASSROOT下,加入一定的键。
新建一个WinForm的项目,拷入以下代码(namespace要改),就可以直接运行了。
登记时运行需要管理员权限,登记后就’登记代码’就没有用,可以删掉了。
测试一:
Windows开始 – 运行 – 输入 myqq:helloworld 并回车即可看见WinForm程序。
测试二:
在网页代码中插入相似 <a href=”myqq:nihao”>开启myqq</a>链接。在浏览器中点击链接,(安全提示后)可以启动WinForm程序。

using Microsoft.Win32;
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Text = Environment.CommandLine.Split(" ").Last();
            Load += delegate
            {
                try
                {
                    RegisterUriScheme("myqq", this.GetType().Assembly.Location);
                }
                catch (Exception e)
                {
                    MessageBox.Show("需要管理员权限。myqq协议注册错误:" + e.Message);
                }
            };
        }
        public static void RegisterUriScheme(string scheme, string applicationPath)
        {
            string filename = Path.GetFileName(applicationPath);
            using (var schemeKey = Registry.ClassesRoot.CreateSubKey(scheme, writable: true))
            {
                schemeKey.SetValue("", "URL:myqq Protocol");
                schemeKey.SetValue("URL Protocol", "");
                using (var defaultIconKey = schemeKey.CreateSubKey("DefaultIcon"))
                {
                    defaultIconKey.SetValue("", filename + ",1");
                }
                using (var shellKey = schemeKey.CreateSubKey("shell"))
                using (var openKey = shellKey.CreateSubKey("open"))
                using (var commandKey = openKey.CreateSubKey("command"))
                {
                    commandKey.SetValue("", string.Format(""{0}" "%1"", applicationPath));
                }
            }
        }
    }
}

具体的请原理参考:
Registering an Application to a URI Scheme
https://msdn.microsoft.com/zh-cn/library/aa767914(v=vs.85).aspx


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# 自定义 web 的uri 协议 并接收参数
喜欢 (0)
[1034331897@qq.com]
分享 (0)