using System;using System.Windows.Forms;using System.Runtime.InteropServices;//使用DllImport的必須。using System.Diagnostics;//引入Process 類namespace 命名空間{ static class Program { private const int WS_SHOWNORMAL = 1; [DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// 應用程式的主進入點。 /// </summary> [STAThread] static void Main() { Process instance = GetRunningInstance(); if (instance == null) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frm_Main());//在這啟動主表單。 } else { HandleRunningInstance(instance); } } /// <summary> /// 擷取當前是否具有相同進程。 /// </summary> /// <returns></returns> public static Process GetRunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); //遍曆正在有相同名字啟動並執行常式 foreach (Process process in processes) { //忽略現有的常式 if (process.Id != current.Id) //確保常式從EXE檔案運行 if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/" , "\\") == current.MainModule.FileName ) return process; } return null; } /// <summary> /// 啟用原有的進程。 /// </summary> /// <param name="instance"></param> public static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); SetForegroundWindow(instance.MainWindowHandle); } }}