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