.NET Core在Windows下捕获屏幕截图是否可行?
在.NET Core中实现屏幕截图的方案
没问题!.NET Core完全可以实现屏幕截图功能——虽然不像.NET Framework那样把相关API直接内置在框架里,但通过官方提供的NuGet包和平台特定的处理方式,轻松就能搞定。下面分场景给你详细讲:
一、Windows平台(最常用场景)
Windows下我们可以借助System.Drawing.Common这个NuGet包,它是.NET Core对GDI+的兼容实现,用法和你熟悉的.NET Framework那套几乎一致。
步骤:
- 先安装NuGet包:
用Package Manager的话执行:Install-Package System.Drawing.Common
用.NET CLI的话执行:dotnet add package System.Drawing.Common - 编写截图代码:
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
相关产品推荐
相关产品推荐

