zoukankan      html  css  js  c++  java
  • c# 应用程序只运行一个实例

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

    namespace OneInstance
    {
        
    /// <summary>
        
    /// Class with program entry point.
        
    /// </summary>
        internal sealed class Program
        {
            
            
    //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 MainForm());
                }
                
    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);
            }
            
        }
    }
  • 相关阅读:
    loj #6201. 「YNOI2016」掉进兔子洞
    poj 3683 Priest John's Busiest Day
    hdu 1814 Peaceful Commission
    poj 3207 Ikki's Story IV
    loj #2305. 「NOI2017」游戏
    uoj #111. 【APIO2015】Jakarta Skyscrapers
    洛谷P1550 [USACO08OCT]打井Watering Hole
    uoj #110. 【APIO2015】Bali Sculptures
    loj #2116. 「HNOI2015」开店
    codevs 3044 矩形面积求并
  • 原文地址:https://www.cnblogs.com/wenming205/p/2023665.html
Copyright © 2011-2022 走看看