Как я могу показать диалог «Открыть с»?
Есть ли простой способ открыть диалоговое окно «Открыть с»?
- Исключать определенные расширения файлов при получении файлов из каталога
- Как #include работает в C ++?
- Почему C # не предоставляет ключевое слово 'friend' стиля C ++?
- Каким образом исходный шаблон StartCoroutine / yield действительно работает в Unity?
- Почему коротко преобразовать в int перед арифметическими операциями в C и C ++?
- Обнаруживать, работает ли программа с полными правами администратора
- Какова цель ключевого слова «final» в C ++ 11 для функций?
- ожидаемая очередь на основе задач
Некоторое обратное проектирование с ProcExp показало рабочую строку rundll32.exe. Вот пример программы, которая его использует:
using System; using System.Diagnostics; using System.IO; class Program { static void Main(string[] args) { ShowOpenWithDialog(@"c:\temp\test.txt"); } public static void ShowOpenWithDialog(string path) { var args = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "shell32.dll"); args += ",OpenAs_RunDLL " + path; Process.Start("rundll32.exe", args); } }
Протестировано на Win7, я не могу догадаться, насколько хорошо это будет работать в других версиях Windows.
Это должно сделать трюк …
var processInfo = new ProcessStartInfo(fileName); processInfo.Verb = "openas"; Process.Start(processInfo);
Хотя Одед делает большой вывод – не зная точно, как / где вы собираетесь использовать такую функциональность, это может не быть ответом на вашу ситуацию.
Последние комментарии к этому ответу показывают, что я был не очень подробным в первую очередь. Проблема будет возникать, если вы попытаетесь openas
файл, у которого уже есть open
глагол, определенный для этого типа файла. Аналогичным образом, если вы попытаетесь open
файл, который не имеет определенного глагола, возникнут проблемы. Этот вопрос будет:
Win32Exception: приложение не связано с указанным файлом для этой операции
В верхней части моей головы я предложил Томасу, чтобы использовать этот вид кода в производственном приложении, вам нужно быть основательным и, возможно, проверять реестр или иным образом выяснять, можно или не открывать файл с помощью любой данный глагол. Это может быть проще, если вы рассмотрите ProcessStartInfo.Verbs
: это, как только имя fileName
будет установлено, предоставит вам набор возможных глаголов, связанных с типом файла. Это должно облегчить определение того, что делать с каким файлом.
Чтобы обернуть, как я упомянул Томасу, вам нужно будет позаботиться и добавить некоторую сложность / интеллект в ваше приложение – этот ответ, безусловно, не является решающим решением.
С помощью
System.Diagnostics.Process.Start(path);
Файл будет открыт с помощью программы по умолчанию, если программа по умолчанию не определена, откроется диалог открытия с диалоговым окном.
Вы можете использовать функцию:
[DllImport("shell32.dll", SetLastError = true)] extern public static bool ShellExecuteEx(ref ShellExecuteInfo lpExecInfo);
У вас есть пример, чтобы использовать эту функцию: эта ссылка
В схеме кода « Все в одном» представлено множество примеров оболочек . Возможно, вы можете взглянуть на них, чтобы увидеть, есть ли у примера функции, которые вы хотите иметь.