2011-01-06 1 views
7

Я написал небольшое приложение WPF, которое, когда «закрыто», сводится к системному лотку (требование клиента). Двойной щелчок возвращает его обратно, или щелчок правой кнопкой мыши дает контекстное меню для выхода.Максимальное применение в системном трее?

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

Что нужно (в C#), чтобы заставить приложение максимизировать исполняемый экземпляр, если пользователь делает это, а не запускает новый экземпляр?

Спасибо!

+2

искать объекты Mutex и захватывать активное окно. у меня нет кода передо мной, но это направление, которое вам нужно предпринять. - Я соврал, попробуйте [эту статью в отдельных экземплярах приложений .net] (http://www.ai.uga.edu/mc/SingleInstance.html) –

ответ

7

Этого answer от Jon тарелочек обсуждает использование мьютекса сделать это

мьютексом является путем. Это намного менее хрупким, чем при использовании имен процессов и т.д.

Однако, вам нужно убедиться, что мьютекс не мусора. В случае услуги (что событие приводом, а не имеющие «основной» метод, который работает до завершения), то самый разумный способ сделать это, вероятно, поставить его в статической переменной .

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

Мэтью Бриндли дает этот пример в тот же самый вопрос для his answer

[STAThread] 
static void Main() 
{ 
    using(Mutex mutex = new Mutex(false, "Global\\" + appGuid)) 
    { 
     if(!mutex.WaitOne(0, false)) 
     { 
     MessageBox.Show("Instance already running"); 
     return; 
     } 

     Application.Run(new Form1()); 
    } 
} 

Чтобы максимизировать другое приложение, вам нужно отправить ему сообщение, чтобы максимально увеличить. См. Эту статью по адресу message sending

+0

Отлично, спасибо! – Nicros

+0

Имейте, чтобы убрать мой Идеальный! statement - это проверяет запуск экземпляра и не запускает новый, но не отвечает на вопрос о том, как максимизировать это приложение в системном лотке без запуска нового экземпляра. – Nicros

+0

Pfft. Позвольте мне убрать мою ретракцию - пропустил ссылку внизу для сообщения ... проверит ее. – Nicros