Comment puis-je obtenir le titre de la fenêtre active actuelle en utilisant c#?

J'aimerais savoir comment saisir le titre de la fenêtre active actuelle (c'est-à-dire celle qui a le focus) en utilisant C#.

97
demandé sur Shimmy 2008-09-22 20:22:23

7 réponses

Voir l'exemple sur la façon dont vous pouvez le faire avec le code source complet ici:

Http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/

[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

private string GetActiveWindowTitle()
{
    const int nChars = 256;
    StringBuilder Buff = new StringBuilder(nChars);
    IntPtr handle = GetForegroundWindow();

    if (GetWindowText(handle, Buff, nChars) > 0)
    {
        return Buff.ToString();
    }
    return null;
}

Edité avec @ Doug McClean commentaires pour une meilleure exactitude.

147
répondu Jorge Ferreira 2013-12-23 02:42:56

Si vous parlez de WPF, utilisez:

 Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
16
répondu Skvettn 2011-02-20 13:27:37

Boucle sur L'Application.Actuel.Windows [] et trouvez celui avec IsActive = true.

5
répondu 2009-08-27 17:47:18

Utilisez L'API Windows. Appelez GetForegroundWindow ().

GetForegroundWindow() vous donnera un handle (nommé hWnd) à la fenêtre active.

Documentation: http://msdn.microsoft.com/en-us/library/ms633505 (VS.85).aspx

4
répondu ine 2008-09-22 16:31:43

S'il arrive que vous ayez besoin de formulaire actif actuel de votre application MDI: (MDI-Multi Document Interface).

Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;
0
répondu Arthur Zennig 2016-10-24 14:19:11

Base sur https://msdn.microsoft.com/en-us/library/ms633505(SV.85).aspx

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowTextLength(IntPtr hWnd);

private string GetCaptionOfActiveWindow()
{
    var strTitle = string.Empty;
    var handle = GetForegroundWindow();
    // Obtain the length of the text   
    var intLength = GetWindowTextLength(handle) + 1;
    var stringBuilder = new StringBuilder(intLength);
    if (GetWindowText(handle, stringBuilder, intLength) > 0)
    {
        strTitle = stringBuilder.ToString();
    }
    return strTitle;
}

Il prend en charge les caractères UTF8.

0
répondu Mohammad Dayyan 2017-11-24 04:12:41

Vous pouvez utiliser la classe process c'est très facile. utilisez cet espace de noms

using System.Diagnostics;

Si vous voulez faire un bouton pour obtenir la fenêtre active.

private void button1_Click(object sender, EventArgs e)
    {            
       Process currentp = Process.GetCurrentProcess();
       TextBox1.Text = currentp.MainWindowTitle;  //this textbox will be filled with active window.
    }
-2
répondu B.Beshoo 2015-09-14 05:53:13