本文介绍了C#窗口实现单例模式的方法,对于一个软件如果第二次打开程序,就把已经启动的那个进程的窗口放到最前端显示,需要了解的朋友可以参考下
主要是应对这种需求:软件只允许启动一次。
将这个问题转化一下,可以这样描述:对于一个软件,在启动一个进程之后,不允许启动其它进程,如果第二次打开程序,就把已经启动的那个进程的窗口放到最前端显示。
C# winfrom应用在启动之后会首先执行program.cs里的代码,所以需要在这里下手。启动后,检测是否有相同进程名的进程,如果有,就把那个进程的窗口提到前端,然后关闭自己。
用法:把你的program.cs改造成这个样子:
- static class Program {
- //windows api,用于显示代码 [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetForegroundWindow(IntPtr hWnd);
- /// <summary> /// The main entry point for the application.
- /// </summary> [STAThread]
- static void Main() {
- //核心代码 Process currProc = Process.GetCurrentProcess();
- Process[] runningProc = Process.GetProcesses();
- //检查规则,看进程名是否相同。可以自己灵活定制,比如需要检查用户名之类的。 var searchedProc=from a in runningProc
- where a.ProcessName == currProc.ProcessName select a;
- if (searchedProc.Count() > 1)
- { //选出和当前进程进程名相同,但是id不同的那个进程
- Process firstProc = searchedProc.FirstOrDefault(a => a.Id != currProc.Id); IntPtr firstProcWindow = firstProc.MainWindowHandle;
- SetForegroundWindow(firstProcWindow); currProc.Kill();
- } //-------end---------
- Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1()); }
- }










