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

ScreenCaptureJob无法录制全屏及录制时窗体自动缩小问题咨询

问题分析与解决方案

一、无法录制全屏的原因及修复

你代码里的核心问题在于错误设置了录制区域的尺寸:

Rectangle CaptureRect = new Rectangle(40, 40, WorkingArea.Width + 20000, WorkingArea.Height + 20000);

你把屏幕宽高强行加了20000,这个尺寸远远超出了显示器的实际有效显示范围。虽然你用try-catch捕获了ArgumentOutOfRangeException,但这种错误的尺寸设置本身就不符合屏幕录制逻辑——录制区域必须是屏幕实际存在的区域,超出的部分不仅无效,还会导致录制工具无法正确识别你想要的全屏范围,最终无法正常录制。

修复方案:

要录制全屏,直接使用屏幕的完整边界即可,不需要额外放大尺寸:

// 获取全屏区域(包含任务栏等所有显示区域)
Rectangle CaptureRect = Screen.PrimaryScreen.Bounds;

// 如果只想录制工作区(排除任务栏),改用这个:
// Rectangle CaptureRect = Screen.PrimaryScreen.WorkingArea;

将这个正确的矩形赋值给Job.CaptureRectangle,就能正常实现全屏录制了。另外,建议你补充捕获其他可能的异常(比如InvalidOperationException),能更全面地排查潜在问题。

二、录制开始时窗体自动缩小的原因

这个问题通常和ScreenCaptureJob的运行机制或你的窗体配置有关,常见的几种情况:

  • 录制工具的默认行为:有些屏幕录制库在启动录制时,会自动调整当前程序窗口的状态(比如强制退出最大化),避免自身窗口干扰录制结果。你可以查看所用录制库的文档,看看有没有配置项可以禁用这个行为。
  • 窗体状态被意外修改:如果你的窗体之前是最大化状态,录制启动时可能因为代码逻辑或库的内部处理,将WindowState改成了Normal,看起来就像是窗体缩小了。你可以在启动录制前保存当前窗体状态,录制开始后再恢复:
    // 保存当前窗口状态
    FormWindowState originalState = this.WindowState;
    // 执行启动录制的逻辑...
    // 恢复窗口状态
    this.WindowState = originalState;
    
  • 高DPI缩放的影响:如果你的显示器开启了高DPI缩放,录制工具可能因为适配问题导致窗体尺寸异常。可以尝试在项目的app.config中添加高DPI适配配置:
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
      <windowsSettings>
        <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware>
      </windowsSettings>
    </application>
    

内容的提问来源于stack exchange,提问作者Akın Işık

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:40:35