“Открыть с помощью” моей программы. Как сделать?

274
17 июля 2017, 13:24

В Windows при двойном клике на фото открывается программа для просмотра фотографий. Как мне сделать это в своей программе? Чтобы при двойном клике по фото эта фотография отображалась в <Image></Image>

Answer 1

Это многоходовый процесс.

Для начала, вам нужно настроить ассоциации файлов на клиентской машине, чтобы Windows знала, что при «запуске» картинки она должна открываться в вашем приложении. Прочитать, как именно работает механизм ассоциаций файлов (verbs), лучше всего на MSDN:

  • Verbs and File Associations
  • How File Associations Work

Теперь, настройка файловых ассоциаций должна происходить от имени администратора и один раз. Это значит, что её место — в инсталляторе вашей программы.

Инсталлятор можно создать при помощи Visual Studio. Для Visual Studio 2017, вам нужно для начала установить расширение Installer Projects через VS Marketplace:

Теперь создаём проект типа «инсталлятор». В нём добавляем ваше приложение для установки в Program Files:

Открываем редактор ассоциаций файлов

и добавляем нашу ассоциацию файлов:

Отлично. Теперь при «запуске» картинки ОС будет вызывать нашу программу (после инсталляции, разумеется!). Нам надо научить программу понимать имя файла, поданное на вход. Как это сделать, прекрасно расписано в соседнем ответе.

Дерзайте!

Answer 2

Можно таким образом:

Перегрузить конструктор public MainWindow():

namespace WpfApp2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {       
        public MainWindow()
        {
            InitializeComponent();
        }
        public MainWindow(string fileName)
        {
            InitializeComponent();
            if (!string.IsNullOrWhiteSpace(fileName) && File.Exists(fileName))
            {
                try
                {
                    image1.Source = new BitmapImage(new Uri(fileName));
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }
}

В App.xaml добавить StartUp:

<Application x:Class="WpfApp2.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp2"            
             Startup="App_Startup">
    <Application.Resources>
    </Application.Resources>
</Application>

В App.xaml.cs добавить метод App_Startup:

namespace WpfApp2
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        void App_Startup(object sender, StartupEventArgs e)
        {
            string fileName = e.Args?.FirstOrDefault();
            MainWindow mainWindow;
            if (!string.IsNullOrWhiteSpace(fileName))
                mainWindow = new MainWindow(fileName);
            else
                mainWindow = new MainWindow();
            mainWindow.Show();
        }
    }
}

После этого запускать нужные типы файлов с помощью своей программы.

READ ALSO
Потоковая передача HTML5 video (.webm) на rtmp сервер (.flv)

Потоковая передача HTML5 video (.webm) на rtmp сервер (.flv)

ЗдравствуйтеВстала задача записывать видео из браузера и передавать на rtmp сервер

369
Может ли Google специально делать свои сервисы (например YouTube) тормознутыми не в их браузере (Chrome)? [требует правки]

Может ли Google специально делать свои сервисы (например YouTube) тормознутыми не в их браузере (Chrome)? [требует правки]

JS у них во всех сервисах обфусцирован, поэтому я даже не пытался разобратьсяТак же могут использоваться и какие либо сложные серверные технологии

275
Очистка карты от маршрута при нажатии кнопки

Очистка карты от маршрута при нажатии кнопки

Нужно построить автомобильный и пешеходный маршруты через google maps по двум точкамЕсть два поля ввода (от и до), и две кнопки (автомобильный маршрут...

279
Вывод ошибки javascript в Gulp

Вывод ошибки javascript в Gulp

Помогите решить проблему с выводом ошибки javascript в gulp при помощи плагинов, которые выводят ошибку в отдельном окне, как notyficationДля less настроил,...

485