本教程适用于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() == "")
Reg();
else
UnReg();
}

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

打开注册表(运行:regedit):HKEY_CLASSES_ROOT\jun

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

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

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

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

将Main方法改为:

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

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

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

结果如下图:

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

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

源码下载

C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序的更多相关文章

  1. [原创]python爬虫之BeautifulSoup,爬取网页上所有图片标题并存储到本地文件

    from bs4 import BeautifulSoup import requests import re import os r = requests.get("https://re. ...

  2. IIS上部署MVC网站,打开后ExtensionlessUrlHandler-4.0

    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法IIS上部署MVC网站,打开后500错误 IS上部署MVC网站,打开后Extensio ...

  3. 自定义URL协议在Web中启动本地应用程序

    转自(http://blog.csdn.net/jackychen_king/article/details/7743811) 1.注册应用程序来处理自定义协议 你必须添加一个新的key以及相关的va ...

  4. H5外部浏览器直接调起微信——通过url协议 weixin:// 判断是否安装微信及启动微信

    前言: h5分享到微信,h5使用微信支付这些功能,都需要先判断是否安装微信客户端,如果已安装就启动微信,如果没有安装微信,就提示用户前去安装. 我们可以通过访问微信提供的URL协议(weixin:// ...

  5. 逍遥云天 H5外部浏览器直接调起微信——通过url协议 weixin:// 判断是否安装微信及启动微信

    h5分享到微信,h5使用微信支付这些功能,都需要先判断是否安装微信客户端,如果已安装就启动微信,如果没有安装微信,就提示用户前去安装. 我们可以通过访问微信提供的URL协议(weixin://)来实现 ...

  6. web基础-web工作原理,http协议,浏览器缓存

    1,web工作原理 2,http协议 3,浏览器缓存 4,cookie和session -------------------------------------------------------- ...

  7. BOM / URL编码解码 / 浏览器存储

    BOM 浏览器对象模型 BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的.可以与浏览器窗口进行互动的 ...

  8. URI Scheme注册伪协议实现远程命令执行

    Windows配置注册表注册伪协议 1.新建伪协议项 WIN+R 输入regedit 打开注册表,在注册表HKEY_CLASSES_ROOT键中新建一个项,项的名字就是你伪协议的名字,例如我注册一个c ...

  9. Java 监控直播流rtsp协议转rtmp、hls、httpflv协议返回浏览器

    Java 监控直播流rtsp协议转rtmp.hls.httpflv协议返回浏览器 目录 需求背景: 一:了解音视频流协议: 二:方案一 rtsp 转rtmp 1.下载nginx + nginx-rtm ...

随机推荐

  1. Leveling Ground(数论,三分法,堆)

    Leveling Ground(数论,三分法,堆) 给定n个数和a,b每次可以选择一段区间+a,-a,+b或-b,问最少操作几次能把他们都变成0.n<=1e5. 首先差分一下序列,问题就会变成了 ...

  2. P1592 互质

    题意:输入两个正整数n和k,求与n互质的第k个正整数. $n≤10^6,k≤10^8$ 可以枚举出互质的数,居然发现,有循环节.... 比如10 与其互质的1  3  7  9  11  13  17 ...

  3. BA 认证

    IIBA-CBAP https://www.iiba.org/standards-and-resources/core-standard/ PMI-PBA https://www.pmi.org/ce ...

  4. NSFileManager在初始化文件的时候一不留神就进入陷阱

    今天调试一个程序,内容是在手机一个本地路径生成一个缓存文件,在生成本地路径的时候犯了一个错误,本着求原因的精神调试了2个小时,终于找到原因了 刚开始断点调试的时候,执行到第13行,这里死活不给写入数据 ...

  5. vue.js路由学习笔记

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  6. DataSet强类型、TableAdapter的使用

    简答使用可以看https://www.cnblogs.com/namejr/p/10411920.html中的"先来简单介绍dataset和datatable" DataSet强类 ...

  7. CF 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和(数位DP)

    题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当 ...

  8. hdu1698 线段树(区间更新~将区间[x,y]的值替换为z)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. centos7博客的基础搭建(LNMP)

    linux [root@zbb wordpress]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) nginx echo ...

  10. mongo察看replica set副本集primary主节点

    printjson(db.adminCommand( { isMaster: 1 } ));