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