Змінюй хід війни! Допомагай ЗСУ!

c# активация уже запущенного приложения вместо повторного запуска

  • Автор теми Автор теми Kvest
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 30.03.2007
Повідом.: 1279
c# активация уже запущенного приложения вместо повторного запуска

В общем стоит задача запретить запуск приложения более 1 раза, а при повторных попытках просто активировать уже запущенное. Запретить можно так:

static void Main( string[] args )
{
bool ok;
m = new System.Threading.Mutex( true, "my_kewl_application", out ok );
if( !ok ) return;

Application.Run( new frmMain() );

GC.KeepAlive( m );
}

А вот как найти запущенный экземпляр и переключится на него непонятно. В С++ это делается просто, вопрос как это сделать в с#?
 
Приведённый код не совсем правилен... хотя работать должен.
Как я понял, нужно просто активировать окно запущенного процесса.
Скорее всего Вы имется ввиду Вин ОСь. ;)

Нашёл у себя старый код, должен работать (наверное ;))
Код:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices; //для вызова Вин API
namespace Find
{

    public partial class Form1 : Form
    {
        //для FindWindow, чтобы найти хендл нужного окна
        [DllImportAttribute("User32.dll")]
        private static extern int FindWindow(String ClassName, String WindowName);

        //SetForeground, чтоб активировать окно по хендлу
        [DllImportAttribute("User32.dll")]
        private static extern IntPtr SetForegroundWindow(int hWnd);

        
        public Form1()
        {
            Check();
            InitializeComponent();
        }

        private void Check
        {
            //поиск окна по заголовку
            int hWnd = FindWindow(null, "Заголовок моей проги");
            if (hWnd > 0) //нашли
            {
                SetForegroundWindow(hWnd); //активировали
            }
            else//не нашли
            {
                MessageBox.Show("Прога не запущена");
            }      
        }
    }
}

Можно и через Process копать в System.Diagnostics.Process

Если что - обращайтесь.

Кстати, программист .Net ищет работу (.net, .net cf, sql, разработка для под win ce, win phone, win mobile).
 
Спасибо! То что надо ;)
 
Я пытался сделать это, не используя WinAPI, вот что вышло:

Код:
        static void Main()
        {
            if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
            {
                //здесь должен быть код аткивизации уже запущенной проги.
                return;
            }
            Application.Run(new Form1());
        }
Это работает, но вот как активизировать уже запущенную прогу, используя .Net ?
 
вообще много тысяч лет назад микрософты придумали для этого DDE..
 
Назад
Зверху Знизу