指定区域截图,只需要将屏幕图片按区域裁剪即可。
指定窗口截图,先获取窗口的位置和大小,然后转化为指定区域截图了。
如果是制作指定窗口的录屏程序时,需要注意实时跟踪窗口的位置和大小(窗口位置和大小可能会调整变化)。
其它的就没有特别的了。
例子代码:
[复制到剪贴板] |
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);
}
}
}