Здравствуйте! Господа, помогите, кто знает:
С#. В Program.cs пытаюсь не дать запуститься второму экземпляру приложения.
Это получается. А вот как воостановить первую копию, если она свернута в трее?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (CheckOneInstance.IsInstanceExist(true))//если экземпляр приложения уже выполняется
{
/****************
КАК???
************/return;
}
Application.Run(new FormMain());
}
Здравствуйте, Aimoplavi, Вы писали:
A>Здравствуйте! Господа, помогите, кто знает: A>С#. В Program.cs пытаюсь не дать запуститься второму экземпляру приложения. A>Это получается. А вот как воостановить первую копию, если она свернута в трее? A>
A> static void Main()
A> {
A> Application.EnableVisualStyles();
A> Application.SetCompatibleTextRenderingDefault(false);
A> if (CheckOneInstance.IsInstanceExist(true))//если экземпляр приложения уже выполняется
A> {
A> /****************
A> КАК???
A> ************/
A> return;
A> }
A> Application.Run(new FormMain());
A> }
A>
A>Заранее спасибо.
ShowWindow(/*Хэндл на главное окно предыдущей запущенной копии*/, SW_RESTORE);
V>ShowWindow(/*Хэндл на главное окно предыдущей запущенной копии*/, SW_RESTORE);
V>
ровно этот способ используется в самой функции CheckOneInstance(...)(если задать true параметр
"активизировать предыдущую копию"), однако если эта копия в трее (именно в трее, а не свернута в панель задач),
то ничего не происходит
Здравствуйте, Aimoplavi, Вы писали:
A>Здравствуйте, Visor2004, Вы писали:
V>>
V>>ShowWindow(/*Хэндл на главное окно предыдущей запущенной копии*/, SW_RESTORE);
V>>
A>ровно этот способ используется в самой функции CheckOneInstance(...)(если задать true параметр A>"активизировать предыдущую копию"), однако если эта копия в трее (именно в трее, а не свернута в панель задач), A>то ничего не происходит
А код, который прячет окно при сворачивании в трей можешь привести?
V>>А код, который прячет окно при сворачивании в трей можешь привести?
A>Да вот собственно...2 строки
A>private void FormMain_Resize(object sender, EventArgs e) A> {
A> if (FormWindowState.Minimized == WindowState && settings.tray) A> { A> notifyIcon1.Visible = true; A> Hide(); A> }
A> if (!smenaVida) //если это пользователь тащит A> { A> ... A> }
A> }
Тогда надо использовать не SW_RESTORE, а SW_SHOW константу
Здравствуйте, Visor2004, Вы писали:
V>Здравствуйте, Aimoplavi, Вы писали:
V>Тогда надо использовать не SW_RESTORE, а SW_SHOW константу
Но это не совсем гламурно, поскольку для программы это нечто вроде хака =)Если она ограничивает меню при сворачивании в трей, то при таком способе активации , она не узнает об изменениях должным образом. По-хорошему нужно использовать IPC, допустим именованный Mutex для оповещения о пожелании развернуть остальные экземпляры программы из трея.