如何使用 c # 获取当前活动窗口的标题?

我想知道如何使用 C # 获取当前活动窗口(即有焦点的窗口)的 Window 标题。

147645 次浏览

使用 WindowsAPI。调用 GetForegroundWindow()

GetForegroundWindow()将为活动窗口提供一个句柄(名为 hWnd)。

Documentation: GetForegroundWindow function | Microsoft Docs

在这里可以看到如何使用完整源代码实现这一点的示例:

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 一起编辑 以获得更好的正确性。

循环 Application.Current.Windows[]并找到带有 IsActive == true的那个。

如果你说的是 WPF,那么使用:

 Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);

你可以使用过程类,这是非常容易的。 使用这个名称空间

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

如果碰巧需要 < em > MDI 应用程序的当前活动表单 : (MDI-Multi Document Interface)。

Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;

基于 GetForegroundWindow function | Microsoft Docs:

[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字符。