想必大家都知道浏览器可以唤起QQ客户端对话,那么它是怎么实现的呢?向Windows注册私有协议以便浏览器url启动程序一文来揭开它的神秘面纱,如果你的程序想要使用网页启动,或者想要使用URL传递参数,可以考虑使用这种办法。
大家电脑应该都装有QQ程序吧,使用浏览器访问如下地址,可以看到浏览器打开了QQ对话框。
tencent://message/?uin=88888&Menu=yes
实现过程是向Windows注册表注册动作,新建一个文本文件,写上如下代码,保存为reg后缀文件,然后双击运行向注册表写入规则。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\daimadog] @="URL:daimadog Protocol Handler" "URL Protocol"="" [HKEY_CLASSES_ROOT\daimadog\shell] [HKEY_CLASSES_ROOT\daimadog\shell\open] [HKEY_CLASSES_ROOT\daimadog\shell\open\command] @="E:\\vs project\\dailogtest\\dailogtest\\dailogtest\\bin\\Debug\\dailogtest.exe \"%1\""
需要注意的是daimadog
是我的命令名称,相当于tencent
这个命令,E:\\vs project\\dailogtest\\dailogtest\\dailogtest\\bin\\Debug\\dailogtest.exe
是url链接命令由哪个程序来执行,这里我写了一个简单的Windows桌面程序。
桌面程序使用C#,代码如下:
修改Program.cs文件
static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); if (args.Length == 0) { Application.Run(new Form1()); } else { Application.Run(new Form1(args)); } } }
这里只是给默认生成的Main函数增加一个输入参数,args,并根据args参数是否为空,选择不同的窗口构造函数执行。
新增Form1.cs的构造函数,默认不带参数,新增一个带参数的。
//新建一个变量存放参数 string[] args = null; //默认的无参数构造函数 public Form1() { InitializeComponent(); } //新增的有参数构造函数 public Form1(string[] args) { InitializeComponent(); this.args = args; }
由于这里我先试了下,命令行传参,所以使用的数组,使用浏览器的话直接使用字符串就可以了。
然后在窗体加载完毕后处理下参数,这里为了让大家看到,我直接显示在lable标签中。
private void Form1_Load(object sender, EventArgs e) { if (args!=null) { String str = ""; string[] arr = args[0].Split('?'); string[] parm = arr[1].Split('&'); for (int i = 0; i < parm.Length; i++) { string[] parm1 = parm[i].Split('='); str = str + parm1[0] + ":" + parm1[1] + "\r\n"; } label1.Text = str; } }
代码是解析浏览器传递过来的数据,逻辑自己写下就可以了,不必照抄。
在浏览器中输入如下地址,测试下效果:
daimadog://XXX?id=123&value=test
其中XXX随便填写什么,我在C#程序中并没有验证这个。?后面就是参数了,想必大家都知道get传参。
第一次启动,浏览器会询问你是否同意使用应用处理,点击打开就可以了,效果如下。
评论 (1)