首页 > 其他分享 >记录--终于搞懂了网盘网页是怎么唤醒本地应用了

记录--终于搞懂了网盘网页是怎么唤醒本地应用了

时间:2024-01-16 18:56:47浏览次数:49  
标签:shell -- 网盘 CLASSES vscode ROOT 注册表 搞懂 open

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

写在前面

用百度网盘举例,可以通过页面打开本机的百度网盘软件,很多软件的网站页面都有这个功能。这个事情一直令我比较好奇,这次终于有空抽时间来研究研究了,本篇讲的是Windows的,mac的原理与之类似,Mac文章已发布:(Mac版)终于搞懂了浏览器是怎么唤醒本地应用了

自定义协议

本身单凭浏览器是没有唤醒本地应用这个能力的,不然随便一个网页都能打开你的所有应用那不就乱套了吗。但是电脑系统本身又可以支持这个能力,就是通过配置自定义协议。

举个例子,当你用浏览器打开一个本地的PDF的时候,你会发现上面是file://path/xxx.pdf,这就是系统内置的一个协议,浏览器可以调用这个协议进行文件读取。

那么与之类似的,windows本身也支持用户自定义协议来进行一些操作的,而这个协议就在注册表中进行配置。

配置自定义协议

这里我用VS Code来举例子,最终我要实现通过浏览器打开我电脑上的VS Code。

我们先编写一个注册表文件

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\vscode]
@="URL:VSCode Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\vscode\shell]

[HKEY_CLASSES_ROOT\vscode\shell\open]

[HKEY_CLASSES_ROOT\vscode\shell\open\command]
@=""D:\VScode\Microsoft VS Code\Code.exe" "%1""

这里我逐行解释

  1. Windows Registry Editor Version 5.00 这行表明该文件是一个 Windows 注册表编辑器文件,这是标准的头部,用于告诉 Windows 如何解析文件。
  2. [HKEY_CLASSES_ROOT\vscode] 这是一个注册表键的开始。在这里,\vscode 表示创建一个名为 vscode 的新键。
  3. @="URL:VSCode Protocol"vscode 键下,这行设置了默认值(表示为 @ ),通过 "URL:VSCode Protocol" 对这个键进行描述。
  4. "URL Protocol"="" 这行是设置一个名为 URL Protocol 的空字符串值。这是代表这个新键是一个 URI 协议。
  5. [HKEY_CLASSES_ROOT\vscode\shell] 创建一个名为 shell 的子键,这是一个固定键,代表GUI界面的处理。
  6. [HKEY_CLASSES_ROOT\vscode\shell\open]shell 下创建一个名为 open 的子键。这耶是一个固定键,open 是一个标准动作,用来执行打开操作。
  7. [HKEY_CLASSES_ROOT\vscode\shell\open\command]open 下创建一个名为 command 的子键。这是一个固定键,指定了当协议被触发时要执行命令。
  8. @=""D:\VScode\Microsoft VS Code\Code.exe" "%1""command 键下,设置默认值为 VSCode 的路径。 "%1" 是一个占位符,用于表示传递给协议的任何参数,这里并无实际用处。

写好了注册表文件后,我们将其保存为 vscode.reg,并双击执行,对话框选择是,相应的注册表信息就被创建出来了。

可以通过注册表中查看。

浏览器打开VS Code

这时,我们打开浏览器,输入 vscode://open

可以看到,就像百度网盘一样,浏览器弹出了询问对话框,然后就可以打开VS Code了。

如果想要在网页上进行打开,也简单

<script>
  function openVSCode() {
    window.location.href = 'vscode://open/';
  }
</script>
<button onclick="openVSCode()">打开 VSCode</button>

写一个简单的JS代码即可。

写在最后

至此,终于是了解了这方面的知识。这就是说,在网盘安装的过程中,就写好了这个注册表文件,自定义了网盘的唤醒协议,才可以被识别。

而我也找到了这个注册表

 原来叫baiduyunguanjia协议(不区分大小写),使用 baiduyunguanjia://open 可以打开。

本文转载于:

https://juejin.cn/post/7320513026188460067

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

标签:shell,--,网盘,CLASSES,vscode,ROOT,注册表,搞懂,open
From: https://www.cnblogs.com/smileZAZ/p/17968331

相关文章

  • 1.13每日总结
    今天学习了Python3正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在Python中,使用 re 模块来处理正则表达式。re模块提供了一组函数,允许你在字符串中进行模式匹配、搜索和替换操作。re 模块使Python语言拥有完整的正......
  • 中国互联网有哪些地方会被卡脖子:操作系统篇
    在互联网领域,中美实力都很强大,那么中国相比美国到底差距在哪里?回顾历史,我们可以发现,中国互联网起步在2000年左右,而美国在此之前已经发展了20年,正是这20年,让美国占据了先发优势。那么,美国有哪些先发优势呢?操作系统先来的吃肉,后到的就只能喝汤了。操作系统作为计算机领域非常重......
  • 1.14每日总结
    今天看了一下Python3的基础语法编码默认情况下,Python3源码文件以 UTF-8 编码,所有字符串都是unicode字符串。当然你也可以为源码文件指定不同的编码:#-*-coding:cp-1252-*-上述定义允许在源文件中使用Windows-1252字符集中的字符编码,对应适合语言为保加利亚语、......
  • 1.15每日总结
    行与缩进python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:实例(Python3.0+)ifTrue:print("True")else:print("False")以下代码最后一行语句缩进数的空格数不一致......
  • 1.16每日总结
    数字(Number)类型python中数字有四种类型:整数、布尔型、浮点数和复数。int (整数),如1,只有一种整数类型int,表示为长整型,没有python2中的Long。bool (布尔),如True。float (浮点数),如1.23、3E-2complex (复数),如1+2j、1.1+2.2j字符串(String)Py......
  • 玩玩luogu算法题——第1期
    昨天已经把所有大作业写完了,所以今天就想去做一些有趣的事情...今天做的题都不是特别难,除了最后一题(写了大概1000多行Markdown,结果能Accepted的代码居然只有十几行?!)目标:希望暑假的时候每天都能更新一点算法题的随笔出来,加油~P1000超级玛丽游戏(一个非常入门的题目,作用是用来快速......
  • 共享存储
    共享存储存储基础#单机存储设备●DAS(直接附加存储,是直接接到计算机的主板总线上去的存储)IDE、SATA、SCSI、SAS、USB接口的磁盘所谓接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储●NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储)NFS、CIFS、FTP文......
  • 如何编写一个 PowerShell 脚本
    PowerShell脚本的后缀是.ps1前提:ps1脚本可以帮忙我们快速修改文件内容,还不需要调用文件的底层api,方便快捷在编写CMakeLists时发现,项目不能够很好的使用vcpkgtoolchain,哪怕是在命令行中指定vcpkg.cmake如果只是简单的项目,vcpkgtoolchain可以正常工作,但是在稍微复......
  • P6054 题解
    blog。网络流——最小割。每个选手做某一套题的期望奖励固定,计算方式参考样例解释。这个假期望被去掉了。发现是典型的「\(m\)种强制选一」问题。考虑每个人都建一条链,跑最小割,每条链必定割\(\ge1\)条边,割哪条边就表示选哪套题。code,时间复杂度\(O(\text{能过})\)。......
  • 大雪球
    原题链接小记在一位高人的帮助下通过这题主要是二分+双指针时间复杂度为\(O(t*n*logn)\)题解二分这个k对应的值,对于每个二分出来的值,找出共有几个和小于它,核心如下:如果恰好有\(a[l_1]+a[r_1]<x\),那么\(a[l_1]-a[i]<x,(l<i<r_1)\)都成立,且使\(a[l_2]+a[r_2]<x\)成立的\(r......