По-видимому простая задача: я хочу открыть стандартный диалог Windows для выбора приложения, которое будет использоваться для открытия файла, а затем дождаться завершения этого приложения. Интернет говорит, что ShellExecuteEx - это путь.Как реализовать команду «Открыть с помощью» с помощью 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, даже если новый процесс был действительно запущен.
Как это можно исправить? Заранее спасибо!
То, что вы пытаетесь, невозможно. Нет никакой гарантии, что новый процесс будет использоваться. –
@ Давид: Спасибо за ответ! Хорошо, но можно ли получить ручку хотя бы в тех случаях, когда был использован новый процесс? –
Я не знаю об этом –