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" process
if (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();
}
//以上代码放在插件控件的事件里面
}