选择静态或动态快捷菜单方法

本主题的组织方式如下:

选择谓词方法

强烈建议使用静态谓词方法之一实现快捷菜单。

静态谓词方法

静态谓词是实现的最简单谓词,但它们仍然提供丰富的功能。 始终选择满足需求的最简单的快捷菜单方法。

静态谓词 说明
使用命令行参数的 CreateProcess 这是实现静态谓词的最简单和最熟悉的方法。 通过调用 CreateProcess 函数来调用进程,其中包含作为命令行传递的所选文件和任何可选参数。 这会打开文件或文件夹。
此方法具有以下限制:
  • 命令行长度限制为 2000 个字符,这限制了谓词可以处理的项数。
  • 只能与文件系统项一起使用。
  • 不启用已运行的进程的重用。
  • 要求安装可执行文件来处理谓词。

DropTarget/IDropTarget 基于 COM 的谓词激活意味着 支持过程内或过程外激活。 DropTarget/当 IDropTarget 接口由本地服务器实现时, IDropTarget 还支持重用已运行的处理程序。 它还通过封送数据对象完美地表示项,并提供对调用站点链的引用,以便您可以通过 QueryService 与调用程序交互。
Windows 7 及更高版本: IExecuteCommand 最直接的实现方法。 由于这是基于 COM 的调用方法, (如 DropTarget) 因此此接口支持过程内和过程外激活。 谓词实现 IExecuteCommandIObjectWithSelection,还可以实现 IInitializeCommand。 项作为 Shell 项数组直接传递,调用程序中的更多参数可用于谓词实现,包括调用点、键盘状态等。
Windows 7 及更高版本:ExplorerCommand/ IExplorerCommand 允许通过 IExplorerCommandProvider 提供其命令模块命令的数据源将这些命令用作快捷菜单上的谓词。 由于此接口仅支持进程内激活,因此建议供需要在命令和快捷菜单之间共享实现的 Shell 数据源使用。

 

注意

IExplorerCommand 是静态和动态谓词之间的混合。 IExplorerCommand 是在 Windows Vista 中声明的,但它在快捷菜单中实现谓词的能力是 Windows 7 的新增功能。

 

有关针对文件关联属性的 IDropTarget 和 Shell 查询的详细信息,请参阅 感知类型和应用程序注册

首选动态谓词方法

首选以下动态谓词方法:

谓词类型 说明
上表中列出的静态谓词 () + 高级查询语法 (AQS) 此选项可获取动态谓词可见性。
Windows 7 及更高版本: IExplorerCommand 此选项支持在 Windows 资源管理器的命令模块中显示的谓词和资源管理器命令的常见实现。
Windows 7 及更高版本: IExplorerCommandState + 静态谓词 此选项还会获得动态谓词可见性。 它是一个混合模型,其中使用简单的进程内处理程序来计算是否应弃用给定的静态谓词。 这可以应用于所有静态谓词实现方法,以实现动态行为并最大程度地减少进程内逻辑的公开。 IExplorerCommandState 具有在后台线程上运行的优势,从而避免 UI 挂起。 它比 IContextMenu 简单得多。

 

不建议使用动态谓词方法

IContextMenu 是最强大但也最复杂的实现方法。 它基于在调用方线程上运行的进程内 COM 对象,该对象通常为 Windows 资源管理器,但可以是承载项的任何应用程序。 IContextMenu 支持谓词可见性、排序和自定义绘制。 其中一些功能已添加到静态谓词功能中,例如要与命令关联的图标,以及用于处理可见性的 IExplorerCommand

如果必须通过注册文件类型的动态谓词来扩展文件类型的快捷菜单,请按照 使用动态谓词自定义快捷菜单中提供的说明进行操作。

扩展快捷菜单

选择谓词方法后,可以通过为文件类型注册静态谓词来扩展文件类型的快捷菜单。 有关详细信息,请参阅 创建上下文菜单处理程序

支持按操作系统排序的谓词方法

下表列出了操作系统对谓词调用方法的支持。

谓词方法 Windows XP Windows Vista Windows 7 及更高版本
CreateProcess X x x
DDE x x x
DropTarget x x x
ExecuteCommand x x
ExplorerCommand x
ExplorerCommandState x

 

快捷菜单处理程序和多选谓词的最佳做法

创建快捷菜单处理程序

使用动态谓词自定义快捷菜单

快捷键 (上下文) 菜单和快捷菜单处理程序

快捷菜单参考

谓词和文件关联