我参与开发包含某些文件夹中文件列表的命名空间shell扩展(NSE)。我在Window Vista上使用标志OFN_ALLOWMULTISELECT
创建的打开文件对话框(OFD)时遇到了一些问题。
如果应用程序使用使用IFileOpenDialog
创建的OFD,我的NSE可以正常工作。
如果应用程序使用使用GetOpenFileName
创建的OFD并且用户选择了一些文件,那么他会得到错误的结果,因为此函数返回字符串:
<Folder name>\0<File name 1>\0<File name2>\0\0
如果应用程序使用使用GetOpenFileName
创建的OFD,我必须在我的NSE中使用单一选择模式。
在我的NSE中是否有任何方法可以使用GetOpenFileName
创建OFD?
答案 0 :(得分:0)
旧的GetOpenFileName对话框从未设计为处理不同父文件夹中的多个文件。
尝试通过检测所使用的打开对话框的类型来解决此问题是错误的,GetOpenFileName可能只是新界面上的包装器。
调用IShellFolder :: EnumObjects方法时,请查找SHCONTF_FLATLIST
标志。如果未设置该标志,则应恢复为某种类型的简单模式,其中所有项目具有相同的父项。我意识到这不是旗帜的用途,但它可能是最好的非黑客解决方案。