Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как запретить multiple instaces? / 6 сообщений из 6, страница 1 из 1
15.02.2018, 18:08
    #39602578
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить multiple instaces?
Сделал так, как здесь описано:
Код: 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
15.02.2018, 19:19
    #39602627
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить multiple instaces?
Ролг Хупин,
Win api. Поиск окна по имени класса или подписи и потом MESSAGE ему.
Но может права понадобятся.
Вообще, у вас они оба не работают совместно или юзвери дважды кликают?))
...
Рейтинг: 0 / 0
15.02.2018, 19:23
    #39602631
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить multiple instaces?
Petro123Ролг Хупин,
Win api. Поиск окна по имени класса или подписи и потом MESSAGE ему.
Но может права понадобятся.
Вообще, у вас они оба не работают совместно или юзвери дважды кликают?))

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

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

Код: 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
16.02.2018, 06:05
    #39602696
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить multiple instaces?
Ролг Хупин,

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


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