1.首先添加命名空间
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
[DllImport("user32.dll ")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
//根据任务栏应用程序显示的名称找相应窗口的句柄
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
private const int SW_RESTORE = 9;
//第一种方法
private void OpenSerialPortUtility()
{
//查找状态中的窗口线程句柄来查看目标程序是否在运行运行则前置否则打开
IntPtr findPtr = FindWindow(null, "友善串口调试助手");
if (findPtr.ToInt32() != 0)
{
ShowWindow(findPtr, SW_RESTORE); //将窗口还原,如果不用此方法,缩小的窗口不能激活
SetForegroundWindow(findPtr);//将指定的窗口选中(激活)
}
else
{
System.Diagnostics.Process.Start(@"C:\Program Files (x86)\Serial Port Utility\SerialPortUtility.exe");
}
}
//第二种方法
public void OpenSerialPort()
{
//遍历进程列表查找目标程序是否运行运行则前置否则启动
Process[] pList = Process.GetProcesses(".");
bool b = false;
foreach (Process p in pList)
{
if (p.ProcessName == "SerialPortUtility")
{
b = true;
//Process.GetCurrentProcess();
ShowWindow(p.MainWindowHandle, SW_RESTORE); //将窗口还原,如果不用此方法,缩小的窗口不能激活
bool res = SetForegroundWindow(p.MainWindowHandle);
if (res == false)
{
}
break;
}
}
if (b == false)
{
A= System.Diagnostics.Process.Start(@"C:\Program Files (x86)\Serial Port Utility\SerialPortUtility.exe");
}
}
c#程序启动另一软件(进程)并前置
最新推荐文章于 2022-04-21 15:38:35 发布