如何运行文件资源管理器从c++程序和只显示某些文件在Windows上?



如果这个问题听起来有点模糊,我很抱歉。我正在用c++制作一个windows 11应用程序,我正在制作一个编辑器,我希望有一个上传某种类型文件的选项。假设有一个上传文件类型的按钮;我希望文件资源管理器打开时只显示所选类型的文件。

是否有可能直接从我的c++程序中做到这一点,或者我必须以这种方式使用文件资源管理器自己的过程?

经典的打开对话框允许您通过文件扩展名进行过滤:

WCHAR buffer[MAX_PATH];
OPENFILENAME ofn = {};
ofn.lStructSize = sizeof(ofn);
//ofn.hwndOwner = ...;
ofn.lpstrFilter = TEXT("Only text and log files*.TXT;*.LOG");
ofn.lpstrFile = buffer, ofn.nMaxFile = MAX_PATH, *buffer = '';
ofn.Flags = OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn)) DoSomethingWithFile(ofn.lpstrFile);

注意:高级用户可以在文件名字段中输入*来绕过此过滤器。您可能认为OFN_ENABLEINCLUDENOTIFY会给您更多的控制,但它不允许您过滤文件系统项。MSDN会建议你使用更新的Vista IFileDialog但是MSDN也提到了IFileDialog::SetFilter:

弃用。SetFilter在Windows 7中不再可用

(在我的测试中,它似乎确实有效(测试Windows 8和10))。

IFileDialog支持与GetOpenFileName相同的基本扩展过滤器,但除非您需要支持非文件系统项并打算按照IStream实现所有内容,否则它只是额外的工作。

相关内容