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();
}
}
}
}