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 //Not Found
            {
                MessageBox.Show("Window Not Found!");
            }
        }

1 ответ

Решение

Вам нужно будет вызвать ShowWindow, прежде чем пытаться установить его в качестве окна переднего плана.

Вероятно, с SW_RESTORE;

 [DllImport("user32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommands nCmdShow);

 if (p.Length > 0)
 {
   ShowWindow(p[0].MainWindowHandle, 9);
   SetForegroundWindow(p[0].MainWindowHandle);
 }

pinvoke.net - в showwindow есть несколько примеров использования DllImport и использования функции в C#.

Другие вопросы по тегам