Как определить, что файл диалога был создан с помощью GetOpenFileName?

Я принимаю участие в разработке расширения оболочки пространства имен ( NSE), содержащего список файлов из некоторых папок. У меня есть некоторые проблемы с диалогом открытия файла (OFD), созданным с флагом OFN_ALLOWMULTISELECT на Windows Vista.

Если приложение использует OFD, созданный с использованием IFileOpenDialog мой NSE работает нормально. Если приложение использует OFD, созданный с использованием GetOpenFileName и пользователь выбирает некоторые файлы, тогда он получает неправильный результат, потому что эта функция возвращает строку:

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

Я должен использовать режим одиночного выбора в моем NSE, если приложение использует OFD, созданный с использованием GetOpenFileName,

Вопрос в том:

Вот какой-нибудь способ обнаружить в моем NSE, что OFD был создан с использованием GetOpenFileName?

1 ответ

Старое диалоговое окно GetOpenFileName никогда не предназначалось для обработки нескольких файлов в разных родительских папках.

Попытка исправить это путем определения типа используемого открытого диалога неверна, и GetOpenFileName может быть просто оболочкой поверх нового интерфейса.

Когда ваш метод IShellFolder::EnumObjects вызывается, ищите SHCONTF_FLATLIST флаг. Если флаг не установлен, вам следует вернуться к простому режиму, в котором все элементы имеют одного и того же родителя. Я понимаю, что это не совсем то, для чего предназначен флаг, но, вероятно, это лучшее нехакерское решение.

Другие вопросы по тегам