C# winform 只运行一个实例窗口
来源:互联网 发布:中国外运物流 知乎 编辑:程序博客网 时间:2024/06/04 17:52
using System;using System.Windows.Forms;using System.Diagnostics;using System.Runtime.InteropServices;using System.Reflection;namespace EmailOperation{ static class Program { /// <summary> /// 正常显示窗体 /// </summary> /// <param name="hWnd"></param> /// <param name="cmdShow"></param> /// <returns></returns> [DllImport("User32.dll")] private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(System.IntPtr hWnd); private const int WS_SHOWNORMAL = 1; /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.SetCompatibleTextRenderingDefault(false); Process instance = RunningInstance(); if (instance == null) { System.Windows.Forms.Application.EnableVisualStyles(); System.Windows.Forms.Application.DoEvents(); Application.Run(new EmailForm()); } else { HandleRunningInstance(instance); } } public static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); foreach (Process process in processes) { if (process.Id != current.Id) { if (Assembly.GetExecutingAssembly().Location.Replace("/", "//") == current.MainModule.FileName) { return process; } } } return null; } private static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); SetForegroundWindow(instance.MainWindowHandle); } }}