using System;
 using System.Runtime.InteropServices;
 using System.Windows.Forms;
 using System.Diagnostics;
 using System.Reflection;public class OneInstnace
 { 
 
   [STAThread]
   public static void Main()
   { 
 
     //得到正在运行的例程
     Process instance = RunningInstance();
     if (instance == null)
     { 
 
       //如果没有其它例程,就新建一个窗体
       Application.Run (new Form());
     }
     else
     { 
 
       //处理发现的例程
       HandleRunningInstance(instance);
     }
   }
   public static Process RunningInstance()
   { 
 
     Process current = Process.GetCurrentProcess();
     Process[] processes = Process.GetProcessesByName (current.ProcessName);    //遍历正在有相同名字运行的例程
     foreach (Process process in processes)
     { 
 
       //忽略现有的例程
       if ( != current.Id)
       { 
 
         //确保例程从EXE文件运行
         if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==
           current.MainModule.FileName)
         { 
 
           //返回另一个例程实例
           return process;
         }
       }
     }    //没有其它的例程,返回Null
     return null;
   }  public static void HandleRunningInstance(Process instance)
   { 
 
     //确保窗口没有被最小化或最大化
     ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);    //设置真实例程为foreground window
     SetForegroundWindow (instance.MainWindowHandle);
   }  [DllImport("User32.dll")]
  private static extern bool ShowWindowAsync(
     IntPtr hWnd, int cmdShow);
   [DllImport("User32.dll")] private static extern bool
     SetForegroundWindow(IntPtr hWnd);
   private const int WS_SHOWNORMAL = 1;
 }