📜  c# 获取前景窗口 - C# (1)

📅  最后修改于: 2023-12-03 15:13:52.483000             🧑  作者: Mango

C# 获取前景窗口

在编写Windows应用程序时,我们经常需要知道当前处于前景的窗口信息,例如获取窗口句柄或窗口标题等。C# 提供了丰富的 API 来实现获取前景窗口的功能。

获取前景窗口句柄

获取前景窗口句柄是获取前景窗口信息的基础操作。下面是一个示例代码,演示如何获取前景窗口句柄:

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

IntPtr handle = GetForegroundWindow();

该代码通过调用 GetForegroundWindow 函数获取前景窗口句柄,并将句柄保存在 handle 变量中。需要注意的是,该函数返回的是一个 IntPtr 类型的句柄,如果当前不存在前景窗口,则该句柄为 IntPtr.Zero

获取前景窗口标题

获取前景窗口标题是获取前景窗口信息的常用操作。下面是一个示例代码,演示如何获取前景窗口标题:

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

IntPtr handle = GetForegroundWindow();
StringBuilder titleBuilder = new StringBuilder(256);
int length = GetWindowText(handle, titleBuilder, titleBuilder.Capacity);
string title = titleBuilder.ToString(0, length);

该代码通过调用 GetWindowText 函数获取前景窗口标题,并将标题保存在 title 变量中。需要注意的是,该函数的第一个参数为前景窗口句柄,第二个参数为接收标题的缓冲区,第三个参数为缓冲区大小。

获取前景窗口类名

获取前景窗口类名是获取前景窗口信息的另一个常用操作。下面是一个示例代码,演示如何获取前景窗口类名:

[DllImport("user32.dll")]
private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

IntPtr handle = GetForegroundWindow();
StringBuilder classNameBuilder = new StringBuilder(256);
int length = GetClassName(handle, classNameBuilder, classNameBuilder.Capacity);
string className = classNameBuilder.ToString(0, length);

该代码通过调用 GetClassName 函数获取前景窗口类名,并将类名保存在 className 变量中。需要注意的是,该函数的参数和 GetWindowText 函数类似。

总结

本文介绍了如何使用 C# 获取前景窗口信息,包括获取前景窗口句柄、获取前景窗口标题和获取前景窗口类名。需要注意的是,获取前景窗口信息属于系统编程范畴,需要了解 Windows API 的相关知识。在实际开发中,我们可以通过 P/Invoke 调用 Windows API 实现获取前景窗口信息的功能。