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
,写入以下内容:
import sys
import osprint(sys.argv)
os.system('pause')
在浏览器中输入LetTest://hello/world/?a=1
回车,大功告成!
关于这里为什么显示的是Python
而不是URL Scheme测试
,我发现command
为一个文件的位置时会显示文件名,否则会显示你起的名字。
你还可以为这个Scheme设置一个图标(虽然在浏览器中也不会显示):
在LetTest
下新建DefaultIcon
项,默认值为图标路径。
这描述太详细(太长)了,能否可视化一点
没问题,结构如下:
HKEY_CURRENT_USER\Software\ClassesLetTest(Default) = URL Scheme测试URL Protocol = DefaultIcon(Default) = "C:\favicon.ico"ShellOpenCommand(Default) = "F:\OtherApps\Program\Python\Python\python.exe" "F:\OtherApps\Program\VsCode\Code\TrySchemeURL\test.py" "%1"
导出的.reg文件为:(双击即可食用)
Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\SOFTWARE\Classes\LetTest]
@="URL Scheme测试"
"URL Protocol"="F:\\OtherApps\\Program\\Python\\Python\\python.exe"[HKEY_CURRENT_USER\SOFTWARE\Classes\LetTest\DefaultIcon]
@="F:\\OtherApps\\Program\\Python\\Python\\python.exe"[HKEY_CURRENT_USER\SOFTWARE\Classes\LetTest\shell][HKEY_CURRENT_USER\SOFTWARE\Classes\LetTest\shell\open][HKEY_CURRENT_USER\SOFTWARE\Classes\LetTest\shell\open\command]
@="\"F:\\OtherApps\\Program\\Python\\Python\\python.exe\" \"F:\\OtherApps\\Program\\VsCode\\Code\\TrySchemeURL\\test.py\" \"%1\""
参考
- 吕毅的博客写得不错。
原创不易,转载经作者同意后请附上原文链接哦~
https://letmefly.blog.csdn.net/article/details/136083203