As I can see, when more than 16 files are selected 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) 但没有找到解决办法。 谁能帮帮我?
最佳答案
在这种情况下,逻辑真的很简单。当您右键单击时,最多 16 个项目将被发送到 IShellExt::Initialize
方法,然后是 IContextMenu::QueryContextMenu
在调用动词的情况下(即调用 IContextMenu::Invoke
),有两种可能的路径:
选择中最多包括 16 个项目 -> IContextMenu::Invoke
被直接调用。
选择中超过 16 个项目然后 IShellExt::Initialize
方法被第二次调用所有选择的项目,然后是 IContextMenu::调用
。
如果您从不调用菜单项,那么您将永远不会使用完整的项目列表第二次调用 IShellExt::Initialize
。
我有一个 sample project on github创建一个简单的上下文菜单(使用 C++),它演示了使用真正低级 OutputDebugString
的行为。
关于c# - Windows shell 扩展 : context menu when more than 16 files are selected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370844/