zoukankan      html  css  js  c++  java
  • 单实例运行

    一、

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Reflection;

    public class OneInstnace
    {

     //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;


     [STAThread]  public static void Main()
     {    
      //得到正在运行的例程    
      Process instance = RunningInstance();    
      if (instance == null)
      {
       //如果没有其它例程,就新建一个窗体      
       Application.Run (new OneInstnace());    
      }    
      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) 
       {
        //确保例程从EXE文件运行        
        if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==current.MainModule.FileName)
        {
         //返回另一个例程实例          
         return process;
        }
       }
      }
      //没有其它的例程,返回Null    
      return null;  
     }
     public static void HandleRunningInstance(Process instance)
     {
      //确保窗口没有被最小化或最大化    
      ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);   
      //设置真实例程为foreground window    
      SetForegroundWindow (instance.MainWindowHandle);
     }
    }

    二、

            /// <summary>
            /// 单实例运行
            /// </summary>
            /// <returns> true 应用程序已启动,false 则没有 </returns>
            public bool SingleRun(ref System.Threading.Mutex mutex )
            {
                mutex = new System.Threading.Mutex(false, "WINDOWS");
                if (!mutex.WaitOne(0, false))
                {
                    mutex.Close();
                    mutex = null;
                }
                if (mutex == null)
                {
                    return true;
                }
                return false;
            }
    


    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    Winform 切换语言 实现多语言版本
    PowerDesigner导出表到word
    【SQL】两个带order by查询进行union all报ORA-00933错误的解决方法
    读写txt文件
    c# 进度条的使用(例子)、线程
    设计模式——策略模式
    设计模式——简单工厂模式
    解决JSP路径问题的方法(jsp文件开头path, basePath作用)
    反射
    Struts2中的valuestack
  • 原文地址:https://www.cnblogs.com/08shiyan/p/2008240.html
Copyright © 2011-2022 走看看