Windows - URL Scheme - 在Windows上无管理员权限为你的程序添加URL Scheme

Windows - URL Scheme - 在Windows上无管理员权限为你的程序添加URL Scheme

What

想不想在浏览器打开/控制你的电脑应用?

比如我在浏览器地址栏输入wegame://后回车会提示是否打开URL:wegame Portocol

wegame:/

若出现了始终允许选项,你甚至可以写一个Web界面,在始终允许后通过Web控制你的本地程序。

这是怎么实现的呢?很简单,我教你啊!

要张脑子了

想要了解这种协议,可以GoogleURL Scheme

  • 在Windows和MacOS上,你可以使用这种协议打开或控制本地应用(也许Linux也行?)
  • 在Android和iOS上,你可以使用这种协议在应用之间跳转(并传参)

比如某开源音乐播放器就支持通过Scheme URL来控制音乐的播放。

有了这种协议,你也可以在用户访问你的某个软件的官网时,实现“在xx软件中打开并查看”的功能。

本篇只以Windows为例,演示如何在不需要用户的管理员权限的情况下,为你的应用创建URL Scheme。

How

只需要向注册表HKEY_LOCAL_MACHINE\Software\ClassesHKEY_CURRENT_USER\Software\Classes中添加一些子键。其中HKEY_LOCAL_MACHINE对所有用户生效,但需要管理员权限。现在以只对当前用户生效的不需要管理员权限的HKEY_CURRENT_USER为例:(这两个位置叫“HKEY_CLASSES_ROOT”)

首先Win+Rregedit回车打开注册表,进入到HKEY_CURRENT_USER\Software\Classes的位置:

进入HKEY_CLASSES_ROOT

Classes右键→新建项重命名新建的项(文件夹)。这里的名字就是你待会儿在浏览器中输入的scheme。这里以LetTest为例。

LetTest文件夹空白处双击默认并修改默认值,这里的值就是浏览器中显示的内容(就像WeGame显示的URL:wegame Portocol)。这里以URL Scheme测试为例。(其实这里的值写成URL:<myapp> Protocol比较规范)

LetTest文件夹上或空白处右键→新建→字符串值,名字为URL Protocol(不能更改),值一般为你的可执行程序的位置。这里以F:\OtherApps\Program\Python\Python\python.exe为例。(其实这里写什么都能正常执行,但建议这么写)

next step

LetTest文件夹上依次建立shell→open→command文件夹,其中shellopen的默认值都为空,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的位置都需要根据实际需求来调整)

next step 2

F:\OtherApps\Program\VsCode\Code\TrySchemeURL目录下(或其他位置)新建test.py,写入以下内容:

1
2
3
4
5
import sys
import os

print(sys.argv)
os.system('pause')

在浏览器中输入LetTest://hello/world/?a=1回车,大功告成!

原神启动!

按任意键进入异世界

关于这里为什么显示的是Python而不是URL Scheme测试,我发现command为一个文件的位置时会显示文件名,否则会显示你起的名字。

你还可以为这个Scheme设置一个图标(虽然在浏览器中也不会显示):

LetTest下新建DefaultIcon项,默认值为图标路径。

icon?

这描述太详细(太长)了,能否可视化一点

没问题,结构如下:

1
2
3
4
5
6
7
8
9
10
HKEY_CURRENT_USER\Software\Classes
LetTest
(Default) = URL Scheme测试
URL Protocol =
DefaultIcon
(Default) = "C:\favicon.ico"
Shell
Open
Command
(Default) = "F:\OtherApps\Program\Python\Python\python.exe" "F:\OtherApps\Program\VsCode\Code\TrySchemeURL\test.py" "%1"

导出的.reg文件为:(双击即可食用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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


Windows - URL Scheme - 在Windows上无管理员权限为你的程序添加URL Scheme
https://blog.letmefly.xyz/2024/02/08/Other-Windows-URLScheme-Define1URLSchemeForYourApplicationWithoutUACOnWindows/
作者
Tisfy
发布于
2024年2月8日
许可协议