如果由于C++中没有文件关联而导致ShellExecute失败,如何打开窗口的默认对话框?

Age*_* DM 2 winapi shellexecute fileopendialog

只要文件具有正确的关联,我就可以使用Windows ShellExecute函数打开一个没有问题的文件.

如果不存在关联,我想使用默认的Windows对话框打开文件:

图片

这可能吗?如果是这样的话?

And*_*ers 6

显示该对话框的文档化 方法是使用openas动词.

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED|COINIT_DISABLE_OLE1DDE);
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.fMask = SEE_MASK_NOASYNC;
sei.nShow = SW_SHOWNORMAL;
sei.lpVerb = "openas";
sei.lpFile = "C:\\yourfile.ext";
ShellExecuteEx(&sei);
Run Code Online (Sandbox Code Playgroud)

如果你检查下,HKEY_CLASSES_ROOT\Unknown\shell\openas你会发现这与在shell32中调用(未记录的)OpenAs_RunDLL导出相同.