来自:心之所想、一键直达:你可能不知道的 Windows 快捷方式玩法

关于 Windows 上的一类文件有这么一些笑话:你请某人发送一个文件副本,Ta 将桌面上的「文件」拖到了聊天框,叮当一响,你收到了一份 document.lnk;你告诉 Ta 将某某软件卸载,于是 Ta 把桌面上的「软件」移到了回收站,告诉你「搞定了」……

这类文件读者都很熟悉,我们一般称之为快捷方式,它们的图标上都带着小箭头。大部分软件安装后往往会同时在桌面和开始菜单中创建快捷方式;如果没有,一些读者可能会在目标文件上 右键🖱 > 发送到 > 桌面快捷方式 自己己新建一个。

但除了右键发送到桌面,Windows 快捷方式其实还可以更快捷:在引用对象支持的情况下,它能做到直接调用软件的子功能、以某个模式启动程序等等。

让我们先从快捷方式的工作方式讲起。

快捷方式的基本知识

在微软的 开发者文档 中,快捷方式有另外一个更准确的表述:Shell Links,可翻译为壳层链接。这个名称更趋近于它的本质:用于 Windows 壳层(Shell)的链接文件。Windows 图形壳层自然是资源管理器(explorer.exe),这是它赖以工作的进程;而「链接」则说明 Shell Links 是指向引用对象(corresponding object)的文件而并非对象本身。

工作方式和属性

以桌面上的 Firefox.lnk 为例,当我们双击此链接,资源管理器发现用户尝试打开的文件类型为快捷方式,便读取了它的「目标」属性的内容 C:\Program Files\Mozilla Firefox\firefox.exe,然后尝试打开此「目标」,Firefox 程序于是被唤起了。

这和我们在资源管理器地址栏输入 Firefox.exe 位置的原理和效果是类似的。

img

但不同的是,快捷方式有几个其他的属性是我们不能通过填充地址栏做到的:

  • 起始位置(工作目录 & working directory):告诉资源管理器从哪个位置打开目标,或者说,将目标运行在哪个位置;
  • 快捷键:当焦点位于快捷方式所在目录时,资源管理器接受以快捷键打开链接;
  • 备注/图标:快捷方式作为一个文件用于展示自己的各类信息。

后缀名和类型

听到打开快捷方式和在资源管理器地址栏输入地址类似,一些读者可能会想到,Windows 资源管理器地址栏不光能输入文件地址,还可以输入shell:downloads 直接打开下载文件夹,输入shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}打开控制面板,输入https://example.com打开网站……

是的,快捷方式也能接受这些内容。根据引用对象种类的不同,常用1

还有一种快捷方式后缀名为 .cda,用于引用 CD 中的文件。

的快捷方式分为两种:

  1. .lnk 链接文件:注册表位置HKCR\lnkfile,引用对象是目录或文件(包括可执行程序);
  2. .url 网络快捷方式:注册表位置HKCR\InternetShortcut,引用对象是 URI。

创建方式和解析过程

通过图形界面创建快捷方式目前有两种途径:从引用对象创建和使用向导创建:

  1. 从引用对象创建:这种方式需要我们提前定位到引用对象(即快捷方式的目标),选中这个对象,要么右键 > 发送到 > 桌面快捷方式,要么按住 Alt 键,使用鼠标拖动文件到目标目录,然后松开鼠标。前者在 Windows 11 已经变得非常繁琐。
  2. 使用快捷方式创建向导:在任意目录下右键,选择新建 > 快捷方式,填入引用对象的地址和名称。

以上面两种方式创建快捷方式时,引用对象必须存在。但是创建完成后,引用对象存在与否就不再影响快捷方式,两者只会在用户打开快捷方式时发生关联。

当用户双击快捷方式时,系统会尝试解析该快捷方式:首先它会用快捷方式指向的路径检查引用对象是否能直接找到;如果路径的目标无对象,资源管理器接下来会使用名为 分布式链接跟踪 的技术,依靠对象原来的大小,名称,创建日期等信息进行检索,成功找到目标后 Windows 会自动更新快捷方式的目标属性;若无法找到则会提示用户删除快捷方式。

链接跟踪技术的应用给快捷方式带来了硬链接一样的解析效果:引用对象删除后恢复、重命名、移动位置都不会导致快捷方式失效。由于它也像符号链接一样依靠文件路径定位,所以只要路径正确,无论引用对象是否是原来的文件,快捷方式都会将其打开。

与符号链接的区别

同样可以链接到文件的路径,同样由系统提供支持,快捷方式和 符号链接 却有本质上的区别。快捷方式仍然是一个文件,它有自己的后缀名,有对应的数据(一个地址)和大小(几 KB),还有自己的图标和属性。但符号链接没有对应的数据对象,因而也没有大小可言,它没有后缀名,不具有完整文件结构。

img

以一个房子为例,每一个房子都有坐标。给别人一个符号链接,相当于为他开了一个直通房屋所在的传送门,他不需要知道房子实际在什么地方;而快捷方式只是一张写有地址的小纸条,他需要自己摸索才能到达房子。资源管理器可以读取纸条内容后找到房屋所在,但其他程序未必有这个能力。

本节汇总:快捷方式的更多可能

综上所述,类似 TXT 文本由 Notepad 打开,快捷方式由资源管理器处理,它将自己的各个属性值传达给资源管理器,后者负责检索并打开引用对象。引用对象可以是文件、目录或 URI。

指向一个文件、目录、网页的快捷方式想必读者司空见惯。但可执行程序并不是普通文件那么简单:notepad.exe 会打开一个未命名的文件,notepad.exe kepa.txt 则会新建一个名为kepa.txt 的文本文件;URI 方案亦不只有 HTTPS,它可是 iOS 自动化的老将。

为链接文件添加标识与参数,将网络快捷方式目标设置为 Windows 支持的的 URI Schemes,也许能解锁快捷方式更多的可能性。

为链接文件添加标识与参数

在图形化操作系统尚未普及之前,用户一次又一次输入 命令 标识(flags)参数 来完成工作。这种方式即使放在今天在很多情况下仍然比图形界面更高效。且不谈一些仍然流行的终端应用,即使是那些专门为图形界面设计的应用,不少也提供了终端调用的方式和丰富的标识,而这些都能被快捷方式利用。

下面以四个实例讲解相关用法,本节的小结部分总结了查找标识参数的两个方法。

用例一:快速新建 Word 博客文章

Word 内置了博客写作工具,完成后可以从软件内直接发送至 WordPress 等平台。但打开 Word,点击新建,再选择模板比较麻烦,能不能创建一个双击直接新建 Word 博客文章的快捷方式呢?

首先,我们需要确认 Word 支不支持命令调用的形式,有没有提供可用的标识。在搜索引擎中键入 Microsoft Word CLI Flags,前几个结果中就有微软官方给出的 Office 终端调用文档,文档称可以用 -t 加模板路径的方式据模板新建文档,这正是我们想要的。

img

使用这类快捷方式比较推荐的做法是首先定位到应用,将此应用的快捷方式作为底版。例如此例中,Word 在 Program Files\Microsoft Office 中,找到 EXE 文件、按住 Alt 拖到桌面创建一个快捷方式。

img

打开创建的快捷方式,编辑其「目标」属性,在后面添加 -t"模板文件路径" -q,这告诉 Word 跳过启动动画并按模板文件直接新建一个文档。将图标和快捷键名称改成自己喜欢的样子,一个简单便捷的快捷方式就做好了。

img

用例二:以无痕模式打开 Chrome

想要有一个直接以无痕模式运行的 Chrome,方便销毁敏感的搜索记录。和上一个例子一样,首先以 Chrome CLI Flags 为关键词搜索,发现 Chrome 提供的参数多得几页都装不下。不过我们只需要找和无痕模式相关的标识,在网页内以 incognito 为关键词搜索,立即能发现--incognito 标识。

img

为 Chrome 创建快捷方式做为底版,然后在目标属性后添加 --incognito 即可。

img

实际上,Chrome 为安装的浏览器应用创建的快捷方式,和它为不同的用户创建的快捷方式也都是通过添加标识和参数实现的。

用例三:一键归档桌面的已用图片

文章写到现在,笔者的桌面已经堆了不少配图。由于个人习惯边写边配图,需要用的图片已经自动上传图床,桌面上的图片大概率不会再用到了。我期望将它们快速移动到一个文件夹中,让桌面上新放的图更好找到。

截图和制图工具自动生成的图片命名全都以年份(2021)开头,所以这个操作用 PowerShell 实现起来并不难:

ni archive -Type Directory -Force; mv 2021* -Destination .\archive\

想要用快捷方式调用 PowerShell,可以找找 pwsh.exe( PowerShell 7 的 exe 名称)有没有给什么提示:在终端输入 pwsh.exe -h,发现可以用 -c 参数调用命令:

img

接下来,我们用向导的方式创建这样一个快捷方式。在桌面 右键 > 新建 > 快捷方式,输入pwsh.exe -nol -c ni archive -Type Directory -Force; mv 2021* -Destination .\archive\-nol 是不加载 Logo,会让命令处理更快一点。

输入完名称后,右键刚才创建的快捷方式,修改以下信息:

  • 起始位置:由于命令中我们使用的是相对位置,所以要把起始位置设置为桌面的路径;
  • 运行方式 > 最小化:这样不会有 PowerShell 窗口弹出,可从任务栏判断命令执行情况;
  • (可选)快捷键:方便操作;
  • (可选)常规 > 属性 > 隐藏:配合快捷键设置使用,这样一来桌面甚至连这个快捷方式都看不到,更简约。

然后,将焦点移到桌面,按下预先设置好的快捷键或者点按此快捷方式图标,所有图片立刻归档完成。

img

用例四:创建系统关键位置的快捷方式

第四个例子是为了补充一种情况——资源管理器本身的特殊参数。我们都使用过系统自动创建的回收站、控制面板、下载文件夹等快捷方式,但它们是如何工作的,用户能不能自行创建这些关键位置的快捷方式呢?

事实上,这些资源管理器内部的特殊位置是由系统在注册表中定义的,HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions中包含了几乎所有这类关键位置的信息。每一个位置都对应着独一无二的名称(Name 键数据)和 GUID(项)。例如桌面文件夹对应的名称是 Desktop,GUID 是{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}

TenForums 据此整理了两份(按名称按 GUID)列表大家也可以参考。

img

在快捷方式中调用它们也很简单,方法是使用 explorer.exe shell:Name 或者 explorer.exe shell:::GUID。举例来说,想要创建一个直达声音设置界面的快捷方式,可以使用右键,新建快捷方式,其内容填explorer.exe shell:::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D}

img

本节汇总:如何找到想要的标识和参数?

以上四个例子,涵盖了绝大多数种类的应用。不难看出快捷方式创建过程并不复杂,可能会难住读者的是找到应用支持的标识参数的方法。这是有规律可循的:

  • 终端命令与应用:例如 Move-item、Windows Terminal、Magick,我们可以先定位到命令或应用所在,输入 应用名 -h应用名 /h,一般都会出现各种参数的解释;再不济则可以从它们的官网中寻找,终端命令和应用必然会给出完善的文档,它们本就以供用户使用为设计目的。
  • 传统应用:例如 Word、Vmware、Explorer、ShareX,它们一般都不提供在终端可见的帮助。这时候需要以 应用名称 CLI Flags 为关键词在搜索引擎中检索。如果官方提供了相关的功能,那大概率就会有在线文档。

用 URI Schemes 创建网络快捷方式

一个指向某资源的具体地址,如 https://example.com,被称为 URL。这串字符作为命名方式而言的第一级就是 URI Scheme(统一资源标志符方案)。我们最常见的 HTTPS 只是 数以百计 URI 方案中的一种。正如同我们能不通过网站主页用 URL 直接打开某一篇文章一样,URI 亦可以用于打开软件内的某一个位置。

若读者在浏览器上搜索过 Windows 商店应用,点击安装,浏览器会弹出「打开 Microsoft Store」的提示,点击后会跳转到 Windows Store。这就是 Windows 上 URI Schemes 的简单应用。

img

将 URI Schemes 用于快捷方式的讲解也像上一节一样,先看几个用例,个中要点放在小结部分。

用例一:打开 Obsidian 特定条目

作为笔者的主力笔记应用,Obsidian 中有一些使用非常频繁的笔记,例如 Todo,快速笔记等。要是能有迅速打开这些笔记的快捷方式自然再好不过。Obsidian 并没有提供好用的标识参数,所以不妨求助于同样强大的 URI Schemes。

obsidian URI Schemes 为关键词搜索,能找到开发者对 Obsidian URI 的详细解释文档。

img

当然,我们的目标只是找到打开 Obsidian 某条目的快速方法。使用过 Obsidian 的读者应该能发现右键某个条目会有 复制 Obsidian URL 的选项,我们需要的就是这样一个链接。

img

同样使用右键调出创建向导,在弹出的内容中填写刚刚复制的 URI,一个快捷方式就创建完成了。如果还有其他需要快速调用的笔记,也可以如此操作。

img

用例二:常用聊天界面直达

和要好的朋友聊天、写邮件,有什么东西需要立刻和朋友分享,这些操作都需要进入客户端后选择聊天对象。能不能更简便一点,直接唤起和某人的聊天呢?只要应用支持,这是能够实现的。

检索的方式仍然是 应用名 uri schemes,根据搜索到的提示,我在快捷方式创建向导的目标位置框中填入下面三个内容:

  • mailto:hi@example.com:直接向某人发送邮件;
  • tg://resolve?domain=用户 ID:打开和某人的电报聊天,若用户 ID 填自己,则会打开 Saved Messages
  • tencent://Message/?Uin=QQ 号:打开和某人的 QQ 聊天。

bf778ca1-4470-4264-8bd2-4e3e0f1f2ea3

7b6b8f2f-2b66-43e2-93e5-72422be0cc58

经过笔者 查阅,微信 PC 端曾经支持类似的功能,但目前只能用 weixin: 唤起微信主界面。飞书亦 支持 lark: 开头的外部请求,但唤起聊天界面需要对方的 OpenID。

用例三:设置条目直达

作为 Windows 的特点之一,控制面板与更现代的设置两代同堂的局面已经持续很久。不难发现是它们俩可以相互跳转到某项功能的子界面。通过上一个节的第四部分,我们知道控制面板内的条目能用 GUID 等方式调用,那么更现代的设置是怎么做的呢?答案是 URI。

ms-settings URI schemes 为关键词检索,能发现微软给出的 官方文档,里面详细列举了以 ms-settings 开头的各类可用 URIs。

img

这些 URIs 是被设计为供开发者调用的,作为用户的我们也可以按照自己的需要将它们创建为快捷方式。比如说,笔者认为通过任务管理器导航到开机自启管理界面过于麻烦,那么我可以使用右键,创建快捷方式,在对象位置一栏中写入 ms-settings:startupapps。将此快捷方式移动到开始菜单,以后就能直接点击或者搜索 开启自启 来访问此项设置了。

img

微软的许多 UWP 类型的系统应用,例如 Edge、商店、人脉,都提供了 URI Scheme 支持。对于一些变量,例如默认浏览器、默认视频播放器,Windows 也有对应的 URIs 可供调用。

本节汇总:在 Windows 中查询 URI Schemes

Windows 下想要知道哪些应用支持 URI 调用还是很简单的:URI Schemes 在注册表中被表述为 URL Protocol,要使用 URI 的应用必须在注册表中新建一个带有 URL Protocol 字符串的项[1]

但反过来不一定对,含有 URL Protocol 的项未必有对应的 App。应用卸载后其注册表项可能还在,微软也会预留一些 URL Protocol。

。我们可以通过浏览 HKCR ,来确认某应用的 URI Scheme 支持情况。如下图所示,能看到 BiliBili UWP 版注册了 bilibili

img

对于系统应用和 Windows Store 应用而言,我们也可以从 Windows 设置 > 默认应用 > 按协议指定默认应用(Windows 11 改名为 按链接类型指定默认应用)界面寻找已经被注册的各类 URI Schemes。不过此面板不会显示一些传统应用。

img

然而试图查阅到一个可用的 URI 相对而言较为困难。URI 方案后的行为、查询参数大部分情况下用于供开发者进行应用内跳转,不会暴露给用户。并且由于 安全问题,不少应用都限制了从外部直接调用程序功能。

所幸 URIs 往往会兼顾多平台的通用性,Windows、iOS、Android 系统上同一个应用的 URI Scheme 用法有可能是一样的。下面的文章亦有参考价值:

要是不确定一个 URI Scheme 是否起作用,读者在将它们写入快捷方式之前,可以先使用资源管理器的地址栏做实验,效果符合预期再行动也不迟。

总结

就能力而言,快捷方式显然比不上脚本等手段。首先它的目标路径只能填一行,本文第二节虽然有用快捷方式执行多条命令的用例,但这显然不如脚本来得优雅;其次,快捷方式是静态的,想要为它加一些变量,例如打开 Obsidian 这一周的周志、用电报发送剪贴板内容,快捷方式实现起来就较为吃力,需要其他工具从旁辅助。

然而其优势也是很明显的——用起来简单方便。将目标写好,和我们交互的就只是一个带箭头的小图标。我们可以双击;可以将它们放在开始菜单中用于检索;还可以固定到任务栏,用 Windows + 数字键启用。快捷方式本身也是一个文件,它们可以被保存、备份、迁移,只要路径正确就能成功运行。

除了能用在快捷方式上,本文介绍的标识和 URI Schemes 也能用于 Windows 注册表、AutoHotkey,JS 脚本等其他地方,因而第二、三节的小结部分或许还有本文主旨之外的参考价值。

本文的意义仅在于提供应用的思路,揭示更多操作的可能性。真正适合自己的用法还需要读者自行探索。

扩展阅读


  1. 但反过来不一定对,含有 URL Protocol 的项未必有对应的 App。应用卸载后其注册表项可能还在,微软也会预留一些 URL Protocol。 ↩︎