将另一个应用程序放在前面

sce*_*919 3 c# winforms

我已经建立了一个C#Windows Form应用程序。加载表单后,它将全屏显示。表单上带有启动其他应用程序(而不是表单)的图标。我正在尝试确定应用程序是否已经在运行,如果尚未运行,请启动它,否则将其置于最前面。我已经确定了该应用程序是否正在运行,如果无法运行,则要启动它,我只是想不出如何将其置于最前端。我已经在Google和Stack Overflow上阅读了其他结果,但无法使其正常工作。

任何帮助是极大的赞赏!

到目前为止,我的代码是:

private void button4_Click(object sender, EventArgs e)
{
    Process[] processName = Process.GetProcessesByName("ProgramName");
    if (processName.Length == 0)
    {
        //Start application here
        Process.Start("C:\\bin\\ProgramName.exe");
    }
    else
    {
        //Set foreground window
        ?
    }
}
Run Code Online (Sandbox Code Playgroud)

Bor*_*nko 7

虽然这里的几个答案被标记为有效,但它们在我的情况下不起作用。我找到了正确的代码,它在Joseph Gozlan 的博客上对我有用。为了方便起见,我在这里重复这个很棒的代码。与其他答案相比,请注意异步调用的细微但非常重要的区别。全部归功于原始代码作者。

[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(HandleRef hWnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr WindowHandle);
public const int SW_RESTORE = 9;
    
private void FocusProcess(string procName)
{
  Process[] objProcesses = System.Diagnostics.Process.GetProcessesByName(procName); 
  if (objProcesses.Length > 0)
  {
    IntPtr hWnd = IntPtr.Zero;
    hWnd = objProcesses[0].MainWindowHandle;
    ShowWindowAsync(new HandleRef(null,hWnd), SW_RESTORE);
    SetForegroundWindow(objProcesses[0].MainWindowHandle);
  }
}
Run Code Online (Sandbox Code Playgroud)


And*_*ake 5

[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr handle);

private IntPtr handle;

private void button4_Click(object sender, EventArgs e)
{
    Process[] processName = Process.GetProcessesByName("ProgramName");
    if (processName.Length == 0)
    {
        //Start application here
        Process.Start("C:\\bin\\ProgramName.exe");
    }
    else
    {
        //Set foreground window
        handle = processName[0].MainWindowHandle;
        SetForegroundWindow(handle);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果即使最小化也希望显示该窗口,请使用:

if (IsIconic(handle))
    ShowWindow(handle, SW_RESTORE);
Run Code Online (Sandbox Code Playgroud)