//方法二:禁止多个进程运行,并当重复运行时激活以前的进程
usingSystem;usingSystem.Collections.Generic;usingSystem.Windows.Forms;usingSystem.Diagnostics;usingSystem.Runtime.InteropServices;usingSystem.Reflection;namespaceDuoYeMianIE
{static classProgram
{///
///应用程序的主入口点。///
[STAThread]static voidMain()
{//Get the running instance.
Process instance =RunningInstance();if (instance == null)
{ System.Windows.Forms.Application.EnableVisualStyles();//这两行实现 XP 可视风格
System.Windows.Forms.Application.DoEvents();//There isn't another instance, show our form.
System.Windows.Forms.Application.Run(newLamBrowser());
}else{//There is another instance of this process.
HandleRunningInstance(instance);
}
}public staticProcess RunningInstance()
{
Process current=Process.GetCurrentProcess();
Process[] processes=Process.GetProcessesByName(current.ProcessName);//Loop through the running processes in with the same name
foreach (Process process inprocesses)
{//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.
returnprocess;
}
}
}//No other instance was found, return null.
return null;
}public static voidHandleRunningInstance(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, intcmdShow);
[DllImport("User32.dll")]private static extern boolSetForegroundWindow(IntPtr hWnd);private const int WS_SHOWNORMAL = 1;
}
}