Windows - URL Scheme - 在Windows上无管理员权限为你的程序添加URL Scheme
Windows - URL Scheme - 在Windows上无管理员权限为你的程序添加URL Scheme
What
想不想在浏览器打开/控制你的电脑应用?
比如我在浏览器地址栏输入wegame://后回车会提示是否打开URL:wegame Portocol。

若出现了始终允许选项,你甚至可以写一个Web界面,在始终允许后通过Web控制你的本地程序。
这是怎么实现的呢?很简单,我教你啊!
要张脑子了
想要了解这种协议,可以GoogleURL Scheme。
- 在Windows和MacOS上,你可以使用这种协议打开或控制本地应用(也许Linux也行?)
- 在Android和iOS上,你可以使用这种协议在应用之间跳转(并传参)
比如某开源音乐播放器就支持通过Scheme URL来控制音乐的播放。
有了这种协议,你也可以在用户访问你的某个软件的官网时,实现“在xx软件中打开并查看”的功能。
本篇只以Windows为例,演示如何在不需要用户的管理员权限的情况下,为你的应用创建URL Scheme。
How
只需要向注册表HKEY_LOCAL_MACHINE\Software\Classes或HKEY_CURRENT_USER\Software\Classes中添加一些子键。其中HKEY_LOCAL_MACHINE对所有用户生效,但需要管理员权限。现在以只对当前用户生效的不需要管理员权限的HKEY_CURRENT_USER为例:(这两个位置叫“HKEY_CLASSES_ROOT”)
首先Win+R,regedit并回车打开注册表,进入到HKEY_CURRENT_USER\Software\Classes的位置:

在Classes下右键→新建项并重命名新建的项(文件夹)。这里的名字就是你待会儿在浏览器中输入的scheme。这里以LetTest为例。
在LetTest文件夹空白处双击默认并修改默认值,这里的值就是浏览器中显示的内容(就像WeGame显示的URL:wegame Portocol)。这里以URL Scheme测试为例。(其实这里的值写成URL:<myapp> Protocol比较规范)
在LetTest文件夹上或空白处右键→新建→字符串值,名字为URL Protocol(不能更改),值一般为你的可执行程序的位置。这里以F:\OtherApps\Program\Python\Python\python.exe为例。(其实这里写什么都能正常执行,但建议这么写)

在LetTest文件夹上依次建立shell→open→command文件夹,其中shell和open的默认值都为空,command的值为你要执行的命令。
这里的命令一般为"可执行程序" "%1"(其中"%1"为浏览器等传递的参数)。一般为"C:\LetMeFly.exe" "%1",但是这里以一个简单的Python脚本为例,写为"F:\OtherApps\Program\Python\Python\python.exe" "F:\OtherApps\Program\VsCode\Code\TrySchemeURL\test.py" "%1"。(其中Python.exe的位置和test.py的位置都需要根据实际需求来调整)

在F:\OtherApps\Program\VsCode\Code\TrySchemeURL目录下(或其他位置)新建test.py,写入以下内容:
1 | |
在浏览器中输入LetTest://hello/world/?a=1回车,大功告成!


关于这里为什么显示的是Python而不是URL Scheme测试,我发现command为一个文件的位置时会显示文件名,否则会显示你起的名字。
你还可以为这个Scheme设置一个图标(虽然在浏览器中也不会显示):
在LetTest下新建DefaultIcon项,默认值为图标路径。

这描述太详细(太长)了,能否可视化一点
没问题,结构如下:
1 | |
导出的.reg文件为:(双击即可食用)
1 | |
参考
- 吕毅的博客写得不错。
似乎对,,自家的microsoft-edge无效。。。
原创不易,转载经作者同意后请附上原文链接哦~