SetForegroundWindow 不适用于最小化进程

本文关键字:进程 最小化 适用于 不适用 SetForegroundWindow | 更新日期: 2023-09-27 18:34:12

找不到关于这个话题的任何好答案,所以也许有人可以帮助我。我正在制作一个小的个人程序,我想将某个应用程序带到前台。它已经工作了,但有一个小问题。当该过程最小化时,我的代码不起作用。该过程不会像未最小化时那样显示在前台。

下面是一段代码:

public partial class Form1 : Form
{
    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);
    public Form1()
    {
       InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        System.Diagnostics.Process[] p
            = System.Diagnostics.Process.GetProcessesByName("Client");
        if (p.Length > 0)
        {
            SetForegroundWindow(p[0].MainWindowHandle);
        }
        else
        {
            MessageBox.Show("Window Not Found!");
        }
    }
}

SetForegroundWindow 不适用于最小化进程

尝试将其设置为前台窗口之前,您需要调用 ShowWindow。

可能与SW_RESTORE

 [DllImport("user32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
 if (p.Length > 0)
 {
   ShowWindow(p[0].MainWindowHandle, 9);
   SetForegroundWindow(p[0].MainWindowHandle);
 }

PInvoke.net - ShowWindow 有一些关于DllImport和在 C# 中使用函数的示例。