浏览器启动外部软件
常可以看见使用浏览器代码启动本地应用的软件.例如qq、迅雷、等等.那么他们是怎么做到的呢?
它的奥秘:Register protocol
前言我们经常看到 tencent://..thunder://这两种开头的网址,往往觉得很奇怪,很想弄懂其中的原理,是如何实现的,我查找了相关的 资料,终于找到了,跟大家分享下。原理篇
tencent://..
thunder://..
这些是腾讯和迅雷的协议,即页面上或地址栏里的链接只要输入带有 tencent://… 的协议,就会自动调用一个已写好的程序执行该协议的操作。
或者是打开页面,迅雷的是下载资源的链接 。通过微软的说明,知道这是Register protocol,对于 Windows、Linux 和 OS
X 操作系统都可以注册这样的协议。比如说 Windows,其实只需写入注册表,即可实现协议与执行程序的关联。例如腾讯的协议注册表如下:
1 2 3 4 5 6 7 8 | [HKEY_CLASSES_ROOT\TENCENT] @= "TencentProtocol" "URL Protocol" = "D:\\Program Files\\Tencent\\QQ\\Timwp.exe" [HKEY_CLASSES_ROOT\TENCENT\DefaultIcon] @= "D:\\Program Files\\Tencent\\QQ\\Timwp.exe,1" [HKEY_CLASSES_ROOT\TENCENT\shell] [HKEY_CLASSES_ROOT\TENCENT\shell\open] [HKEY_CLASSES_ROOT\TENCENT\shell\open\command] @= "\"D:\\Program Files\\Tencent\\QQ\\Timwp.exe\" \"%1\"" |
所实现的就是当浏览器(或其它)碰到 tencent://… 时,自动调用Timwp.exe,并把tencent://… 地址作为第一个参数传递给Timwp.exe。实现篇下面我们自己来实现这样的需求:要实现如上功能,最主要的还是对注册表的处理。新建一个注册表文件
1 2 3 4 5 6 7 8 | Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\FinstoneRpt] @= "FRptProtocol" "URL Protocol" = "I:\\Release\msdn5.exe" [HKEY_CLASSES_ROOT\FinstoneRpt\DefaultIcon] @= "I:\\Release\\msdn5.exe,0" [HKEY_CLASSES_ROOT\FinstoneRpt\shell] [HKEY_CLASSES_ROOT\FinstoneRpt\shell\open] [HKEY_CLASSES_ROOT\FinstoneRpt\shell\open\command] @= "\"I:\\Release\\msdn5.exe/" \ "%1\"" |
以上定义了协议名:FinstoneRpt,及相关调用处理程序的位置。各位可自行调整。将上述内容导入到注册表中!
然后在相关网页里加上一个连接:
<a href="FinstoneRpt://message/?id=3e5065a6-19a0-41e6-afab-db7cc4bd3c76">test</a>
当点击时,则会调用注册表中记录的程序。
当然该程序可以接受参数:就是href里的所有内容。可根据情况自行判断处理。
如需通过vs的安装程序实现安装时自动执行以上操作。在安装程序里,导入上述注册表文件,因为用户安装时的路径不一样,要定位注册表中记录的程序,只需在vs里将相关注册键值修改:将涉及具体地址都一一改成[TARGETDIR]程序名,即可。当你注册协议后,你就可以用指定的程序去“解释”这个协议,在软件里通过取命令行(GetCommandLine)获取传递过来的参数就行了.
本文转自:http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1087
作者:晓晨Master(李志强)
出处:https://www.cnblogs.com/stulzq/p/6121576.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
目前学习.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律