如何让程序只运行一次实例

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

using System;

using System.Runtime.InteropServices;

using System.Windows.Forms;

using System.Diagnostics;

using System.Reflection;

public class OneInstnace

{

[STAThread]

public static void Main()

{

//Get the running instance.

Process instance = RunningInstance();

if (instance == null)

{

//There isn't another instance, show our form.

Application.Run (new Form());

}

else

{

//There is another instance of this process.

HandleRunningInstance(instance);

}

}

public static Process RunningInstance()

{

Process current = Process.GetCurrentProcess();

Process[] processes = Process.GetProcessesByName (current.ProcessName);

//Loop through the running processes in with the same name

foreach (Process process in processes)

{

//Ignore the current process

if (process.Id != current.Id)

{

//Make sure that the process is running from the exe file.

if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==

current.MainModule.FileName)

{

//Return the other process instance.

return process;

}

}

}

//No other instance was found, return null.

return null;

}

public static void HandleRunningInstance(Process instance)

{

//Make sure the window is not minimized or maximized

ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);

//Set the real intance to 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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航