【问题标题】:How to gray out some context-menu options with an IExecuteCommand-based shell extension?如何使用基于 IExecuteCommand 的 shell 扩展使一些上下文菜单选项变灰?
【发布时间】:2015-03-27 15:45:53
【问题描述】:

当使用IExecuteCommand 方法(如this blog post 中所述)实现上下文菜单外壳扩展时,给定的菜单选项如何变灰?

例如假设 shell 扩展提供了一些菜单选项,其中一些应该根据 shell 扩展计算的某些状态和条件灰显,例如:如果用户右键单击文件并且 shell 扩展检测到该文件有一些给定的属性,一些外壳扩展上下文菜单选项应该是灰色的。

如何使用IExecuteCommand 做到这一点?

或者是否应该为此使用另一个 Windows Shell COM 接口?

【问题讨论】:

  • 不确定IExecuteCommand,但可以使用IContextMenuInsertMenuItem 功能允许您设置有关项目的信息,包括 'MFS_DISABLED' 禁用菜单项并将其变灰以使其无法选择。
  • 是的,我知道IContextMenu 是可能的,谢谢。 (事实上​​,在 Windows 7 中引入IExecuteCommand 之前,我使用“好老”IContextMenu 编写了 shell 扩展)。我只是好奇IExecuteCommand 是否也能做到这一点,或者这个用于上下文菜单外壳扩展的新 COM 接口是否受限于不允许像此功能这样基本的东西。 (在那种情况下,坦率地说,我会定义IExecuteCommand 几乎没用......)。但是我不确定,所以我想在这里问。谢谢。

标签: c++ windows shell winapi contextmenu


【解决方案1】:

我从未尝试过,但您应该可以在动词的键中将 CommandState­Handler(未记录?)设置为实现 IExplorerCommandState 的 CLSID。

您可能还考虑实现 IExplorerCommand 而不是 IExecuteCommand+IExplorerCommandState...

您还可以根据使用 AppliesTo 值的属性系统查询来隐藏动词。

【讨论】:

  • 感谢您的回答,我已赞成。我不知道您引用的 COM 接口,感谢您分享此信息。但是在这一点上,我想知道遵循 "classical" IContextMenu 路径是否更简单... :)
  • 取决于我猜你需要支持的 Windows 版本,如果是 Win7+,那么这些工作更少,更重要。
  • CommandStateHandler 记录在 Guidance for Implementing In-Process Extensions 中:"IExplorerCommandState 与在 a 下注册的 CommandStateHandler 条目相关联shell \动词子键。”。感谢您指出这个界面!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多