RT C# winform 怎么样自定义 uri 协议 并且 接收 web 传来的参数呢
相似于 打开 一个网站 使用QQ 交谈 他就会 打开 本地的QQ 进行会话
相似于 打开 一个网站 使用QQ 交谈 他就会 打开 本地的QQ 进行会话
解决方案
200
安装QQ的时候,安装程序同时登记了它的协议。
主要原理是在注册表的HKEY_CLASSROOT下,加入一定的键。
新建一个WinForm的项目,拷入以下代码(namespace要改),就可以直接运行了。
登记时运行需要管理员权限,登记后就’登记代码’就没有用,可以删掉了。
测试一:
Windows开始 – 运行 – 输入 myqq:helloworld 并回车即可看见WinForm程序。
测试二:
在网页代码中插入相似 <a href=”myqq:nihao”>开启myqq</a>链接。在浏览器中点击链接,(安全提示后)可以启动WinForm程序。
主要原理是在注册表的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