选择静态或动态快捷菜单方法
本主题的组织方式如下:
选择谓词方法
强烈建议使用静态谓词方法之一实现快捷菜单。
静态谓词方法
静态谓词是实现的最简单谓词,但它们仍然提供丰富的功能。 始终选择满足需求的最简单的快捷菜单方法。
静态谓词 | 说明 |
---|---|
使用命令行参数 CreateProcess | 这是实现静态谓词的最简单和最熟悉的方法。 通过调用 CreateProcess 函数来调用进程,其中包含所选文件和作为命令行传递的任何可选参数。 这会打开文件或文件夹。 此方法具有以下限制:
|
DropTarget/IDropTarget | 基于 COM 的动词激活意味着支持在过程内或过程外激活。 当 IDropTarget 接口由本地服务器实现时,DropTarget/IDropTarget 还支持重用已运行的处理程序。 它还通过封送数据对象完美地表达项,并提供对调用站点链的引用,以便可以通过 QueryService 与调用程序交互。 |
Windows 7 及更高版本: IExecuteCommand | 最直接的实现方法。 由于这是基于 COM 的调用方法(如 DropTarget),因此此接口支持过程内和过程外激活。 该谓词实现 IExecuteCommand 和 IObjectWithSelection,以及(可选)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 |
相关主题