powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
9 сообщений из 9, страница 1 из 1
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38361313
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый уважаемые,

В Partial Friend Class MyApplication значение Me.IsSingleInstance = True

Где нужно прописать логику? приветствуются любые идеи.

Обращаюсь за вашей помощью потому как гугл подсказки не дал а у самого ноль идей.
...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362218
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
господа плизз, хоть какие нибудь идеи...

я переодически возвращаюсь к этому вопросу, что-то пробую... но пока без успешно.

Если плохо обрисовал ситуацию то:

1 Приложение запущено и оно свернуто в трей
2 Клик по ярлыку не должен открывать еще 1 окно а должен подымать приложение из трея.
...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362230
Фотография Torre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что же ты в выходной спрашиваешь...



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
#region NotifyIcon

        private void btnHide_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            var showMenuItem = new MenuItem("Открыть", new EventHandler(ShowForm));
            var statMenuItem = new MenuItem("Статистика", new EventHandler(ShowStatForm));
            var exitMenuItem = new MenuItem("Выход", new EventHandler(Exit));

            notifyIcon = new NotifyIcon
                {
                    Icon = Properties.Resources.Sms,
                    ContextMenu = new ContextMenu(new MenuItem[] { showMenuItem, statMenuItem, exitMenuItem }),
                    Visible = true
                };
            
            notifyIcon.Click += NotifyIcon_Click;
        }
        
        /// <summary>
        /// Shows baloon
        /// </summary>
        private void NotifyIcon_Click(object sender, EventArgs e)
        {
            notifyIcon.Visible = false;
            this.Visible = true;
            Show();
        }

        private StringBuilder GetStatInfo()
        {
            var stringBuilder = new StringBuilder();

            foreach (var t in transStat)
            {
                stringBuilder.AppendLine(t);
            }

            stringBuilder.AppendLine();

            return stringBuilder;
        }

        private void ShowForm(object sender, EventArgs e)
        {
            notifyIcon.Visible = false;
            this.Visible = true;
            transStat.Clear();
            Show();
        }

        private void ShowStatForm(object sender, EventArgs e)
        {
            var statForm = new StatForm(GetStatInfo());
            statForm.ShowDialog(this);
            statForm.Dispose();
        }

        #endregion



...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362513
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Torre,

Спасибо за код, но видно я плохо объяснил что мне нужно.

Как раз то что ты мне дал это у меня есть и работает без проблем.

Попробую объяснить еще раз получше.

1 Программа может свертываться в трей по кнопке btnHide_Click - имеется и отлично работает... тут проблем нет.
2 Имеется ярлык на рабочем столе от этой программы.

Задача:

Если программа скрыта в трее или свернута то щелчек по ярлыку должен или восстановить из трея.

а)
Предпологаю что событие нужно перехватить в Application.Designer.vb - здесь не уверен. точно ли это так? если нет то в каком месте?

б)
Какое событие? что происходит в момент щелчка по ярлыку и попытки запуска приложения когда выставленно Me.IsSingleInstance = True


Еще раз огромное спасибо Torre за то что откликнулся.
...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362638
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь понятно. Тогда вам надо поднять Mutex на старте другого инстанса, и когда он обнаружит, что такой процесс уже есть, дернуть ShowWindow из user32.dll

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
internal static class Program
    {
        [STAThread]
        private static void Main()
        {
            using (var mutex = new Mutex(false, "MyApp.exe"))
            {
                if (!mutex.WaitOne(TimeSpan.FromSeconds(3), false))
                {
                    MessageBox.Show(
                        "Программа уже запущена!",
                        "Программа уже запущена!",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);
                    return;
                }

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());
            }
        }
    }



Используйте эту функцию , можно даже TopMost
...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362640
Фотография Torre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот вам еще клю: Process.MainWindowHandle Property
...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362651
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skoleТогда вам надо поднять Mutex
Широко распространенное полу-решение. Mutex только позволяет установить факт повторного запуска, вся остальная работа - возня с пинвоками. Нужно использовать EventWaitHandle (пример см. здесь) - ему достаточно просигналить, чтобы он сделал всю нужную работу в уже запущенном экземпляре. Если не требуется в уже запущенный экземпляр передавать параметры ком. строки, то из кода по ссылке можно выкинуть всё, связанное с remoting, и тогда решение станет совсем простым.
...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362652
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
    #38362698
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой как неожиданно приятно с утра.

Всем огромное спасибо!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Восстановить приложение из system tray по нажатию на ярлык вместо открытия второго.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]