2 votes

Comment récupérer le focus d'une fenêtre déjà ouverte dans les formulaires Windows C# ?

J'ai une application Windows. Lorsque je clique sur un bouton, un autre processus démarre et fait apparaître la fenêtre d'aide. Je ne veux ouvrir qu'une seule fenêtre. Donc, si je clique sur le bouton, je vérifie si le processus est déjà lancé. Le problème auquel je suis confronté est de récupérer le focus de la fenêtre que j'ai ouverte.

if (processes.Length == 0)
{
      Process.Start();
}
else
{
  // Need to focus on the window already opened. 
}

4voto

JosephStyons Points 21187

Dans un message supprimé, Vinay a indiqué que cela a également fonctionné pour lui :

else
{
    foreach (Process process in processes)
    {
        if (process.Id != p.Id)
        {
            SwitchToThisWindow(process.MainWindowHandle, true);
            return;
        }
    }

[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);

1voto

JosephStyons Points 21187

Vous pouvez utiliser la méthode décrite par le dernière Q&R à ce lien comme indiqué ci-dessous :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ProcessWindows
{
    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("notepad");
            if (p.Length > 0)
            {
                SetForegroundWindow(p[0].MainWindowHandle);
            }
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X