zoukankan      html  css  js  c++  java
  • C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序

    本教程适用于Windows系统

    从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表

    先建立一个项目,我建的是控制台项目

    在Program.cs写2个静态方法用来添加注册表、移除注册表(用浏览器打开程序主要就是靠这两个方法)

            /// <summary>
            /// 注册启动项到注册表
            /// </summary>
            public static void Reg()
            {
                //注册的协议头,即在地址栏中的路径 如QQ的:tencent://xxxxx/xxx 我注册的是jun 在地址栏中输入:jun:// 就能打开本程序
                var surekamKey = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("jun");
                //以下这些参数都是固定的,不需要更改,直接复制过去 
                var shellKey = surekamKey.CreateSubKey("shell");
                var openKey = shellKey.CreateSubKey("open");
                var commandKey = openKey.CreateSubKey("command");
                surekamKey.SetValue("URL Protocol", "");
                //这里可执行文件取当前程序全路径,可根据需要修改
                var exePath = Process.GetCurrentProcess().MainModule.FileName;
                commandKey.SetValue("", """ + exePath + """ + " "%1"");
            }
      /// <summary>
            /// 取消注册
            /// </summary>
            public static void UnReg()
            {
                //直接删除节点
                Microsoft.Win32.Registry.ClassesRoot.DeleteSubKeyTree("jun");
            }

    然后再Main方法里加入一些逻辑来调用这两个方法

     static void Main(string[] args)
            {
                Console.WriteLine("输入: 1注册协议  2卸载协议");
                if (Console.ReadLine() == "1")
                    Reg();
                else
                    UnReg();
            }

    然后编译,调试一下,运行程序输入1,敲回车,程序秒退,这说明已经成功了,先进入注册表看看有没有添加成功

    打开注册表(运行:regedit):HKEY_CLASSES_ROOTjun

    可以看到注册表项已经添加成功,接下来就测试一下能否正常使用:

    如果你注册的协议是jun的话,点这里就可以打开你的程序了

    否则那就在浏览器地址栏中输入:协议名://  如: jun:// 敲回车即可(很多浏览器不能直接输入,要用a标签跳转,IE是可以直接输入的,建议使用IE测试)

    从浏览器打开程序已经实现了,那么参数呢,如何传参,其实也蛮简单的,接下来我们在Main方法里取到参数(通过args):

    将Main方法改为:

     static void Main(string[] args)
            {
                if (args.Length > 0)
                {
                    Console.WriteLine(args[0]);
                }
                Console.WriteLine("输入: 1注册协议  2卸载协议");
                if (Console.ReadLine() == "1")
                    Reg();
                else
                    UnReg();
            }

    编译后再浏览器输入:协议名://hello,world

    如果你注册的协议是jun的话,点这里就可以打开你的程序了

    结果如下图:

    以上就是获取的参数,可以通过拆分字符串得到想到的结果

    卸载我们就不测试了,方法已提供,直接删除注册表就行

    源码下载

    致读者:感谢你阅读本文,请随手点击右下角的推荐或分享,谢谢!
  • 相关阅读:
    2016计算机专业考研:c++大学教程第二版目录(下)
    2016考研计算机考研备考书籍推荐
    2014年计算机考研真题重点选择题部分真题及解析
    2016计算机考研:数据结构常用算法精析
    2015考研计算机专业基础综合试题真题及答案(1)
    java串讲之String 如何定义字符串对象
    WindowsService
    sql 将datetime类型转化为指定格式的字符串
    C# 利用SMTP异步发送邮件
    Visual Studio
  • 原文地址:https://www.cnblogs.com/yzeng/p/4249907.html
Copyright © 2011-2022 走看看