Я хотел бы знать, как захватить заголовок окна текущего активного окна (то есть тот, который имеет фокус), используя С#.
Как получить заголовок текущего активного окна с помощью С#?
Ответ 1
См. пример того, как вы можете сделать это с полным исходным кодом здесь:
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 для лучшей корректности.
Ответ 2
Если вы говорили о WPF, используйте:
Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
Ответ 3
Перейдите к Application.Current.Windows[]
и найдите тот, у которого IsActive == true
.
Ответ 4
Используйте Windows API. Вызовите GetForegroundWindow()
.
GetForegroundWindow()
даст вам дескриптор (с именем hWnd
) для активного окна.
Документация: функция GetForegroundWindow | Документы Microsoft
Ответ 5
Если вам понадобится Текущая активная форма из вашего приложения MDI: (MDI-Multi Document Interface).
Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;
Ответ 6
Основано на функции 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.
Ответ 7
вы можете использовать класс процесса очень легко. используйте это пространство имен
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.
}