Восстановить экземпляра приложния из трея
От: Aimoplavi  
Дата: 24.02.09 07:55
Оценка:
Здравствуйте! Господа, помогите, кто знает:
С#. В Program.cs пытаюсь не дать запуститься второму экземпляру приложения.
Это получается. А вот как воостановить первую копию, если она свернута в трее?
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (CheckOneInstance.IsInstanceExist(true))//если экземпляр приложения уже выполняется
            {
                /****************
                КАК???
                ************/
                return;
             
            }     
            Application.Run(new FormMain());
        }

Заранее спасибо.

24.02.09 11:26: Перенесено модератором из 'Пользовательский интерфейс: проектирование, usability' — Хитрик Денис
Re: Восстановить экземпляра приложния из трея
От: Visor2004  
Дата: 24.02.09 09:20
Оценка:
Здравствуйте, 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);
Помните!!! ваш говнокод кому-то предстоит разгребать.
Re[2]: Восстановить экземпляра приложния из трея
От: Aimoplavi  
Дата: 24.02.09 18:17
Оценка:
Здравствуйте, Visor2004, Вы писали:

V>

V>ShowWindow(/*Хэндл на главное окно предыдущей запущенной копии*/, SW_RESTORE);

V>


ровно этот способ используется в самой функции CheckOneInstance(...)(если задать true параметр
"активизировать предыдущую копию"), однако если эта копия в трее (именно в трее, а не свернута в панель задач),
то ничего не происходит
Re[3]: Восстановить экземпляра приложния из трея
От: Visor2004  
Дата: 25.02.09 08:38
Оценка:
Здравствуйте, Aimoplavi, Вы писали:

A>Здравствуйте, Visor2004, Вы писали:


V>>

V>>ShowWindow(/*Хэндл на главное окно предыдущей запущенной копии*/, SW_RESTORE);

V>>


A>ровно этот способ используется в самой функции CheckOneInstance(...)(если задать true параметр

A>"активизировать предыдущую копию"), однако если эта копия в трее (именно в трее, а не свернута в панель задач),
A>то ничего не происходит

А код, который прячет окно при сворачивании в трей можешь привести?
Помните!!! ваш говнокод кому-то предстоит разгребать.
Re[4]: Восстановить экземпляра приложния из трея
От: Aimoplavi  
Дата: 25.02.09 19:54
Оценка:
V>А код, который прячет окно при сворачивании в трей можешь привести?

Да вот собственно...2 строки

private void FormMain_Resize(object sender, EventArgs e)
{


if (FormWindowState.Minimized == WindowState && settings.tray)
{
notifyIcon1.Visible = true;
Hide();
}


if (!smenaVida) //если это пользователь тащит
{
...
}



}
Re[5]: Восстановить экземпляра приложния из трея
От: Visor2004  
Дата: 26.02.09 10:25
Оценка:
Здравствуйте, Aimoplavi, Вы писали:



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 константу
Помните!!! ваш говнокод кому-то предстоит разгребать.
Re[6]: Восстановить экземпляра приложния из трея
От: Pavel M. Россия  
Дата: 26.02.09 11:08
Оценка:
Здравствуйте, Visor2004, Вы писали:

V>Здравствуйте, Aimoplavi, Вы писали:


V>Тогда надо использовать не SW_RESTORE, а SW_SHOW константу


Но это не совсем гламурно, поскольку для программы это нечто вроде хака =)Если она ограничивает меню при сворачивании в трей, то при таком способе активации , она не узнает об изменениях должным образом. По-хорошему нужно использовать IPC, допустим именованный Mutex для оповещения о пожелании развернуть остальные экземпляры программы из трея.
--------------------------
less think — do more
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.