在C#中捕获活动窗口的屏幕截图通常需要使用System.Drawing
命名空间中的Bitmap
和Graphics
类。以下是详细的步骤和实例源代码:
获取活动窗口的句柄: 使用GetForegroundWindow
函数获取当前活动窗口的句柄。
获取窗口的位置和大小: 使用GetWindowRect
函数获取窗口的矩形区域。
创建Bitmap
对象: 使用Bitmap
类创建一个与窗口大小相同的位图对象。
使用Graphics
对象绘制屏幕截图: 使用Graphics
类的CopyFromScreen
方法将窗口的内容复制到位图中。
using System;
using System.Drawing;
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
static void Main()
{
try
{
// 获取活动窗口句柄
IntPtr hWnd = GetForegroundWindow();
// 获取窗口位置和大小
RECT windowRect;
GetWindowRect(hWnd, out windowRect);
// 创建Bitmap对象
using (Bitmap bmp = new Bitmap(windowRect.Right - windowRect.Left, windowRect.Bottom - windowRect.Top))
{
// 创建Graphics对象
using (Graphics g = Graphics.FromImage(bmp))
{
// 将窗口内容绘制到Bitmap中
g.CopyFromScreen(new Point(windowRect.Left, windowRect.Top), Point.Empty, bmp.Size);
}
// 保存屏幕截图(可根据需要进行保存)
bmp.Save("screenshot.png");
Console.WriteLine("屏幕截图已保存成功。");
}
}
catch (Exception ex)
{
Console.WriteLine($"发生异常:{ex.Message}");
}
}
}
这个示例代码演示了如何通过C#捕获活动窗口的屏幕截图。请注意,此代码需要在具有足够权限的环境中运行,因为它涉及到对其他窗口的访问。
源代码获取:公众号回复消息【code:86925
】