如何讓應用程序只有一個實例在運行?

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; }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章