C#单实例运行的实现

主要通过修改program.cs文件的内容来实现。

 

首先在添加几个名空间的引用:

using System.Diagnostics;                          //使用Process
using System.Runtime.InteropServices;     //使用DllImport
using System.Reflection;                            //使用Assembly

 

 

然后在引入系统API :

[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;

 

再添加几个成员函数:

        public static Process GetPreIns()
        {//获取当前进程句柄
            Process cur= Process.GetCurrentProcess();
            Process[] procs = Process.GetProcessesByName(current.ProcessName);               
            foreach (Process proc in procs )
            { //遍历,以获取前一实例的句柄                     
                if (proc .Id != cur.Id) //忽略现有的例程
                {
                    //确保例程从EXE文件运行       
                    if (Assembly.GetExecutingAssembly().Location.Replace("/", "//") == cur.MainModule.FileName)
                    {
                        //返回另一个例程实例         
                        return proc ;
                    }
                }
            }
            //没有其它的例程,返回Null   
            return null;
        }

 

         public static void RestorePreIns(Process ins)
        {//激活前一实例              
            ShowWindowAsync(ins.MainWindowHandle, WS_SHOWNORMAL); //确保窗口没有被最小化或最大化            
            SetForegroundWindow(ins.MainWindowHandle); //设置真实例程为foreground window    
        }

 

最后修改 Main函数

        static void Main()
        {
            Process ins = GetPreIns();
            if (ins == null)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MyMainForm());
            }
            else
            {                
                RestorePreIns(ins );//激活前一实例            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值