Как определить, что файл диалога был создан с помощью 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
флаг. Если флаг не установлен, вам следует вернуться к простому режиму, в котором все элементы имеют одного и того же родителя. Я понимаю, что это не совсем то, для чего предназначен флаг, но, вероятно, это лучшее нехакерское решение.