Открыть значок в системном трее при нажатии на ярлык на рабочем столе - PullRequest
0 голосов
/ 07 марта 2012

Я работаю над WinForms.Теперь я хочу реализовать одну вещь: когда я нажму на ярлык настольного приложения, а затем приложение будет в свернутом состоянии, оно откроется из системного трея (не создавать новый экземпляр).

1 Ответ

1 голос
/ 07 марта 2012

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

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

Ваше решение состоит из двух вещей:

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

1.Способность вашего приложения понять, что другой его экземпляр уже запущен.
Это просто в .NET.Когда ваше приложение откроется, используйте класс Mutex.Это общесистемная блокировка, в остальном похожая на Monitor.

Пример:

// At app startup:
bool createdNew;
var mutex = new Mutex(true, Application.ProductName, out createdNew);
if (!createdNew)
{
    // Use IPC to tell the other instance of the app to show it's UI
    // Return a value that signals for the app to quit
}

// At app shutdown (unless closing because we're not the first instance):
mutex.ReleaseMutex();

2.Межпроцессное взаимодействие
Существует несколько способов сделать IPC в .NET.WCF один, хотя и довольно тяжелый.Именованные каналы, вероятно, лучший выбор для вас, хотя это настолько простое требование, что базовые сообщения сокетов также должны работать.

Вот ссылка на вопрос о подходящих методах IPC в .NET, чтобы помочь вам: Каков наилучший выбор для межпроцессного взаимодействия .NET?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...