"Открыть с помощью..." в существующей форме


Я создаю приложение, которое должно открывать файлы из Explorator. Конечно, я могу сделать это с помощью аргументов, но Explorator открывает новое приложение для каждого файла. Я хотел бы, например, отправить аргументы в существующее приложение - не открывать новое.

1 ответ

Решение

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

Есть некоторые классы, которые могут помочь вам в.NET Framework, проще всего добавить ссылку на Microsoft.VisualBasic (должен быть в GAC... и не обращать внимания на название, это работает и для C#), затем вы можете получить из WindowsFormsApplicationBase, который делает весь шаблонный код для вас.

Что-то вроде:

public class SingleAppInstance : WindowsFormsApplicationBase
{
  public SingleAppInstance()
  {
      this.IsSingleInstance = true;    
      this.StartupNextInstance += StartupNextInstance;
  }

  void StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
  {
      // here's the code that will be executed when an instance
      // is opened.

      // the command line arguments will be in e.CommandLine
  }

  protected override void OnCreateMainForm()
  {
    // This will be your main form: i.e, the one that is in
    // Application.Run() in your original Program.cs
    this.MainForm = new Form1();
  }
}

Тогда в вашем Program.cs, Вместо того, чтобы использовать Application.Run, при запуске мы делаем:

[STAThread]
static void Main()
{
  string[] args = Environment.GetCommandLineArgs();
  var singleApp = new SingleAppInstance();
  singleApp.Run(args);
}
Другие вопросы по тегам