用C#开发winform桌面程序时,同一个exe程序,默认是可以启动多个实例的。但很多时候,我们只希望程序启动一个实例,可以通过以下代码进行设置:
static class Program { [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")] public static extern int SetForegroundWindow(IntPtr hwnd); [DllImport("user32.dll", EntryPoint = "SendMessage")] public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x112; public const int SC_RESTORE = 0xF120; /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { // 判断进程,只能启动一个实例 Process cur = Process.GetCurrentProcess(); foreach (Process p in Process.GetProcesses()) { if (p.Id == cur.Id) continue; if (p.ProcessName == cur.ProcessName) { SetForegroundWindow(p.MainWindowHandle); SendMessage(p.MainWindowHandle, WM_SYSCOMMAND, SC_RESTORE, 0); return; } } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }