Открываем файл с помощью ShellExecuteEx() — при этом если на расширение не зарегистрировано ничего, показываем Open With диалог.
Как отследить, что пользователь нажал на Cancel в диалоге?
Крайне желательно чтобы это происходило в рамках одного вызова, который бы не возвращал управление пока пользователь не сделает выбор в "Open With".