选择静态或动态快捷菜单方法
本主题的组织方式如下:
选择谓词方法
强烈建议使用静态谓词方法之一实现快捷菜单。
静态谓词方法
静态谓词是实现的最简单谓词,但它们仍然提供丰富的功能。 始终选择满足需求的最简单的快捷菜单方法。
静态谓词 | 说明 |
---|---|
使用命令行参数的 CreateProcess | 这是实现静态谓词的最简单和最熟悉的方法。 通过调用 CreateProcess 函数来调用进程,其中包含作为命令行传递的所选文件和任何可选参数。 这会打开文件或文件夹。 此方法具有以下限制:
|
DropTarget/IDropTarget | 基于 COM 的谓词激活意味着 支持过程内或过程外激活。 DropTarget/当 IDropTarget 接口由本地服务器实现时, 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 。
如果必须通过注册文件类型的动态谓词来扩展文件类型的快捷菜单,请按照 使用动态谓词自定义快捷菜单中提供的说明进行操作。
扩展快捷菜单
选择谓词方法后,可以通过为文件类型注册静态谓词来扩展文件类型的快捷菜单。 有关详细信息,请参阅 创建上下文菜单处理程序。
支持按操作系统排序的谓词方法
下表列出了操作系统对谓词调用方法的支持。
谓词方法 | 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 |
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈