1

我参与了命名空间外壳扩展(NSE)的开发,其中包含来自某些文件夹的文件列表。我在使用OFN_ALLOWMULTISELECTWindow Vista 上的标志创建的打开文件对话框 (OFD) 时遇到了一些问题。

如果应用程序使用IFileOpenDialog我的 NSE 创建的 OFD 工作正常。如果应用程序使用创建的 OFDGetOpenFileName并且用户选择了一些文件,那么他会得到不正确的结果,因为此函数返回字符串:

<Folder name>\0<File name 1>\0<File name2>\0\0

如果应用程序使用使用创建的 OFD,我必须在 NSE 中使用单选模式GetOpenFileName

问题是:

这里有什么方法可以在我的 NSE 中检测到 OFD 是使用创建的GetOpenFileName吗?

4

1 回答 1

0

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

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

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

于 2017-02-11T15:24:01.353 回答