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

.NET Core在Windows下捕获屏幕截图是否可行?

在.NET Core中实现屏幕截图的方案

没问题!.NET Core完全可以实现屏幕截图功能——虽然不像.NET Framework那样把相关API直接内置在框架里,但通过官方提供的NuGet包和平台特定的处理方式,轻松就能搞定。下面分场景给你详细讲:

一、Windows平台(最常用场景)

Windows下我们可以借助System.Drawing.Common这个NuGet包,它是.NET Core对GDI+的兼容实现,用法和你熟悉的.NET Framework那套几乎一致。

步骤:

  1. 先安装NuGet包:
    用Package Manager的话执行:Install-Package System.Drawing.Common
    用.NET CLI的话执行:dotnet add package System.Drawing.Common
  2. 编写截图代码:
using System.Drawing;
using System.Drawing.Imaging;

public static void CaptureScreen(string saveFilePath)
{
    // 获取主屏幕的尺寸
    var screenBounds = Screen.PrimaryScreen.Bounds;
    
    // 创建和屏幕尺寸匹配的位图
    using (var screenshotBitmap = new Bitmap(screenBounds.Width, screenBounds.Height))
    {
        // 创建绘图对象,用于将屏幕内容绘制到位图上
        using (var graphics = Graphics.FromImage(screenshotBitmap))
        {
            // 从屏幕左上角开始,把整个屏幕内容绘制到位图中
            graphics.CopyFromScreen(
                sourceX: 0, 
                sourceY: 0, 
                destinationX: 0, 
                destinationY: 0, 
                blockRegionSize: screenBounds.Size);
        }
        
        // 保存截图,这里用PNG格式,也可以换成JPG等其他格式
        screenshotBitmap.Save(saveFilePath, ImageFormat.Png);
    }
}

注意:从.NET 6开始,System.Drawing.Common被标记为Windows平台专属,如果在Linux或macOS上尝试使用这个包,会直接抛出异常,所以跨平台场景得换方案。

二、跨平台(Linux/macOS)的替代方案

如果你的项目需要跨平台运行,就不能依赖GDI+了,我们可以调用各平台的系统原生命令来实现截图:

Linux平台

可以用scrot(轻量级截图工具),先确保系统已经安装它:sudo apt install scrot(Debian/Ubuntu系),然后通过代码调用这个命令:

using System.Diagnostics;

public static void CaptureLinuxScreen(string saveFilePath)
{
    var processStartInfo = new ProcessStartInfo
    {
        FileName = "scrot",
        Arguments = saveFilePath,
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    };

    using (var process = Process.Start(processStartInfo))
    {
        process.WaitForExit();
    }
}

macOS平台

macOS自带screencapture命令,直接调用即可:

using System.Diagnostics;

public static void CaptureMacScreen(string saveFilePath)
{
    var processStartInfo = new ProcessStartInfo
    {
        FileName = "/usr/sbin/screencapture",
        // -x 参数是关闭截图时的快门音效,可根据需求调整
        Arguments = $"-x {saveFilePath}",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    };

    using (var process = Process.Start(processStartInfo))
    {
        process.WaitForExit();
    }
}

三、一些关键注意事项

  • 权限问题:在Linux和macOS上,你的应用需要获取屏幕访问权限。比如macOS需要在「系统设置→安全性与隐私→屏幕录制」里给你的应用授权,否则命令会执行失败。
  • 跨平台适配:如果是跨平台项目,建议通过OperatingSystem.IsWindows()、OperatingSystem.IsLinux()、OperatingSystem.IsMacOS()这些API来判断当前平台,然后调用对应的截图逻辑。

内容的提问来源于stack exchange,提问作者K-Dawg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:03:05