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

本主题的组织方式如下:

选择谓词方法

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

静态谓词方法

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

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

DropTarget/IDropTarget 基于 COM 的动词激活意味着支持在过程内或过程外激活。 当 IDropTarget 接口由本地服务器实现时,DropTarget/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 来处理可见性。

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

扩展快捷菜单

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

支持按操作系统使用谓词方法

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

Verb 方法 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

 

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

创建快捷菜单处理程序

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

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

快捷菜单参考

谓词和文件关联