Разрешить двойному щелчку пользовательского файла и открывать мое приложение при загрузке его данных

1

Так же, как когда вы делаете ссылку в окнах, чтобы открыть.txt файл, он может открыть NotePad.exe и Word.exe при загрузке текста из файла в редактор. Как я могу сделать это с помощью своего настольного приложения. У меня есть настраиваемый тип файла для него с расширением.mmi. Я хочу, чтобы, когда пользователь дважды щелкнет этот тип файла, он не только откроет мое приложение, но и загрузит данные в него в соответствующие области моего приложения. Я понимаю, как установить тип настраиваемого файла для моих настроек приложения, но где я потерял, как получить информацию о файле, которая запускает открытие моего приложения, чтобы я мог получить данные из него.

Например. Если я открываю.html и выбираю использовать notepad.exe, html теперь загружается в только что открытом текстовом редакторе.

Это для приложения "От приложения", а не для консольного приложения, которое начинается с основного файла с аргументами, что может помочь или изменить что-либо.

Пример:

public partial class FormDashboard : Form
{
    public FormDashboard()
    {
        InitializeComponent();
    }

    private void FormDashboard_Load(object sender, EventArgs e)
    {


         //I want to get what file trigger the app to open here, and apply the data accordingly throurght the forms application.

    }
Теги:
desktop-application
file-type

3 ответа

3
Лучший ответ

Ответ на ваш вопрос ничем не отличается от приложения WinForms и консольного приложения.

Путь .mmi файла, инициировавшего ваше приложение будет args[0] в вашем приложении Main метод (предполагается, что подпись Main(string[] args)).

Поэтому, зная, что файл .mmi был дважды щелкнул, чтобы вызвать ваше приложение, по сути, будет бесплатным - после того, как вы попросите Windows открыть файлы .mmi с вашим приложением.

Вот пример - где я просто использовал текстовый файл Test.mmi и просто консольное приложение ConsoleApplication1 для PoC:

/*
 * Program.cs
 */

using System;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                // Open and display the text in the double-clicked .mmi file.
                Console.WriteLine(File.ReadAllText(args[0]));
            }

            // Pause for 5 seconds to see the double-clicked file text.
            Thread.Sleep(5000);
        }
    }
}

После того, как Windows .mmi файлы .mmi с ConsoleApplication1.exe, ConsoleApplication1.exe отобразит текст в Test.mmi (Whatever....), когда я дважды Test.mmi нему:

Изображение 174551

Единственное, что может отличаться от предложенного PoC, - это то, что вам нужно, с файловым путем, который входит в качестве args[0].

  • 0
    Я понимаю, что пользователь клиента будет связан с ним, но я хочу, чтобы эти данные в этом файле передавались через приложение. Например, если это html-файл с некоторыми дополнительными полями разделителя, я хочу загрузить html в текстовую область и заполнить данные из полей delim в файле, где они необходимы.
  • 0
    @Casey: так как вы спросили, как получить файл, по которому дважды щелкнули мышью, чтобы вызвать ваше приложение, в этом и заключается фокус ответа. То, что ваше приложение делает с файлом, по которому дважды щелкнули мышью, - это совсем другое дело ... к нему следует обращаться по мере необходимости (то есть к другому вопросу, если это необходимо).
Показать ещё 1 комментарий
3

Имя файла будет передано вашему приложению в качестве первого параметра командной строки. Вы можете воспользоваться этим кодом:

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        //do stuff with args[0]
    }
}

Или, если вы находитесь в WPF, обработайте событие Application.Startup и получите параметр из e.Args.

  • 0
    Разве это не только для консольных приложений, так как загрузка приложения формы будет иметь конструктор Form (), который выполняет только initilization ()?
  • 1
    Как я прокомментировал другой ответ, ищите Program.cs в вашем проекте. Ваш метод Main с аргументами должен быть там.
Показать ещё 3 комментария
1

Я думаю, вам нужно только прочитать аргументы командной строки. Файл, который нужно открыть, должен быть вашим уникальным аргументом.

 class MyClass
    {
    static void Main(string[] args)

    {
         // args[0] = file name to be opened by your application
  • 0
    Я понимаю, как это было бы для консольного приложения, использующего main (string [] args), но как насчет приложения Forms. Я не могу получить информацию о файле из методов Form () или Form_Load (Отправитель объекта, EventArgs e).
  • 3
    Если вы в Windows Forms, это точно так же. Посмотрите в Program.cs, ваш метод Main должен быть там.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню