进程启动并显示C#

进程启动并显示C#,c#,wpf,C#,Wpf,我正在使用C#(WPF) 我有进程的完整路径,我使用process.start()命令启动进程。 现在,我想显示我在启动之前(在start()command之后)启动的进程 i、 e如果我启动记事本,用户将记事本最小化,然后在我的应用程序中单击启动记事本,我想检查我以前是否运行过记事本,如果是,则向用户显示正在运行的记事本。 if p is running: Show p else Start p 我怎样用C#来做呢? 谢谢。在p.Start()调用之后,p.Id将为您提供进

我正在使用C#(WPF)
我有进程的完整路径,我使用
process.start()
命令启动进程。

现在,我想显示我在启动之前(在
start()
command之后)启动的进程
i、 e如果我启动记事本,用户将记事本最小化,然后在我的应用程序中单击
启动记事本
,我想检查我以前是否运行过记事本,如果是,则向用户显示正在运行的记事本。

if p is running:
   Show p
else
   Start p

我怎样用C#来做呢?
谢谢。

在p.Start()调用之后,p.Id将为您提供进程Id。 稍后,您可以使用Process.GetProcessById(id)查找正在运行的进程

把它的窗口放在前面是一项更复杂的任务。
请参阅

检查具有以下名称的进程是否已在运行,您可以使用
process.getProcessByName(processName)
方法

如果进程正在运行,您可以使用
Pinvoke
最大化它的窗口。使用
SW\u SHOWMAXIMIZED
参数调用
ShowWindow

否则,只需调用
Process.Start(processName)
即可启动流程。 试着跟随

internal class MyClass
{
  //use this flag to maximize process window.
  const int SW_SHOWMAXIMIZED = 3;
  //use this flag to open process window normally.
  const int SW_SHOWNORMAL = 1;

  [DllImport("user32.dll")]
  static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

  public static void Main(string[] args)
  {
    var processName = "notepad";
    var process = Process.GetProcessesByName(processName).FirstOrDefault();
    if (process != null)
      ShowWindow(process.MainWindowHandle, SW_SHOWNORMAL);
    else
      Process.Start(processName);
  }
}

为了简化:a)检查一个进程是否已经在运行,并将其主窗口置于最前面;b)如果它没有运行,则启动它。对吗?你拥有目标进程的代码吗?我可以在不最大化窗口的情况下显示应用程序吗?只是为了show@MikeBrown可以,只需将
1
作为第二个参数传递给
ShowWindow
函数即可<代码>1对应于
SW\u SHOWNORMAL
标志。@MikeBrown很高兴得到帮助。
internal class MyClass
{
  //use this flag to maximize process window.
  const int SW_SHOWMAXIMIZED = 3;
  //use this flag to open process window normally.
  const int SW_SHOWNORMAL = 1;

  [DllImport("user32.dll")]
  static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

  public static void Main(string[] args)
  {
    var processName = "notepad";
    var process = Process.GetProcessesByName(processName).FirstOrDefault();
    if (process != null)
      ShowWindow(process.MainWindowHandle, SW_SHOWNORMAL);
    else
      Process.Start(processName);
  }
}