限制Win应用程序只运行一个实例

限制Win应用程序只运行一个实例

1、 限制Win应用程序只运行一个实例

  bool bCreatedNew;
  Mutex Mab = new Mutex(false, "AuctionBidMain", out bCreatedNew);
  if (bCreatedNew)
   {
   Application.Run(new AuctionBidMainForm());       
  }
  else
  {
    Application.Exit();
  }

2、限制Win应用程序只运行一个实例,并且显示已运行的实例

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;  

namespace AuctionBidMain
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        [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;  
        static void Main()
        {
             
                Process instance = RunningInstance(); 
                if(instance==null)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new AuctionBidMainForm());
                }
                else
                {
                  HandleRunningInstance(instance);  
                }  
          }  
            private  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);  
            }
           
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值