如何检测使用GetOpenFileName创建的文件对话框?

时间:2011-09-02 16:06:09

标签: c++ visual-c++ windows-vista getopenfilename

我参与开发包含某些文件夹中文件列表的命名空间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?

1 个答案:

答案 0 :(得分:0)

旧的GetOpenFileName对话框从未设计为处理不同父文件夹中的多个文件。

尝试通过检测所使用的打开对话框的类型来解决此问题是错误的,GetOpenFileName可能只是新界面上的包装器。

调用IShellFolder :: EnumObjects方法时,请查找SHCONTF_FLATLIST标志。如果未设置该标志,则应恢复为某种类型的简单模式,其中所有项目具有相同的父项。我意识到这不是旗帜的用途,但它可能是最好的非黑客解决方案。