powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как запретить multiple instaces?
6 сообщений из 6, страница 1 из 1
Как запретить multiple instaces?
    #39602578
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так, как здесь описано:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
static void Main() 
         { 
             bool first = false; 
             m = new Mutex(true, Application.ProductName.ToString(), out first); 
             if ((first)) 
             { 
                 Application.EnableVisualStyles(); 
                 Application.SetCompatibleTextRenderingDefault(false); 
                 Application.Run(new Form1()); 
                 m.ReleaseMutex(); 
             } 
             else 
             { 
               MessageBox.Show("Application" + " " + Application.ProductName.ToString() + " "  +"already running"); 
             } 
         } 



Но хотелось бы такого: брингнуть существующее активное приложение перед выходом из второго, после обнаружения, что уже есть активное.
Как такое сделать?
...
Рейтинг: 0 / 0
Как запретить multiple instaces?
    #39602627
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
Win api. Поиск окна по имени класса или подписи и потом MESSAGE ему.
Но может права понадобятся.
Вообще, у вас они оба не работают совместно или юзвери дважды кликают?))
...
Рейтинг: 0 / 0
Как запретить multiple instaces?
    #39602631
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ролг Хупин,
Win api. Поиск окна по имени класса или подписи и потом MESSAGE ему.
Но может права понадобятся.
Вообще, у вас они оба не работают совместно или юзвери дважды кликают?))

работают, просто два одновременно не нужны, всё из-за дурного юзера
...
Рейтинг: 0 / 0
Как запретить multiple instaces?
    #39602641
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинвсё из-за дурного юзера)))))
Бывает).
Поставь ему стиль Всегда наверху).
...
Рейтинг: 0 / 0
Как запретить multiple instaces?
    #39602675
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

я обычно такую стандартную для себя конструкцию использую:

Код: vbnet
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.
  Sub Main()
    Dim hwndTarget As IntPtr 'hwnd окна PrevInstance

    If InStr(Command, "/quit") > 0 Then 'закрывает myapp и выходит
      Dim Start_Time As Date
      Do
        hwndTarget = FindMyWindow(0) 'WINDOWTITLE_MYAPP
        If hwndTarget = IntPtr.Zero Then Exit Do
        PostMessage(hwndTarget, WS_CANCELMODE, 0, IntPtr.Zero)
        PostMessage(hwndTarget, WM_CLOSE, 0, IntPtr.Zero)
        Application.DoEvents()
        Start_Time = Now()
        Do
          Application.DoEvents()
          If IsWindow(hwndTarget) = IntPtr.Zero Then Exit Do
          If DateDiff("s", Start_Time, Now) > 10 Then
            Exit Sub
          End If
        Loop
      Loop
      Exit Sub
    End If

    'исключить запуск второго экземпляра приложения
    hwndTarget = FindMyWindow(0) 'WINDOWTITLE_MYAPP
    If hwndTarget <> IntPtr.Zero Then
      If IsIconic(hwndTarget) Then ShowWindow(hwndTarget, SW_RESTORE)
      SetForegroundWindow(hwndTarget)
      Exit Sub
    End If
    'все таки этот вариант надо отработать, т.к. есть шанс быстро щелкнуть 2 раза по иконке(до загрузки формы)
    If PrevInstance() Then Exit Sub

    Application.EnableVisualStyles() 'инициализация XP/Vista стиля

...

    Form1 = New frm1
    Application.Run(Form1)
  End Sub

  Public Function PrevInstance() As Boolean
    If Ubound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
      Return True
    Else
      Return False
    End If
  End Function



FindMyWindow(0) -ищет главную форму Form1 запущенного уже экземпляра
(1) по тексту в шапке перебор EnumWindows
(2) + я еще размещаю на форме visible=false child-контрол (обычно button), с хитрым .text (например "qwertyuio" -случайно не придумаешь), т.е. проверяется еще наличие этой абракадабры -через FindWindowEx

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

Если надо, код своего FindMyWindow(i) в принципе могу дать в аккуратном виде.
...
Рейтинг: 0 / 0
Как запретить multiple instaces?
    #39602696
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

читайте соседние темы: 21192718
Для винформс то, что по ссылке, вполне адаптируемо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как запретить multiple instaces?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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