Как ограничить FileDialog определенным путем


Можно ли ограничить диалог файлов(открыть/сохранить) определенной папкой winapi?

OPENFILENAME fileDialogSettings;
...
fileDialogSettings.lpstrInitialDir = "Some path";
...
if(GetOpenFileName(&fileDialogSettings))
{
}

Я хочу иметь" некоторый путь " в качестве корневого пути в диалоговом окне и ограничить навигацию по этой папке, и это только подпапки. Могу ли я использовать lpfnHook для этого?

2 2

2 ответа:

Если вы ориентируетесь только на Vista+, вы можете использовать IFileDialogEvents::OnFolderChanging метод полного блокирования изменений.

Для более старых версий Windows OpenFileDialog позволяет указать процедуру hook, в которой вы можете забрать CDN_FOLDERCHANGE уведомление. В то время как я не вижу никакого сообщения, чтобы запретить изменение, вы можете отправить сообщение, чтобы сказать ему, чтобы вернуться "назад", или просто отключить кнопку "ОК".

Другой вариант-обрабатывать CDN_FILEOK уведомление и откажитесь от путей вне вашего требуемого каталога.

Смотрите эту статью MSDN для получения более подробной информации о процедуре hook. этот вопрос также говорит об изменении каталога в открытом диалоге.

Посмотрите в OFN_NOCHANGEDIR флаг, хотя в документации сказано следующее:

Восстанавливает текущий каталог в исходное значение, если пользователь изменил каталог при поиске файлов.

Этот флаг неэффективен для GetOpenFileName.

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