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



如我所见,当选择超过 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 扩展:DragQueryFile 最多返回 16(在 Windows 7 中) 但在那里没有找到解决方案。 谁能帮我?

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

在调用动词(即调用IContextMenu::Invoke)的情况下,有两种可能的路径:

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

如果选择中的项目超过 16 个,则再次调用IShellExt::Initialize方法,其中包含所选内容的所有项目,后跟IContextMenu::Invoke

如果您从未调用菜单项,则永远不会收到带有完整项列表的第二次调用IShellExt::Initialize

我在 github 上有一个示例项目,它创建了一个简单的上下文菜单(使用 C++),它演示了使用真正低级OutputDebugString的行为。

最新更新