我正在使用C#(WPF)
我有完整的流程路径,我使用Process.Start()
命令启动流程。
Process p = new Process();
p.shartInfo.FileName = fullPathOfFile;
p.Start();
现在,我想展示我之前开始的过程(在Start()
命令之后)
即如果我启动记事本并且用户最小化记事本并单击我的应用程序中的Start Notepad
我想检查我之前是否运行记事本,如果是,则向用户显示正在运行的记事本。
if p is running:
Show p
else
Start p
我怎么能在C#中做到这一点?
感谢。
答案 0 :(得分:1)
在p.Start()调用之后,p.Id会为您提供进程ID。 稍后您可以使用Process.GetProcessById(id)来查找正在运行的进程。
将窗口置于前面是一项更复杂的任务。 见http://www.codeproject.com/Articles/2976/Detect-if-another-process-is-running-and-bring-it
答案 1 :(得分:1)
要检查具有以下名称的进程是否已在运行,您可以使用Process.GetProcessesByName(processName)
方法。
如果进程正在运行,您可以使用Pinvoke
最大化它的窗口。使用ShowWindow
参数调用SW_SHOWMAXIMIZED
。
否则,您只需致电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);
}
}