Shell扩展:在Windows 7中,DragQueryFile最多返回16个。

3

我编写了一个Shell扩展(参考《写Shell扩展的完全白痴指南》),在Windows 7(32位)之前,它能够正常工作。

现在,函数DragQueryFile

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

返回选定文件的正确数量,直到数量超过16。然后始终返回16。

我已在XP(32位)和Vista(32位)上进行了测试,它可以工作,在Windows7(32/64位)上无法工作。

有任何想法吗?

谢谢。


这是Windows 7的设计 - 这是一个愚蠢的尝试来提高性能。请参见:http://msdn.microsoft.com/en-us/library/dd758093%28VS.85%29.aspx 我很想找到一个解决方法; 有人有想法吗? - cetcet
2个回答

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接