Shell扩展:DragQueryFile最多返回16(在Windows 7中)

时间:2010-03-02 14:45:20

标签: c++ windows shell windows-7

我已经写了一个shell扩展(由The Complete Idiot's Guide to Writing Shell Extensions引导),它应该工作,直到我升级到Windows 7(32位)。

现在,函数DragQueryFile

UINT uNumFiles = DragQueryFile(hDrop,0xFFFFFFFF,NULL,0);

返回正确数量的选定文件,直到数字大于16.然后总是返回16。

我已经在XP(32)和Vista(32)中进行了测试,它可以在Windows7(32/64)中运行,但它没有。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:3)

在调用命令之后,在shell调用IContextMenu.InvokeCommand()之前,再次使用完整文件列表调用IShellExtInit.Initialize()方法。然后,您有机会再次收集文件列表。 您不能依赖第一次Initialize()调用的文件计数,因此如果它超过16,请不要在上下文菜单项中显示它。

答案 1 :(得分:1)

我看过一些帖子讨论了资源管理器中16个文件的限制,并声称问题已经解决,更改了 MultipleInvokePromptMinimum 的注册表值。这不是必需的,因为在调用 invokeCommand 函数之前,在第二次调用中检索完整的文件列表。 我在删除此注册表项后,通过在注册表项中写入初始化函数中读取的所有文件来证明这一点。这样,每次调用initialize时都会更新文件列表。