using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Runtime.InteropServices;using System.Threading;using System.Windows.Forms;namespace CalendarGenerationTool{ static class Program { [DllImport("user32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")] private static extern bool IsIconic(IntPtr hWnd); private const int SW_RESTORE = 9; /// <summary> /// c# 进程窗口显示并前置 /// </summary> public static void RaiseOtherProcess() { Process proc = Process.GetCurrentProcess(); Process.GetProcesses(); foreach (Process otherProc in Process.GetProcessesByName(proc.ProcessName)) { //ignore "this" process if (proc.Id != otherProc.Id) { // Found a "same named process". // Assume it is the one we want brought to the foreground. // Use the Win32 API to bring it to the foreground. IntPtr hWnd = otherProc.MainWindowHandle; if (IsIconic(hWnd)) { ShowWindowAsync(hWnd, 9); } SetForegroundWindow(hWnd); break; } } } /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Mutex instance = new Mutex(true, "MainFrm", out bool createdNew); if (createdNew) { Application.Run(new MainFrm()); instance.ReleaseMutex(); //如果需要窗体重启,并出现问题,将这句改为 //instance.Dispose(); } else { RaiseOtherProcess(); Application.Exit(); } } }}