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

C# WinForm 如何不最小化当前窗体即可截取其后方所有屏幕内容

C# WinForm 无需最小化截取窗体后方屏幕实现方案

核心思路

利用毫秒级的临时窗体隐藏操作完成截图,全程无最小化动画,用户几乎感知不到窗体状态变化,即可拿到Form1遮挡区域在内的完整屏幕内容。

具体实现步骤

  • 点击按钮后先将当前窗体的不透明度设置为0,调用Application.DoEvents()强制系统刷新屏幕渲染,确保窗体已经从显示层完全移除
  • 调用Graphics.CopyFromScreen方法复制全屏内容到内存位图对象中
  • 截图完成后立刻将窗体不透明度恢复为1,整个操作耗时不超过10ms,用户无感知

可用代码示例

private void btnCapture_Click(object sender, EventArgs e)
{
    // 临时隐藏窗体,无最小化动画
    this.Opacity = 0;
    // 强制刷新屏幕,确保窗体完全隐藏
    Application.DoEvents();

    // 捕获主屏幕全屏内容,多屏场景可遍历Screen.AllScreens处理
    Rectangle fullScreenBounds = Screen.PrimaryScreen.Bounds;
    Bitmap captureBmp = new Bitmap(fullScreenBounds.Width, fullScreenBounds.Height);
    using (Graphics g = Graphics.FromImage(captureBmp))
    {
        g.CopyFromScreen(fullScreenBounds.Location, Point.Empty, fullScreenBounds.Size);
    }

    // 立刻恢复窗体显示
    this.Opacity = 1;

    // 此处可添加自定义逻辑,比如展示截图、保存到本地等
    captureBmp.Save(@"D:\test_capture.png", System.Drawing.Imaging.ImageFormat.Png);
}

注意事项

  • 如果窗体设置了TransparencyKey或者使用了分层窗口特效,可额外加一行this.Hide()配合使用,隐藏完成后再调用this.Show()恢复,效果一致
  • 多显示器场景下,遍历Screen.AllScreens集合分别截图后拼接,即可拿到所有屏幕的完整内容

内容的提问来源于stack exchange,提问作者Pierre Saint Bermudez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:24:03