右键单击对象通常会导致 快捷菜单的显示。 此菜单包含用户可以选择对对象执行各种作的命令列表。 本部分介绍文件系统对象的快捷菜单。
此处提供了其他信息:
文件系统对象的快捷菜单
当用户右键单击显示在 Windows 资源管理器或桌面上的对象(如文件)时,将显示一个带有命令列表的快捷菜单。 然后,用户可以通过选择相应的命令对文件执行作,例如打开或删除该文件。
由于快捷菜单通常用于文件管理, Shell 因此提供一组默认命令,如“剪切和复制”,显示在任何文件的快捷菜单上。 请注意,虽然“打开方式”是默认命令,但某些标准文件类型(如.wav)不会显示此命令。 以下示例“我的文档”目录(也用作 “自定义图标”中的示例)的下图显示了通过右键单击 MyDocs4.xyz 显示的默认快捷菜单。
MyDocs4.xyz 显示默认快捷菜单的原因是它不是已注册 文件类型的成员。 另一方面,.txt 是已注册的文件类型。 如果右键单击其中一个 .txt 文件,你将看到一个快捷菜单,其中包含其上部分的两个附加命令: 打开 和 打印。
注册文件类型后,可以使用其他命令扩展其快捷菜单。 右键单击该类型的任何文件时,它们会显示在默认命令上方。 尽管以这种方式添加的大多数命令都是常见的命令,例如 “打印 ”或 “打开”,但你可以随意添加用户可能会发现的任何命令。
扩展文件类型的快捷菜单所需的所有内容是为每个命令创建注册表项。 更复杂的方法是实现 快捷菜单处理程序,这样就可以逐个文件扩展文件类型的快捷菜单。 有关详细信息,请参阅 “创建上下文菜单处理程序”。
快捷菜单谓词
快捷菜单上的每个命令都按其 verb标识在注册表中。 这些谓词与以编程方式启动应用程序时 ShellExecuteEx 所使用的谓词相同。 有关 ShellExecuteEx 的使用的详细信息,请参阅 启动应用程序中的讨论。
verb 是由 Shell 用于标识关联命令的简单文本字符串。 每个 verb 字符串对应于用于在控制台窗口或批处理(.bat)文件中启动命令的 命令字符串 。 例如, 打开verb 通常会启动程序以打开文件。 其命令字符串通常如下所示:
"My Program.exe" "%1"
“%1”是文件名提供的命令行参数的标准占位符。 例如,它可以指定要在选项卡式视图中显示的特定页面。
注释
如果命令字符串的任何元素包含或可能包含空格,则必须用引号括起来。 否则,如果元素包含空格,则它将无法正确分析。 例如,“我的 Program.exe”将正确启动应用程序。 如果使用 My Program.exe,系统会尝试启动“My”,并将“Program.exe”作为其第一个命令行参数。 您应始终对由Shell扩展为字符串的参数(如“%1”)使用引号,因为不能确定该字符串不会包含空格。
谓词还可以具有与其关联的 显示字符串 ,该字符串显示在快捷菜单上,而不是 verb 字符串本身。 例如, openas 的显示字符串为 Open With。 与普通菜单字符串一样,在显示字符串中包括和符号(&),可以通过键盘选择命令。
标准动词
通常,应用程序负责为所定义的谓词提供本地化的显示字符串。 但是,为了提供一定程度的语言独立性,系统定义了一组常用的谓词,称为 规范谓词。 规范 verb 可用于任何语言,系统自动生成正确本地化的显示字符串。 例如,openverb的显示字符串在英语系统中将设置为“Open”,在德语系统中将设置为“Öffnen”。
规范谓词包括:
| 价值 | DESCRIPTION |
|---|---|
| 开启 | 打开文件或文件夹。 |
| opennew | 在新窗口中打开文件或文件夹。 |
| 打印 | 打印文件。 |
| 探讨 | 打开 Windows 资源管理器,并选定文件夹。 |
| 找到 | 打开 “Windows 搜索 ”对话框,其中文件夹设置为默认搜索位置。 |
| openas | 打开“打开方式”对话框。 |
| 属性 | 打开对象的属性表。 |
printto verb 也是规范的,但从未显示。 它允许用户通过将文件拖动到打印机对象来打印文件。
扩展动词
当用户右键单击对象时,快捷菜单包含所有普通谓词。 您可能希望支持某些命令,但不希望它们显示在每个快捷菜单上。 例如,你可能具有不常用的命令,或者这些命令适用于有经验的用户。 因此,还可以定义一个或多个 扩展谓词。 这些谓词也是字符串,类似于普通谓词。 它们通过记录方式与普通动词区分开来。 若要有权访问与扩展谓词关联的命令,用户必须在按 SHIFT 键时右键单击对象。 然后,扩展谓词将与普通谓词一起显示。
扩展文件类型的快捷菜单
扩展文件类型快捷菜单的最简单方法是使用注册表。 为此,请在与文件类型关联的应用程序的 ProgID 键下面添加一个Shell子项。 (可选)可以通过将其设为子项的默认值来定义文件类型的Shell默认值verb。
默认值 verb 首先显示在快捷菜单上。 其目的是在调用 ShellExecuteEx 但未指定verb时,为Shell提供一个verb以供使用。 在这种情况下使用 ShellExecuteEx 时,Shell不一定选择默认值 verb。 对于 Windows 2000 及更高版本系统上的 Shell5.0 版本及更高版本,请使用以下列表中首个可用的 Shellverb。 如果没有可用,该操作将失败。
- 打开 verb
- 默认值 verb
- 注册表中的第一个verb
- openwith verb
对于Shell版本 5.0 之前的版本,请省略第三项。
在 Shell 子项下方,为每个要添加的 verb 子项创建一个子项。 其中每个子项有一个 REG_SZ 值,该值设置为 verb 的显示字符串。 可以省略规范谓词的显示字符串,因为系统将自动显示正确本地化的字符串。 如果省略非规范谓词的显示字符串, verb 则会显示该字符串。 对于每个 verb 子项,请 创建一个 命令子项,并将默认值设置为命令字符串。
下图显示了文件类型和自定义图标中使用的 .myp 文件类型的快捷菜单。 它现在在其快捷菜单上包含了 open、doit、print 和 printto 四个命令,其中 doit 是默认命令 verb。 快捷菜单如下所示。
用于扩展上图中显示的快捷菜单的注册表项包括:
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
(Default) = MyProgram Application
Shell
(Default) = doit
open
command
(Default) = C:\MyDir\MyProgram.exe "%1"
doit
(Default) = &Do It
command
(Default) = C:\MyDir\MyProgram.exe /d "%1"
print
command
(Default) = C:\MyDir\MyProgram.exe /p "%1"
printto
command
(Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4
虽然 “打开方式” 命令位于第一个分隔符之上,但它由系统自动创建,不需要注册表项。 系统会自动为规范动词“打开”和“打印”创建显示名称。 由于“doit”不是一个标准项,因此会为其分配一个显示名称“&Do It”,可以通过按下D键来选择。 printto verb 不会显示在快捷菜单上,但包括它能够允许用户通过将文件拖放到打印机图标上来打印文件。 在此示例中,%1 表示文件名并 %2 打印机名称。
通过将 SuppressionPolicy 值添加到verb键值中,可以通过策略设置抑制动词。 将 SuppressionPolicy 的值设置为策略 ID。 如果策略已打开,则 verb 和其关联的快捷菜单项将被隐藏。 有关可能的策略 ID 值,请参阅 RESTRICTIONS 枚举。
扩展预定义 Shell 对象的快捷菜单
许多预定义 Shell 对象具有可扩展的快捷菜单。 以注册典型文件类型的方式注册命令,但使用预定义对象的名称作为文件类型名称。
可以在创建Shell扩展处理程序的“预定义Shell对象”部分找到预定义对象列表。 在表中标有“Verb”的那些预定义Shell对象是指其快捷菜单可以通过在注册表中添加谓词进行扩展的对象。
注册应用程序以处理任意文件类型
本文档前面的部分讨论了如何为特定文件类型定义快捷菜单项。 除其他事项外,通过定义快捷菜单,可以指定关联的应用程序如何打开文件类型的成员。 但是,如 文件类型中所述,应用程序还可以注册一个单独的默认过程,当用户尝试使用应用程序打开与应用程序没有关联的文件类型时,可以使用该过程。 本主题在此处进行了讨论,因为注册默认过程的方式与注册快捷菜单项的方式大致相同。
默认过程提供两个基本用途。 一个是指定应如何调用应用程序以打开任意文件类型。 例如,可以使用命令行标志来指示打开未知文件类型。 另一个目的是定义文件类型的各种特征,例如快捷菜单项和图标。 如果用户将应用程序与其他文件类型相关联,该类型将具有以下特征。 如果以前与其他应用程序关联的其他文件类型,则这些特征将替换原始文件。
若要注册默认程序,请将为应用程序的 ProgID 创建的同样的注册表键放置在应用程序的HKEY_CLASSES_ROOT\Applications子项下。 还可以包含 FriendlyAppName 值,以便为系统提供应用程序的友好名称。 应用程序的友好名称也可以从其可执行文件中提取,但前提是 FriendlyAppName 值不存在。 以下注册表片段展示了示例默认过程 MyProgram.exe,该过程定义了友好名称和多个快捷菜单项。 命令字符串包括 /a 标志,以通知应用程序正在打开任意文件类型。 如果包含 DefaultIcon 子项,则应使用泛型图标。
HKEY_CLASSES_ROOT
Applications
MyProgram.exe
FriendlyAppName = Friendly Name
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" %3 %4
新子菜单展开
当用户在 Windows 资源管理器中打开 “文件” 菜单时,第一个命令为 “新建”。 选择此命令将显示子菜单。 默认情况下,它包含两个命令 “文件夹 ”和 “快捷方式”,允许用户创建子文件夹和快捷方式。 此子菜单可以扩展为包含任何文件类型的文件创建命令。
若要将文件创建命令添加到 “新建 ”子菜单,应用程序的文件必须具有与其关联的 文件类型 。 在文件扩展名的密钥下包括 ShellNew 子项。 选择 “文件 ”菜单的 “新建 ”命令时, Shell 该命令将添加到 “新建 ”子菜单。 命令的显示字符串将是分配给程序的 ProgID 的描述性字符串。
将一个或多个数据值分配给 ShellNew 子项以指定文件创建方法。 可用值如下所示。
| 价值 | DESCRIPTION |
|---|---|
| 指令 | 执行应用程序。 这是一个 REG_SZ 值,指定要执行的应用程序的路径。 例如,可以将它设置为启动向导。 |
| 数据 | 创建包含指定数据的文件。 数据是包含文件数据的 REG_BINARY 值。 如果指定了 NullFile 或 FileName,则忽略数据。 |
| 文件名 | 创建一个文件,该文件是指定文件的副本。 FileName 是 REG_SZ 值,设置为要复制文件的完全限定路径。 |
| NullFile | 创建一个空文件。 NullFile 未分配值。 如果指定 NullFile,则忽略 Data 和 FileName 值。 |
下图显示了用作文件类型和自定义图标示例的 .myp 文件类型的新子菜单。 现在有了命令行 MyProgram 应用程序。 当用户从“新建”子菜单选择 MyProgram 应用程序时,将Shell创建名为“New MyProgram Application.myp”的文件,并将其传递给 MyProgram.exe。
注册表项现在如下所示:
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
ShellNew
NullFile
MyProgram.1
(Default) = MyProgram Application
DefaultIcon
(Default) = C:\MyDir\MyProgram.exe,2
Shell
(Default) = doit
open
command
(Default) = C:\MyDir\MyProgram.exe "%1"
doit
(Default) = &Do It
command
(Default) = C:\MyDir\MyProgram.exe /d "%1"
print
command
(Default) = C:\MyDir\MyProgram.exe /p "%1"
printto
command
(Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4