C# 使用浏览器打开本地程序

511次阅读
没有评论

共计 1463 个字符,预计需要花费 4 分钟才能阅读完成。

本教程适用于 Windows 系统

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

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

C# 使用浏览器打开本地程序

在 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_ROOT\jun

C# 使用浏览器打开本地程序

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

如果你注册的协议是 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 的话,点这里就可以打开你的程序了

结果如下图:

C# 使用浏览器打开本地程序

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

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

正文完
 0
flames
版权声明:本文于2023-03-07转载自博客园,共计1463字。
转载提示:此文章非本站原创文章,若需转载请联系原作者获得转载授权。
评论(没有评论)