看似简单的任务:我想打开标准 Windows 对话框以选择用于打开文件的应用程序,然后等待该应用程序完成。互联网告诉 ShellExecuteEx 是要走的路。
好的,代码如下:
SHELLEXECUTEINFO sei;
::ZeroMemory(&sei,sizeof(sei));
sei.cbSize = sizeof(sei);
sei.lpFile = L"path/to/document";
sei.lpVerb = L"openas";
sei.lpParameters = L"";
sei.nShow = SW_SHOW;
sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_INVOKEIDLIST ;
BOOL ret = ::ShellExecuteEx(&sei);
DWORD waitResult = ::WaitForSingleObject(sei.hProcess, INFINITE);
但它不起作用:指定 SEE_MASK_INVOKEIDLIST 标志使 hProcess 始终为 NULL,即使确实启动了新进程。
如何解决这个问题?提前致谢!