基于C#實(shí)現(xiàn)屏幕錄制功能
前言
在許多應(yīng)用場(chǎng)景中,屏幕錄制是一項(xiàng)非常有用的功能。
不管是用于教學(xué)、演示、故障排查還是游戲錄制,能夠方便快捷地記錄屏幕上的活動(dòng)都是非常有價(jià)值的。
本文將詳細(xì)介紹如何使用 C# 實(shí)現(xiàn)屏幕錄制功能,幫助大家快速掌握這一實(shí)用技能。
環(huán)境準(zhǔn)備
在開始之前,請(qǐng)確保您已經(jīng)安裝了以下軟件:
1、Visual Studio
用于 C# 開發(fā)的集成開發(fā)環(huán)境。
2、FFmpeg
下載并解壓 FFmpeg,記錄下其可執(zhí)行文件的路徑。
創(chuàng)建 C# 程序
1、創(chuàng)建項(xiàng)目
打開 Visual Studio,新建一個(gè) Windows Forms 應(yīng)用程序項(xiàng)目,命名為 AppRecordScreen。
2、添加控件
在窗口中添加兩個(gè)按鈕,分別用于"開始錄制"和"停止錄制"。
錄屏代碼
接下來(lái),需要編寫錄屏的核心代碼。
以下是實(shí)現(xiàn)屏幕錄制的完整代碼:
using System.Diagnostics;
namespace AppRecordScreen
{
public partial class Form1 : Form
{
// 錄屏相關(guān)變量
privatebool isRecording = false;
private Process ffmpegProcess;
privatestring outputVideoPath;
// FFmpeg可執(zhí)行文件的完整路徑
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進(jìn)行屏幕錄制
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($"啟動(dòng)錄制失?。簕ex.Message}", "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 停止錄制屏幕
/// </summary>
private void StopRecording()
{
try
{
// 發(fā)送 'q' 命令給 FFmpeg 進(jìn)程以正常結(jié)束錄制
ffmpegProcess.StandardInput.WriteLine("q");
ffmpegProcess.WaitForExit();
isRecording = false;
MessageBox.Show($"錄制已完成。視頻保存在:{outputVideoPath}", "提示",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"停止錄制失?。簕ex.Message}", "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// 在關(guān)閉窗體時(shí)確保停止錄制
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (isRecording)
{
StopRecording();
}
}
}
}

代碼解釋
變量定義
主要定義了錄屏相關(guān)的變量,包括錄制狀態(tài)、FFmpeg 進(jìn)程、輸出視頻路徑和 FFmpeg 的可執(zhí)行文件路徑。
開始錄制
當(dāng)用戶點(diǎn)擊"開始錄制"按鈕時(shí),StartRecording 方法將被調(diào)用,生成一個(gè)帶有時(shí)間戳的唯一視頻文件名,并啟動(dòng) FFmpeg 進(jìn)程進(jìn)行屏幕錄制。
停止錄制
用戶點(diǎn)擊"停止錄制"按鈕時(shí),StopRecording 方法會(huì)發(fā)送結(jié)束命令給 FFmpeg 進(jìn)程,停止錄制并保存視頻。
關(guān)閉窗體
在窗體關(guān)閉時(shí),如果正在錄制,會(huì)自動(dòng)停止錄制,確保視頻完整保存。
總結(jié)
通過(guò)本文的學(xué)習(xí)掌握如何使用 C# 實(shí)現(xiàn)屏幕錄制功能,并能夠根據(jù)實(shí)際需求進(jìn)行擴(kuò)展和優(yōu)化。還可以在此基礎(chǔ)上不斷擴(kuò)展功能,例如添加視頻格式選擇、錄音功能等。
希望能通過(guò)這篇文章大家能夠快速上手并開發(fā)自己的屏幕錄制工具。
到此這篇關(guān)于基于C#實(shí)現(xiàn)屏幕錄制功能的文章就介紹到這了,更多相關(guān)C#屏幕錄制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#讀取txt文件數(shù)據(jù)的方法實(shí)例
讀取txt文本數(shù)據(jù)的內(nèi)容,是我們開發(fā)中經(jīng)常會(huì)遇到的一個(gè)功能,這篇文章主要給大家介紹了關(guān)于C#讀取txt文件數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2021-05-05
c#基礎(chǔ)系列之System.String的深入理解
這篇文章主要給大家介紹了關(guān)于c#基礎(chǔ)系列之System.String的深入理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
c#使用Dataset讀取XML文件動(dòng)態(tài)生成菜單的方法
這篇文章主要介紹了c#使用Dataset讀取XML文件動(dòng)態(tài)生成菜單的方法,涉及C#使用Dataset操作XML文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05
C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換效果
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12
C#代碼實(shí)現(xiàn)在Excel不同工作簿之間復(fù)制單元格區(qū)域
在處理?Excel?文檔時(shí),經(jīng)常需要將一個(gè)工作簿中的數(shù)據(jù)復(fù)制到另一個(gè)工作簿中,本文將介紹如何使用?Spire.XLS?for?.NET?將一個(gè)工作簿中的指定單元格范圍復(fù)制到另一個(gè)工作簿中,感興趣的小伙伴可以了解下2026-03-03

