You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获窗口截图?我的C#窗口截图代码生成空白图片

窗口截图生成空图片的问题排查与解决

我看到你遇到了窗口截图生成空图的问题,而且已经确认窗口句柄和GetWindowRect功能正常,那咱们直接揪出代码里的关键错误:

你的CopyFromScreen调用参数写错了!看这一行:

gfxScreenshot.CopyFromScreen(window.Left, window.Right, 0, 0, size, CopyPixelOperation.SourceCopy);

CopyFromScreen的第二个参数是源区域的左上角Y坐标,但你传成了window.Right(窗口的右边界X坐标),这就导致截图的起始Y位置远远超出了窗口的实际范围,自然截不到任何内容,最终生成空图片。

修正后的代码

把第二个参数改成window.Top就可以正常截图了,优化后的ScreenShotWindow方法如下:

public static void ScreenShotWindow(IntPtr whandle)
{
    // 获取窗口矩形区域
    Rect window = new Rect();
    GetWindowRect(whandle, ref window);

    // 计算窗口尺寸
    int width = window.Right - window.Left;
    int height = window.Bottom - window.Top;
    Size size = new Size(width, height); // 简化尺寸初始化写法

    // 创建对应尺寸的位图
    var bmpScreenshot = new Bitmap(width, height, PixelFormat.Format32bppArgb);

    // 从位图创建绘图对象
    var gfxScreenshot = Graphics.FromImage(bmpScreenshot);

    // 修正:第二个参数改为窗口的Top坐标
    gfxScreenshot.CopyFromScreen(window.Left, window.Top, 0, 0, size, CopyPixelOperation.SourceCopy);

    // 保存截图到指定路径
    bmpScreenshot.Save("Screenshot.png", ImageFormat.Png);
}

额外注意事项

  • 确保目标窗口没有被最小化,最小化状态下的窗口无法通过这种方式捕获截图
  • 如果程序运行在高DPI(如125%/150%缩放)系统上,建议在项目中启用DPI感知,避免截图出现偏移或模糊问题,可以通过添加应用程序清单来配置

内容的提问来源于stack exchange,提问作者kuhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:02:26