设为首页
加入收藏
站内地图
旧版入口
当前位置:首页 > 站长学院 > 网络编程 > ASP.NET

如何让应用程序只有一个实例在运行?

作者:佚名 出处:网络转载 时间:12-06 点击:

内容载入中...
     MyForm.cs
  
  using System;
  using System.Runtime.InteropServices;
  using System.Windows.Forms;
  using System.Diagnostics;
  using System.Reflection;
  
  public class OneInstnace
  {
   [STAThread]
   public static void Main()
   {
   //得到正在运行的例程
   Process instance = RunningInstance();
   if (instance == null)
   {
   //如果没有其它例程,就新建一个窗体
   Application.Run (new Form());
   }
   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);
   }
  
   [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;
  }
  
    。

收藏本文:
】【打印页面】【推荐给朋友】【关闭窗口

站长学院

推荐信息