基于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#读取txt文件数据的方法实例

    C#读取txt文件数据的方法实例

    读取txt文本数据的内容,是我们开发中经常会遇到的一个功能,这篇文章主要给大家介绍了关于C#读取txt文件数据的相关资料,需要的朋友可以参考下
    2021-05-05
  • C#使用非托管代码直接修改字符串的方法

    C#使用非托管代码直接修改字符串的方法

    在string方法中,如ToUpper等字符串操作方法,都会产生一个新的字符串,这样增大了运行开支。一个替代方案是通过非托管代码直接操作字符串。如替代ToUpper方法:
    2013-07-07
  • c#基础系列之System.String的深入理解

    c#基础系列之System.String的深入理解

    这篇文章主要给大家介绍了关于c#基础系列之System.String的深入理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • c#得到本月有几周和这几周的起止时间示例代码

    c#得到本月有几周和这几周的起止时间示例代码

    本篇文章主要是对c#得到本月有几周和这几周的起止时间的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • C#操作字符串方法总结实例代码

    C#操作字符串方法总结实例代码

    这篇文章主要介绍了C#操作字符串方法总结实例代码,需要的朋友可以参考下
    2017-10-10
  • c#使用Dataset读取XML文件动态生成菜单的方法

    c#使用Dataset读取XML文件动态生成菜单的方法

    这篇文章主要介绍了c#使用Dataset读取XML文件动态生成菜单的方法,涉及C#使用Dataset操作XML文件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#中关于可空类型的小知识

    C#中关于可空类型的小知识

    这篇文章主要介绍了C#中关于可空类型的小知识,本文讲解可空类型运算的小技巧,需要的朋友可以参考下
    2015-04-04
  • C#实现鼠标左右键切换效果

    C#实现鼠标左右键切换效果

    这篇文章主要为大家详细介绍了如何利用C#实现鼠标左右键切换功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • 基于WPF实现绘制地铁路线图

    基于WPF实现绘制地铁路线图

    经常坐地铁,却不知道地铁多少条线路?哪个站下车?本文就来带大家利用WPF绘制深圳地铁路线图,从而带大家掌握WPF在图形绘制方面的一些知识,希望对大家有所帮助
    2023-06-06
  • C#代码实现在Excel不同工作簿之间复制单元格区域

    C#代码实现在Excel不同工作簿之间复制单元格区域

    在处理 Excel 文档时,经常需要将一个工作簿中的数据复制到另一个工作簿中,本文将介绍如何使用 Spire.XLS for .NET 将一个工作簿中的指定单元格范围复制到另一个工作簿中,感兴趣的小伙伴可以了解下
    2026-03-03

最新评论