前言
在许多应用场景中,屏幕录制是一项非常有用的功能。
不管是用于教学、演示、故障排查还是游戏录制,能够方便快捷地记录屏幕上的活动都是非常有价值的。
本文将详细介绍如何使用 c# 实现屏幕录制功能,帮助大家快速掌握这一实用技能。
环境准备
在开始之前,请确保您已经安装了以下软件:
1、visual studio
用于 c# 开发的集成开发环境。
2、ffmpeg
下载并解压 ffmpeg,记录下其可执行文件的路径。
创建 c# 程序
1、创建项目
打开 visual studio,新建一个 windows forms 应用程序项目,命名为 apprecordscreen
。
2、添加控件
在窗口中添加两个按钮,分别用于"开始录制"和"停止录制"。
录屏代码
接下来,需要编写录屏的核心代码。
以下是实现屏幕录制的完整代码:
using system.diagnostics; namespace apprecordscreen { public partial class form1 : form { // 录屏相关变量 privatebool isrecording = false; private process ffmpegprocess; privatestring outputvideopath; // ffmpeg可执行文件的完整路径 privatestring ffmpegpath = @"d:\software\ffmpeg-master-latest-win64-gpl-shared \bin\ffmpeg.exe"; public form1() { initializecomponent(); } private async void btnstart_click(object sender, eventargs e) { if (!isrecording) { startrecording(); } } private void btnstop_click(object sender, eventargs e) { if (isrecording) { stoprecording(); } } /// <summary> /// 开始录制屏幕 /// </summary> private void startrecording() { // 生成唯一的视频文件名 outputvideopath = path.combine( environment.getfolderpath(environment.specialfolder.desktop), $"screenrecord_ {datetime.now:yyyymmdd_hhmmss}.mp4" ); try { // 使用ffmpeg进行屏幕录制 ffmpegprocess = new process { startinfo = new processstartinfo { // 使用完整路径 filename = ffmpegpath, arguments = $"-f gdigrab -framerate 30 -i desktop -c:v libx264 -preset ultrafast {outputvideopath}", useshellexecute = false, redirectstandardinput = true, createnowindow = true } }; ffmpegprocess.start(); isrecording = true; messagebox.show("录制已开始", "提示", messageboxbuttons.ok, messageboxicon.information); } catch (exception ex) { messagebox.show($"启动录制失败:{ex.message}", "错误", messageboxbuttons.ok, messageboxicon.error); } } /// <summary> /// 停止录制屏幕 /// </summary> private void stoprecording() { try { // 发送 'q' 命令给 ffmpeg 进程以正常结束录制 ffmpegprocess.standardinput.writeline("q"); ffmpegprocess.waitforexit(); isrecording = false; messagebox.show($"录制已完成。视频保存在:{outputvideopath}", "提示", messageboxbuttons.ok, messageboxicon.information); } catch (exception ex) { messagebox.show($"停止录制失败:{ex.message}", "错误", messageboxbuttons.ok, messageboxicon.error); } } // 在关闭窗体时确保停止录制 protected override void onformclosing(formclosingeventargs e) { if (isrecording) { stoprecording(); } } } }
代码解释
变量定义
主要定义了录屏相关的变量,包括录制状态、ffmpeg 进程、输出视频路径和 ffmpeg 的可执行文件路径。
开始录制
当用户点击"开始录制"按钮时,startrecording
方法将被调用,生成一个带有时间戳的唯一视频文件名,并启动 ffmpeg 进程进行屏幕录制。
停止录制
用户点击"停止录制"按钮时,stoprecording
方法会发送结束命令给 ffmpeg 进程,停止录制并保存视频。
关闭窗体
在窗体关闭时,如果正在录制,会自动停止录制,确保视频完整保存。
总结
通过本文的学习掌握如何使用 c# 实现屏幕录制功能,并能够根据实际需求进行扩展和优化。还可以在此基础上不断扩展功能,例如添加视频格式选择、录音功能等。
希望能通过这篇文章大家能够快速上手并开发自己的屏幕录制工具。
到此这篇关于基于c#实现屏幕录制功能的文章就介绍到这了,更多相关c#屏幕录制内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论