Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Activating the main form of a single instance application

Tags:

c#

.net

winforms

In a C# Windows Forms application I want to detect if another instance of the application is already running. If so, activate the main form of the running instance and exit this instance.

What is the best way to achieve this?

like image 587
Dean Hill Avatar asked Sep 09 '08 13:09

Dean Hill


2 Answers

Scott Hanselman answers on you question in details.

like image 157
aku Avatar answered Oct 14 '22 15:10

aku


Here is what I'm currently doing in the application's Program.cs file.

// Sets the window to be foreground
[DllImport("User32")]
private static extern int SetForegroundWindow(IntPtr hwnd);

// Activate or minimize a window
[DllImportAttribute("User32.DLL")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_RESTORE = 9;

static void Main()
{
    try
    {
        // If another instance is already running, activate it and exit
        Process currentProc = Process.GetCurrentProcess();
        foreach (Process proc in Process.GetProcessesByName(currentProc.ProcessName))
        {
            if (proc.Id != currentProc.Id)
            {
                ShowWindow(proc.MainWindowHandle, SW_RESTORE);
                SetForegroundWindow(proc.MainWindowHandle);
                return;   // Exit application
            }
        }


        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
    catch (Exception ex)
    {
    }
}
like image 27
Dean Hill Avatar answered Oct 14 '22 16:10

Dean Hill