windowns窗体应用项目:
using System.Threading;using System.Diagnostics;using System.Runtime.InteropServices;//以下所有代码放在窗体的Program.cs里面[DllImport("user32.dll")]private static extern bool SetForegroundWindow(IntPtr hWnd);[DllImport("user32.dll")]private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);[DllImport("user32.dll")]private static extern bool IsIconic(IntPtr hWnd);private const int SW_RESTORE = 9;/// <summary>/// c# 进程窗口显示并前置/// </summary>public static void RaiseOtherProcess(){Process proc = Process.GetCurrentProcess();Process.GetProcesses();foreach (Process otherProc in Process.GetProcessesByName(proc.ProcessName)){//ignore "this" processif (proc.Id != otherProc.Id){// Found a "same named process".// Assume it is the one we want brought to the foreground.// Use the Win32 API to bring it to the foreground.IntPtr hWnd = otherProc.MainWindowHandle;if (IsIconic(hWnd)){ShowWindowAsync(hWnd, 9);}SetForegroundWindow(hWnd);break;}}}static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);bool createdNew;Mutex instance = new Mutex(true, "Regfrm", out createdNew);if (createdNew){Application.Run(new Regfrm());instance.ReleaseMutex();//如果需要窗体重启,并出现问题,将这句改为//instance.Dispose();}else{RaiseOtherProcess();Application.Exit();}}
=====================================================
windowns窗体应用插件项目:
public MainFrm Frm;//这一句放在class里面private void Button1_Click(object sender, RibbonControlEventArgs e){//以下代码放在插件控件的事件里面if (Frm == null || Frm.IsDisposed){Frm = new MainFrm();//ZwSoft.ZwCAD.ApplicationServices.Application.ShowModelessDialog(Frm);Frm.Show();}else{if (Frm.WindowState == FormWindowState.Minimized){Frm.WindowState = FormWindowState.Normal;}Frm.Activate();}//以上代码放在插件控件的事件里面}
