3

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

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

我想在对话框中将“某些路径”作为根路径,并限制导航到该文件夹​​,它只是子文件夹。我可以为此使用 lpfnHook 吗?

4

2 回答 2

2

如果您只针对 Vista+,您可以使用该IFileDialogEvents::OnFolderChanging方法完全阻止更改。

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

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

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

于 2012-05-10T09:43:13.843 回答
0

看看OFN_NOCHANGEDIR标志,虽然文档是这样说的:

如果用户在搜索文件时更改了目录,则将当前目录恢复为其原始值。

该标志对 GetOpenFileName 无效。

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

于 2012-05-09T16:55:56.527 回答