【Winform】两程序相互调用前置显示
有A&B两个程序,程序A调用程序B, 如果B已运行时将B前置显示 B未打开时开始运行
private void button1_Click(object sender, EventArgs e)
{
try
{
Process[] pps = System.Diagnostics.Process.GetProcessesByName("cmd");
var helpw = from pc in pps where pc.MainWindowTitle == "XXX" select pc;
if (helpw.Count() > 0)
{
HandleRunningInstance(pps[0]);
}
else
{
System.Diagnostics.Process.Start($"cmd");
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.Assert(false, ex);
}
}
private static void HandleRunningInstance(Process instance)
{
/*
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-showwindow
*/
ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口
SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(System.IntPtr hWnd);
如果有错误的地方,还望各位多多指点
写个博客,来记录自己成长的一些经历,或许也能顺便帮助他人。
由于使用GitHub仓库作为图床,会有图片显示不出来的情况。