基于C#实现屏幕录制功能

 更新时间:2025年03月12日 11:00:23   作者:小码编匠  
在许多应用场景中,屏幕录制是一项非常有用的功能,不管是用于教学、演示、故障排查还是游戏录制,本文将详细介绍如何使用 C# 实现屏幕录制功能,帮助大家快速掌握这一实用技能,需要的朋友可以参考下

前言

在许多应用场景中,屏幕录制是一项非常有用的功能。

不管是用于教学、演示、故障排查还是游戏录制,能够方便快捷地记录屏幕上的活动都是非常有价值的。

本文将详细介绍如何使用 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#屏幕录制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c# 方法可变数量的参数

    c# 方法可变数量的参数

    这个方法除去params,是一个普通的方法,接受int数组,返回组中的所以项之和
    2012-10-10
  • C#用表达式树构建动态查询的方法

    C#用表达式树构建动态查询的方法

    这篇文章主要介绍了C#用表达式树构建动态查询的方法,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-12-12
  • C#使用Aforge调用摄像头拍照的方法

    C#使用Aforge调用摄像头拍照的方法

    这篇文章主要为大家详细介绍了C#使用Aforge调用摄像头拍照的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 详解如何在C#中使用投影(Projection)

    详解如何在C#中使用投影(Projection)

    这篇文章主要介绍了详解如何在C#中使用投影(Projection),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C#byte数组传入C操作方法

    C#byte数组传入C操作方法

    在本篇内容中小编给大家分享了关于C#byte数组传入C操作方法以及相关知识点,需要的朋友们学习下。
    2019-02-02
  • C#生成指定范围内的不重复随机数

    C#生成指定范围内的不重复随机数

    对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。
    2015-05-05
  • C# 判断字符串第一位是否为数字

    C# 判断字符串第一位是否为数字

    C# 判断字符串第一位是否为数字,需要的朋友可以参考一下
    2013-04-04
  • Socket不能选择本地IP连接问题如何解决

    Socket不能选择本地IP连接问题如何解决

    本文将介绍一个不要手动,要用程序自动实现 ,可以绑定本地的任何IP地址,有需求的朋友可以参考下
    2012-11-11
  • C#实现的SQL备份与还原功能示例

    C#实现的SQL备份与还原功能示例

    这篇文章主要介绍了C#实现的SQL备份与还原功能,结合具体实例形式分析了C#操作数据库实现SQL备份与还原相关的控件、SQL连接、文件等操作技巧,需要的朋友可以参考下
    2017-06-06
  • 快速了解c# 结构体

    快速了解c# 结构体

    这篇文章主要介绍了c# 结构体的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论