返回

C# 如何获取当前活动窗口标题?

windows

C# 中获取当前活动窗口标题的终极指南

作为一名经验丰富的开发者,你肯定遇到过需要获取当前活动窗口标题的情况。无论是出于用户活动跟踪还是向用户提供上下文信息的目的,这个看似简单的任务都涉及到一些关键步骤。

获取活动窗口标题的详细指南

1. 引用 Win32 API 函数

要获取活动窗口的标题,你需要引用 Win32 API 函数 GetWindowText。该函数在 user32.dll 中定义,需要使用 Unicode 字符集:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

2. 获取活动窗口句柄

获取活动窗口的句柄是关键。GetForegroundWindow 函数负责返回最前置窗口的句柄:

IntPtr hWnd = GetForegroundWindow();

3. 使用 GetWindowText 获取标题

使用 GetWindowText 函数并指定句柄、字符串缓冲区和缓冲区最大容量来获取窗口

StringBuilder sb = new StringBuilder(256);
GetWindowText(hWnd, sb, sb.Capacity);
string title = sb.ToString();

完整代码示例

为了简化理解,这里提供了一个完整的代码示例:

using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

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

    static void Main()
    {
        IntPtr hWnd = GetForegroundWindow();

        StringBuilder sb = new StringBuilder(256);
        GetWindowText(hWnd, sb, sb.Capacity);
        string title = sb.ToString();

        Console.WriteLine($"当前活动窗口    }
}

常见问题解答

1. 获取的标题是否有长度限制?

是的, GetWindowText 函数有 255 个字符的长度限制,包括终止符。

2. 如何处理非 ASCII 字符?

如果窗口标题包含非 ASCII 字符,请使用适当的编码,例如 UTF-8 或 UTF-16。

3. 是否有其他方法获取活动窗口标题?

还有其他方法,例如使用 System.Windows.Forms.Screen 类的 ActiveForm 属性,但它仅适用于 Windows 窗体应用程序。

4. 如何在 .NET Core 中获取窗口标题?

在 .NET Core 中,你需要使用 System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform 方法检查操作系统平台并使用适当的 API。

5. 获取标题的性能影响如何?

在大多数情况下,获取窗口标题的性能影响可以忽略不计,但在频繁调用该函数时需要注意。

结论

获取当前活动窗口的标题是 C# 中一项常见且有用的任务。通过遵循这些步骤,你可以轻松地实现它,并提升你的应用程序在用户交互方面的功能。