Skip to content

Commit

Permalink
禁止同时开启多个实例
Browse files Browse the repository at this point in the history
  • Loading branch information
cornradio committed Aug 15, 2024
1 parent 1821030 commit 447e360
Showing 1 changed file with 36 additions and 7 deletions.
43 changes: 36 additions & 7 deletions apex runner/Program.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,51 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace apex_runner
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>

// 导入 Win32 API 用于设置前台窗口
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
// 使用互斥体确保只有一个实例运行
bool isNewInstance;
using (Mutex mutex = new Mutex(true, "MyUniqueAppName", out isNewInstance))
{
if (isNewInstance)
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
// 找到已经运行的实例,并将其激活到前台
Process currentProcess = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName(currentProcess.ProcessName))
{
if (process.Id != currentProcess.Id)
{
SetForegroundWindow(process.MainWindowHandle);
break;
}
}
}
}

}
}
}
}

0 comments on commit 447e360

Please sign in to comment.