谓词和文件关联
当用户右键单击 Shell 对象(如文件)时,Shell 将显示快捷方式(上下文)菜单。 此菜单包含用户可以选择对项执行各种作的命令列表。 这些命令也称为快捷菜单项或谓词。 可以自定义快捷菜单。
本主题按如下所示进行组织:
文件系统对象的快捷菜单简介
由于快捷菜单通常用于文件管理,Shell 提供了一组默认命令,例如 剪切 和 复制,这些命令显示在任何文件系统对象的快捷菜单上,例如文件或文件夹。
以下示例演示了通过右键单击 myFile.xyz-ms 显示的默认快捷菜单。
默认快捷菜单的
MyFile.xyz-ms 出现默认快捷菜单的原因是,.xyz-ms 不是已注册文件类型的成员。 相比之下,.txt 是已注册的文件类型。 如果右键单击一个 .txt 文件,则会看到一个快捷菜单,其中包含其上部分的三个附加命令:打印,编辑,并使用 打开。
若要扩展文件类型的快捷菜单,必须为每个命令创建注册表项。 更复杂的方法是实现快捷菜单(谓词)处理程序,这样就可以逐个文件扩展文件类型的快捷菜单。 有关详细信息,请参阅 创建上下文菜单处理程序,以及 上下文菜单参考。
将命令添加到快捷菜单
快捷菜单处理程序是将命令添加到现有快捷菜单的文件类型处理程序。 快捷菜单处理程序与文件类型相关联,每当为类成员显示快捷菜单时,都调用它。 Shell 检查注册表,以查看文件类型是否与任何快捷菜单处理程序相关联。 如果是,Shell 会查询处理程序以获取其他快捷菜单项。
快捷菜单谓词
快捷菜单上的每个命令都通过其谓词在注册表中标识。 这些谓词与以编程方式启动应用程序时 ShellExecuteEx 所使用的谓词相同。
谓词是 Shell 用来标识关联命令的简单文本字符串。 每个谓词对应于用于在控制台窗口或批处理(.bat)文件中启动命令的命令字符串。
例如,打开的谓词通常会启动一个程序以打开文件。 命令字符串通常如下所示:
"My Program.exe" "%1"
如果命令字符串的任何元素包含或可能包含空格,则必须用引号括起来。 否则,如果元素包含空格,则它将无法正确分析。 例如,“我的 Program.exe” 正确启动应用程序。 如果使用 My Program.exe 而不带引号,则系统会尝试启动 My,并将 Program.exe 作为其第一个命令行参数。 应始终将引号用于 shell 扩展为字符串的 “%1”等参数,因为无法确定字符串不包含空格。
谓词还可以具有与其关联的显示名称,该名称显示在快捷菜单上,而不是谓词字符串本身。 例如,openas 的显示字符串 Open With。 与普通菜单字符串一样,包括显示字符串中的和字符允许选择命令的键盘。
流式传输非文件系统项和 OpenSearch 结果。
在 Windows 7 及更高版本中,支持通过 OpenSearch 协议将外部源连接到 Windows 客户端。 这样,用户就可以在 Windows 资源管理器中搜索远程数据存储和查看结果。 OpenSearch v1.1 标准定义了简单的文件格式,可用于描述客户端应如何查询 Web 服务来查询数据存储的 Web 服务,以及服务应如何返回客户端呈现的结果。
可能需要流式传输非文件系统项,以避免在 OpenSearch 结果的情况下下载项。 联合搜索功能支持从支持 OpenSearch 的非文件系统位置(例如 SharePoint 和其他 Web 服务支持的网站)搜索项目。 在这些项目上调用谓词时,系统会下载项目的临时版本并将其传递给谓词实现。 鼓励动词实现者通过注册谓词支持流式传输项的 URL 架构集来避免下载文件。 动词使用 SupportedProtocols 注册表项执行此作。
注册应用程序以处理任意文件类型
通过定义特定文件类型的快捷菜单项,可以指定关联的应用程序如何打开文件类型的成员。 但是,当用户尝试使用应用程序打开与应用程序不关联的文件类型时,应用程序还可以注册单独的默认过程。 注册默认过程的方式与注册快捷菜单项的方式大致相同。 有关定义快捷菜单项的更多详细信息,请参阅 创建上下文菜单处理程序。
默认过程提供两个基本用途。 一个是指定应如何调用应用程序以打开任意文件类型。 例如,可以使用命令行标志来指示打开未知文件类型。 另一个目的是定义文件类型的各种特征,例如快捷菜单项和图标。 如果用户将应用程序与其他文件类型相关联,该类将具有以下特征。 如果以前与其他应用程序关联的其他文件类型,则这些特征将替换原始文件。
若要注册默认过程,请将为应用程序的 ProgID 创建的相同注册表项置于应用程序的 HKEY_CLASSES_ROOT\Applications子项下。 还可以包含 FriendlyAppName 值,以便为系统提供应用程序的友好名称。 应用程序的友好名称也可以从其可执行文件中提取,但前提是 FriendlyAppName 值不存在。
以下示例注册表项演示了定义友好名称和多个快捷菜单项 MyProgram.exe 的默认过程。 命令字符串包括 /a 标志,以通知应用程序正在打开任意文件类型。 如果包括 DefaultIcon 子项,则应使用泛型图标。
HKEY_CLASSES_ROOT
MyProgram.exe
shell
open
command
(Default) = C:\MyDir\MyProgram.exe /a "%1"
print
command
(Default) = C:\MyDir\MyProgram.exe /a /p "%1"
printto
command
(Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2"
其他资源
- 有关其他背景信息,请参阅 文件关联简介。
- 有关使用文件类型处理程序扩展 Shell 的概念性信息,请参阅 创建 Shell 扩展处理程序。
相关主题