SetForegroundWindow не работает со свернутым процессом

Не удалось найти хороший ответ на эту тему, поэтому, возможно, кто-то может мне помочь. Я делаю небольшую личную программу, в которой хочу вывести определенное приложение на передний план. Он уже работает, но есть одна маленькая проблема. Когда процесс свернут, мой код не работает. Процесс не будет отображаться на переднем плане, как если бы он не был свернут.

Вот фрагмент кода:

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!");
        }
    }
}

person Huub S    schedule 12.12.2014    source источник


Ответы (1)


Вам нужно будет вызвать 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# .

person Erik Philips    schedule 12.12.2014