zoukankan      html  css  js  c++  java
  • [转]C#单实例运行,二次激活

    方法一:(注意,该方法在Vista下会询问权限)

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

    方法二:(注意该方法经过MaxToCode会失效)

    private static void CheckRunOneInstance()
      {
       bool createdNew = false;
       Mutex mutex = new Mutex(true, "{4208A52F-3D84-40ca-B4DD-0D8AE4B4D390}", out createdNew);
       if (createdNew)
       {    
        Application.Run(new FMain());
       }
       else
       {
        IntPtr app=FindWindow(null,"DecTool");
        if(app!=System.IntPtr.Zero)
        {
         SetForegroundWindow(app);
        }

        System.Environment.Exit(0);
       }
      }

  • 相关阅读:
    idea 快捷键
    python 之网页解析器
    python 之正则表达式
    Python Requests快速入门
    Html style="visibility:hidden"与style="display:none"的区别
    html 之table标签结构学习
    python 之format字符串格式化
    Python 时间戳和日期相互转换
    SQL 字符串函数
    xampp默认配置拿shell
  • 原文地址:https://www.cnblogs.com/llcto/p/1605518.html
Copyright © 2011-2022 走看看