Как я могу получить заголовок текущего активного окна, используя c #? - PullRequest
103 голосов
/ 22 сентября 2008

Я хотел бы знать, как получить заголовок окна текущего активного окна (то есть того, которое имеет фокус), используя C #.

Ответы [ 7 ]

155 голосов
/ 22 сентября 2008

Смотрите пример того, как вы можете сделать это с полным исходным кодом:

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;
}

Отредактировано с комментариями @Doug McClean для лучшей корректности.

17 голосов
/ 16 апреля 2010

Если вы говорили о WPF, тогда используйте:

 Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
4 голосов
/ 27 августа 2009

Переберите Application.Current.Windows[] и найдите тот с IsActive == true.

4 голосов
/ 22 сентября 2008

Используйте Windows API. Звоните GetForegroundWindow().

GetForegroundWindow() даст вам дескриптор (с именем hWnd) для активного окна.

Документация: Функция GetForegroundWindow | Документы Microsoft

1 голос
/ 24 ноября 2017

На основе Функция GetForegroundWindow | Документы Microsoft :

[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;
}

Поддерживает символы UTF8.

0 голосов
/ 24 октября 2016

Если вам понадобится Текущая активная форма из вашего приложения MDI : (MDI-Multi Document Interface).

Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;
0 голосов
/ 14 сентября 2015

вы можете использовать класс процесса, это очень просто. использовать это пространство имен

using System.Diagnostics;

, если вы хотите сделать кнопку, чтобы активировать окно.

private void button1_Click(object sender, EventArgs e)
    {            
       Process currentp = Process.GetCurrentProcess();
       TextBox1.Text = currentp.MainWindowTitle;  //this textbox will be filled with active window.
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...