首页 > 代码库 > C#屏幕录像控件代码

C#屏幕录像控件代码

录像控件Demo 下载:
http://hocor.cn/sc.rar

下面是主要代码,

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WMEncoderLib;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Threading;
using System.IO;
using System.Drawing.Drawing2D;

namespace F.ScreenCamera
{
public partial class MainForm : Form
{

//////////有关系统托盘

//////////Win32

//////////成员

///////////////////////////////////////////////////////////////////////////////////////////////
////// 程序初始化
///private void AppInit()
{
enc = new WMEncoderClass();
LoadSeting();
}
////// 设置皮肤
//////private void SetSkin(string SkinName)
{
this.skin.SerialNumber = "";
this.skin.SkinFile = "Skin\\" + SkinName + ".ssk";
}
////// 初始压缩选项列表
///private void InitCompression()
{
//
ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
string Compression = appseting.ReadKeyValue("Compression");
//
enc = new WMEncoderClass();
wspim = enc.SourcePluginInfoManager;
wspim.Refresh();
IWMEncProfileCollection wpfc = enc.ProfileCollection;
IWMEncProfile wp;
this.CompressionOptionListBox.Items.Clear();
for (int i = 0; i < wpfc.Count; i++)
{
wp = wpfc.Item(i);
this.CompressionOptionListBox.Items.Add(wp.Name);
if (wp.Name == Compression)
this.CompressionOptionListBox.SelectedIndex = i;
}

}
////// 加载设置
///private void LoadSeting()
{
ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
//是否录制声音
this.ChkSound.Checked =Convert.ToBoolean(appseting.ReadKeyValue("ChkSound"));
//是否隐藏主窗体
this.ChkHideMainForm.Checked = Convert.ToBoolean(appseting.ReadKeyValue("ChkHideMainForm"));
//快捷键设置
this.SkStartAndPause.Text = appseting.ReadKeyValue("SKey_StartAndPause");
this.SkStop.Text = appseting.ReadKeyValue("SKey_Stop");
this.SkShowAndHide.Text = appseting.ReadKeyValue("SKey_ShowAndHide");
//录制区域
int rect = Convert.ToInt32(appseting.ReadKeyValue("CameraRect"));
if (rect == 1)
this.RWindow.Checked = true;
else
this.RScreen.Checked = true;
//
Size sz = MainForm.GetScreenSize();
this.rw.Text = sz.Width.ToString();
this.rh.Text = sz.Height.ToString();
}
////// 取得选择的压缩选项
//////private IWMEncProfile2 GetSelectCompressionOption()
{
IWMEncProfileCollection wpfc = enc.ProfileCollection;
IWMEncProfile wp;
IWMEncProfile2 wp2 = new WMEncProfile2Class();
if (this.CompressionOptionListBox.SelectedIndex == -1)
{
return null;
}
for (int i = 0; i < wpfc.Count; i++)
{
wp = wpfc.Item(i);

if (this.CompressionOptionListBox.SelectedItem.ToString() == wp.Name)
{
wp2.LoadFromIWMProfile(wp);
return wp2;
}
}
return null;
}
////// 开始录制
///private void StartCamera()
{
IWMEncSourceGroupCollection SrcGrpColl;
IWMEncSourceGroup2 SrcGrp;
IWMEncAudioSource SrcAud;
IWMEncVideoSource2 SrcVid;
IWMEncProfile2 Pro;
enc = new WMEncoderClass();
//-------------------------------------------
try
{
SrcGrpColl = enc.SourceGroupCollection;
SrcGrp = (IWMEncSourceGroup2)SrcGrpColl.Add("SG_1");
SrcVid = (IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);

//是否录制声音
if (this.ChkSound.Checked)
{
SrcAud = (IWMEncAudioSource)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
SrcAud.SetInput("Default_Audio_Device", "DEVICE", "");
}
SrcVid.SetInput("ScreenCapture1", "ScreenCap", "");

指定屏幕区域录制

//确定压缩方式
Pro = GetSelectCompressionOption();
if (Pro == null)
{
MessageBox.Show("错误!请选中 视频压缩模板!");
return;
}
SrcGrp.set_Profile(Pro);

//检查输出文件名是否为空
if (this.OutFilePathTextBox.Text.Length < 1)
{
MessageBox.Show("请指定保存路径!");
return;
}

输出文件名

enc.Start();
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}

}
///////////////////////////////////////////////////////////////////////////////////////////////
////// 构造
///public MainForm()
{
InitializeComponent();
//Control.CheckForIllegalCrossThreadCalls = false;
//加载皮肤
ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
string skin = appseting.ReadKeyValue("skin");
this.SetSkin(skin);
//
//初始托盘
NotificationIcon();
//
//窗体大小固定
this.MinimumSize=this.Size;
this.MaximumSize = this.Size;
}
////// 主窗体加载事件
/////////private void MainForm_Load(object sender, EventArgs e)
{
AppInit();
InitCompression();
}
////// 选择输出文件保存路径
/////////private void SelectOutPathButton_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "WMV文件(*.wmv)|*.wmv";
sfd.RestoreDirectory = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
this.OutFilePathTextBox.Text = sfd.FileName;
if(File.Exists(sfd.FileName))
File.Delete(sfd.FileName);
}
}
////// 开始录制
/////////private void StartButton_Click(object sender, EventArgs e)
{
if (this.CompressionOptionListBox.SelectedIndex > -1 && this.OutFilePathTextBox.Text.Trim() != "")
{

th = new Thread( new ThreadStart(start));
th.IsBackground = true;
th.Start();
//将开始按钮不可用
this.StartButton.Enabled = false;
//暂停按钮可用
this.PauseButton.Enabled = true;
//
//窗体隐藏
if (this.ChkHideMainForm.Checked)
{
this.WindowState = FormWindowState.Minimized;
this.Visible = false;
}
}
else
{
if (this.OutFilePathTextBox.Text.Trim() == "")
MessageBox.Show("请选择录像文件保存位置");
if (this.CompressionOptionListBox.SelectedIndex == -1)
MessageBox.Show("请选择一种压缩方案");
}
}
private void start()
{
VoidDelegate dstart = new VoidDelegate(StartCamera);
this.Invoke(dstart);
}
////// 停止录制按钮
/////////private void StopButton_Click(object sender, EventArgs e)
{
th.Abort();
enc.Stop();
this.StartButton.Enabled = true;
this.PauseButton.Enabled = false;

}
////// 暂停录制按钮
/////////private void PauseButton_Click(object sender, EventArgs e)
{
if (this.PauseButton.Text != "继续录制")
{
enc.Pause();
this.PauseButton.Text = "继续录制";
}
else
{
enc.Start();
this.PauseButton.Text = "暂停录制";
}
}
////// 单击主窗体关闭按钮
/////////private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.ApplicationExitCall && e.CloseReason != CloseReason.WindowsShutDown)
{
e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
this.Visible= false;
}
else
{
//none
}
}
////// 压缩选项更改
/////////private void CompressionOptionListBox_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox lb = (ListBox)sender;
ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
appseting.UpdateKey("Compression", lb.Items[lb.SelectedIndex].ToString());
}
////// 压缩选项更改
/////////private void CompressionOptionListBox_MouseClick(object sender, MouseEventArgs e)
{
ListBox lb = (ListBox)sender;
ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
appseting.UpdateKey("Compression", lb.Items[lb.SelectedIndex].ToString());
}

快捷键

录制区域
////// 是否录声音
/////////private void ChkSound_CheckedChanged(object sender, EventArgs e)
{
ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
appseting.UpdateKey("ChkSound", this.ChkSound.Checked.ToString());
}
//是否隐藏主窗体
private void ChkHideMainForm_CheckedChanged(object sender, EventArgs e)
{
ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
appseting.UpdateKey("ChkHideMainForm", this.ChkHideMainForm.Checked.ToString());
}

//////////////////////////////////////////////////////////////////////////////
////// 取得屏幕大小
//////public static Size GetScreenSize()
{
//获得当前屏幕的分辨率
Screen scr = Screen.PrimaryScreen;
Rectangle rc = scr.Bounds;
Size size = new Size(rc.Width, rc.Height);
return size;
}