Windows Shell扩展:选择超过16个文件时的上下文菜单

时间:2014-01-26 23:47:31

标签: c# c++ windows shell

正如我所看到的,当选择了超过16个文件时DragQueryFile(hDrop,0xFFFFFFFF,NULL,0);返回16。 MSDN:http://msdn.microsoft.com/en-us/library/dd758093%28VS.85%29.aspx “在Windows 7及更高版本中,当查询快捷菜单时,传递给动词的项目数限制为16。然后,当调用该动词时,动词将重新创建并使用完整选择重新初始化。”

但我的FileContextMenuExt :: Initialize函数只调用一次,即使我选择的文件超过16个。 (我使用输出到文本文件检查了它。)

如何获取所选文件的完整列表及其编号?

我的问题类似于Shell Extension: DragQueryFile returns at most 16 (in Windows 7) 但那里找不到解决方案。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,逻辑非常简单。当您右键单击最多16个项目时,将发送到IShellExt::Initialize方法,然后是IContextMenu::QueryContextMenu

如果您的动词被调用(即调用IContextMenu::Invoke),则有两种可能的路径:

选择中最多16个项目 - > IContextMenu::Invoke被直接调用。

选择中超过16个项目,然后第二次使用所有选项的项目调用IShellExt::Initialize方法,然后IContextMenu::Invoke

如果您从未调用过菜单项,那么您将永远不会使用完整的项目列表第二次调用IShellExt::Initialize

我有一个sample project on github创建一个简单的上下文菜单(使用C ++),它使用真正的低级OutputDebugString来演示行为。