如何让应用程序只有一个实例在运行?
点击次数:34 次 发布日期:2008-11-26 11:51:06 作者:源代码网
|
源代码网推荐 源代码网推荐 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; 源代码网推荐 } 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
