如何将文件对话框限制为特定路径

How to restrict FileDialog to specific path

本文关键字:路径 文件 对话框      更新时间:2023-10-16

是否可以将文件对话框(打开/保存)限制为特定文件夹是winapi?

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

我想在对话框中将"一些路径"作为根路径,并限制对此文件夹及其子文件夹的导航。我可以为此使用 lpfnHook 吗?

如果您仅定位 Vista+,则可以使用 IFileDialogEvents::OnFolderChanging 方法完全阻止更改。

对于较旧版本的 Windows,OpenFileDialog 允许您指定挂钩过程,您可以在其中选取CDN_FOLDERCHANGE通知。虽然我看不到任何禁止更改的消息,但您可以发布一条消息告诉它"返回",或者只是禁用"确定"按钮。

另一种选择是处理CDN_FILEOK通知并拒绝所需目录之外的路径。

有关挂钩过程的更多详细信息,请参阅此 MSDN 文章。这个问题还讨论了在打开的对话框中更改目录。

查看OFN_NOCHANGEDIR标志,尽管文档是这样说的:

将当前目录还原为其原始值(如果用户) 在搜索文件时更改了目录。

此标志对 GetOpenFileName 无效。

编辑:再次阅读您的问题,我猜您不希望用户从该目录向上导航,不确定 GetOpen文件名是否可以这样做,您可能必须使用目录列表视图创建自己的对话框并以这种方式限制它们。