Prevent Multiple Instances for Windows Application in .NET

By Raghavendra U Jul 13, 2010
To prevent Multiple instances of same application

This code is used to prevent Multiple instances of same application.I googled a day for this.

//Add these References
using System.Threading;
using System.Reflection;
using System.Runtime.InteropServices;

Simple way to Prevent Multiple Instance.Write this code in Program.cs,

[STAThread]
static void Main()
{
    bool NewWindow;
    Mutex Mut = new Mutex(true, "YourApplicationName", out NewWindow);
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    if (!NewWindow)
        return;

    Application.Run(new Form1());
    GC.KeepAlive(Mut);
}

This is the another way,

[STAThread]
static void Main()
{
    bool NewWindow;
    Mutex Mut = new Mutex(true, "YourApplicationName", out NewWindow);
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    if (!NewWindow)
    {
       IntPtr hWnd = FindWindow("WindowsForms10.Window.8.app3", "YourApplicationName");
       if (hWnd != IntPtr.Zero)
       {
           WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
           placement.length = Marshal.SizeOf(placement);

           GetWindowPlacement(hWnd, ref placement);
           if (placement.showCmd != SW_NORMAL)
           {
                placement.showCmd = SW_RESTORE;

                SetWindowPlacement(hWnd, ref placement);
                SetForegroundWindow(hWnd);
            }
       }
                return;
     }
    Application.Run(new Form1());
    GC.KeepAlive(Mut);
}

private const int SW_NORMAL = 1;
private const int SW_RESTORE = 9;

[DllImport("User32", EntryPoint = "FindWindow")]
static extern IntPtr FindWindow(string className, string windowName);

[DllImport("User32", EntryPoint = "SendMessage")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

[DllImport("User32", EntryPoint = "SetForegroundWindow")]
private static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("User32", EntryPoint = "SetWindowPlacement")]
private static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);

[DllImport("User32", EntryPoint = "GetWindowPlacement")]
private static extern bool GetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);

private struct POINTAPI
{
    public int x;
    public int y;
}

private struct RECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}

private struct WINDOWPLACEMENT
{
    public int length;
    public int flags;
    public int showCmd;
    public POINTAPI ptMinPosition;
    public POINTAPI ptMaxPosition;
    public RECT rcNormalPosition;
}

COMMENT USING

PREMIUM SPONSORS

Hire Mobile & Web Developer on demand. 100% satisfaction. Try for 1 week or Money Back. Local and remote developers available all over USA.

Latest Blogs