移动程序关联 URL 是常态,桌面应用程序其实也早就支持关联 URL 以便在浏览器中打开。当我们的程序关联了一个 URL 协议之后,开发的网站上就可以通过这个 URL 与程序进行互操作,这很互联网。

对于 Windows 桌面应用来说,关联一个 URL 协议是通过修改注册表来实现的。本文介绍如何为你的应用关联一个 URL 协议。


本文内容

  • URL 协议
  • 注册一个 URL 协议
    • 好好想一个协议名称
    • 在注册表中添加协议关联

URL 协议

一个常用的 URL 协议是这样子的:https://walterlv.com。前面的 https 就是协议名称,而 https:// 放在一起就是在使用 https 协议。

本文我们将定义一个 walterlv 协议,然后关联到我们本地安装的一个桌面应用程序上,然后使用 walterlv://open?id=1 来打开一个 id 为 1 的逗比。

注册一个 URL 协议

要在 Windows 系统上注册一个 URL 协议,你只需要两个步骤:

  • 好好想一个协议名称
  • 在注册表中添加协议关联

好好想一个协议名称

就知道你想不出来名字,于是可以使用命名生成工具:Whitman,其原理可阅读 冷算法:自动生成代码标识符(类名、方法名、变量名) - 吕毅。

然后本文使用协议名称 walterlv

在注册表中添加协议关联

你需要在注册表的 HKEY_LOCAL_MACHINE\Software\Classes 或者 HKEY_CURRENT_USER\Software\Classes 添加一些子键:

HKEY_CURRENT_USER\Software\Classeswalterlv(Default) = 吕毅的特殊链接URL Protocol = WalterlvProtocolShellOpenCommand(Default) = "C:\Users\lvyi\AppData\Local\Walterlv.Foo\Walterlv.Windows.Association.exe" "%1"

Classes 中的那个根键 walterlv 就是我们的协议名称,也就是 walterlv:// 的那个前缀。

walterlv 根键 中的 (Default) 属性给出的是链接的名称;如果后面没有设置打开方式(也就是那个 Shell\Open\Command)的话,那么在 Chrome 里打开就会显示为那个名称(如下图)。

URL Protocol 这个注册表项是必须存在的,但里面的值是什么其实无所谓。这只是表示 walterlv 是一个协议。

接下来 Shell\Open\Command 中的 (Default) 值设置为一个打开此协议用的命令行。其中路径后面的 "%1" 是文件资源管理器传入的参数,其实就是文件的完整路径。我们加上了引号是避免解析命令行的时候把包含空格的路径拆成了多个参数。

在正确填写了注册表的以上内容之后,在 Chrome 里打开此链接将看到以下 URL 打开提示:

关于注册表路径的说明

HKEY_LOCAL_MACHINE 主键是此计算机上的所有用户共享的注册表键值,而 HKEY_CURRENT_USER 是当前用户使用的注册表键值。而我们在注册表的 HKEY_CLASSES_ROOT 中也可以看到跟 HKEY_LOCAL_MACHINE\Software\ClassesHKEY_CURRENT_USER\Software\Classes 中一样的文件关联项,是因为 HKEY_CLASSES_ROOTHKEY_LOCAL_MACHINE\Software\ClassesHKEY_CURRENT_USER\Software\Classes 合并之后的一个视图,其中用户键值会覆盖此计算机上的相同键值。

也就是说,如果你试图修改文件关联,那么需要去 HKEY_LOCAL_MACHINE\Software\ClassesHKEY_CURRENT_USER\Software\Classes 中,但如果只是去查看文件关联的情况,则只需要去 HKEY_CLASSES_ROOT 中。

写入计算机范围内的注册表项需要管理员权限,而写入用户范围内的注册表项不需要管理员权限;你可以酌情选用。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

如何为你的 Windows 应用程序关联 URL 协议,以便在浏览器中也能打开你的应用相关推荐

  1. IDM关于某些应用程序阻止了IDM集成到浏览器中

    IDM关于某些应用程序阻止了IDM集成到浏览器中 使用破解版本的IDM时候,有时候在启动IDM时,会出现某些应用程序阻止了IDM集成到浏览器中的问题. 使用说明 Win10使用说明: 解压压缩文件,运 ...

  2. 如何为你的 Windows 应用程序关联一种或多种文件类型

    对于 Windows 桌面应用来说,让应用关联一种或多种文件类型是通过修改注册表来实现的. 本文介绍如何为你的应用关联自定义的文件类型或者关联被广泛使用的文件类型. 本文内容 文件关联 注册一个文件类 ...

  3. C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序...

    本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...

  4. Maui Blazor windows程序无法通过双击 bin 文件夹中的 exe打开程序的解决办法

    ​ 使用Visual Studio创建了一个.NET Maui Blazor 应用,通过Visual Studio调试Windows应用时,需要打开开发者模式 打开开发者模式,调试一切正常,但如果直接 ...

  5. 【Windows部署】首次安装的谷歌Chrome浏览器出现【无法打开此页面】问题处理(详细图文步骤)

    首次安装chrome浏览器打开时是这个界面: 以下解决的是首次安装的chrome浏览器[无法打开此网页],但其他浏览器可以联网的情况,话不多说,详细步骤如下: 1.打开注册表 Windows+R 输入 ...

  6. python监控linux运行程序_如何在linux/tcl/python中监控正在打开或启动的应用程序?...

    我正在尝试构建一个面板应用程序,类似于avant window navigator或UbuntuUnity.在 我的问题是,一旦我用预先定义好的应用程序构建了面板,当应用程序打开或启动时,如何向面板添 ...

  7. html创建关联程序,如何在控制面板中创建电子邮件默认程序关联

    星愿下的期盼的回答: 1.在电脑的左下角点击开始图标,然后找到[默认程序]功能并点击打开. 2.进入到默认程序界面后找到[将文件类型或协议与程序关联]并点击. 3.会打开设置关联界面,在[名称]一栏找 ...

  8. 如何在浏览器中打开windows应用程序

    最近由于项目需要实现一个类似迅雷从浏览器触发下载链接的功能,于是研究了一下怎么从浏览器中打开本地应用(仅限windows平台). 首先上网查了一些资料,然后发现这个功能的实现主要跟注册表有关系.需要在 ...

  9. 浏览器(js)打开window程序

    编写注册表:先创建.txt然后修改为.reg        双击执行(这里我们打开的是写字板) Windows Registry Editor Version 5.00[HKEY_CLASSES_RO ...

最新文章

  1. boost::spirit模块实现复杂的日期解析器的测试程序
  2. python含多个附件的邮件_Python发送带有多个图像附件的电子邮件
  3. C++ 多态在异常中的使用
  4. 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
  5. 程序挂起时自动创建转储文件
  6. Oracle数据库个人整理常用的表空间、用户、授权操作
  7. 客户端存储——Storage
  8. 产品必备-产品FDD模板(PRD)
  9. QTTabBar 「资源管理器」让你的文件夹拥有浏览器标签页般的体验
  10. 计算机算法分析与设计心得体会,算法设计与分析课程的心得体会
  11. maven 命令下载依赖包
  12. 玩游戏显示服务器不稳定,FPS不稳定是什么原因?玩游戏FPS低怎么办?
  13. 高级计量经济学及stata应用 学习笔记③ 长面板
  14. Java面试之——Tomcat
  15. 【MySQL】mysql数据库操作指南
  16. Neo4j图数据库,用py2neo中的OGM操作(类似ORM)
  17. difflib模块_Python一起来找茬—difflib模块
  18. 太极·Magisk框架v4.1.3 安卓版
  19. 如何解决c++文件读写流无法读取中文的问题(vc6.0)
  20. 磁盘空间不足怎么办?教你重新分配磁盘空间

热门文章

  1. 2021-2027全球与中国飞机交流座椅内电源市场现状及未来发展趋势
  2. js 获取当前日期(年月日时分秒周)
  3. OpenCV检测火焰
  4. 谷歌关键词是怎么做到首页的?谷歌搜索排名规则是什么?
  5. sketch源码 html,手绘用户界面转成 HTML 代码 Sketch2Code
  6. oracle数据库50题,ORACLE数据库试题
  7. 没有新“核弹”,更强调“车规级”和“量产”,英伟达自动驾驶朋友圈进一步扩大 | GTC 中国 2018...
  8. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用38
  9. Linux多路径multipath
  10. EMUI11什么时候推送鸿蒙,EMUI11什么时候更新 EMUI11推送更新机型和时间汇总