录像控件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;
}

C#屏幕录像控件代码相关推荐

  1. SAP屏幕设计器专题:编写控件代码(三)

    上一篇博文我只是画了一个屏幕,一个外壳而已,真正要实现我们需要的功能还需要写相应的代码. 输入SE51,打开我们的例子程序,切换到"流程逻辑",默认的屏幕代码如下图所示: 第一个P ...

  2. android 电量控件,Android实现显示电量的控件代码

    下面介绍了Android实现显示电量的控件代码,具体代码如下: 1.目录结构,本人是使用安卓死丢丢. 2.运行界面,输入框中输入数值,点击刷新,会再电池中显示出相应的电量 3.绘制自定义电池控件,首先 ...

  3. 0811-按钮操作(加法计算器)(拖控件找控件代码属性名称)(frame center bounds)(上下左右移动button图片)...

    -------------------- 加法计算器 实现步骤 1.拖控件   改textField键盘属性为numberPad ,label双击修改名称自动缩小尺寸  改属性名称不会改尺寸,   放 ...

  4. 屏幕滚动控件ScrollView的使用

    1.UIScrollView有2个子类,uitextview和uitableview,这两个控件经常需要用到,因此熟练掌握它的使用是很有必要的.它们都是在内容超出屏幕时,可以提供水平或垂直滚动条. 2 ...

  5. android多个水波球,android球形水波百分比控件代码

    本文主要介绍的是一个球形水波的百分比控件,市面上有各种形形色色的百分比控件,我一直觉得水波是最炫的,UI给了我这个机会,然而网上搜了一大堆,不是太复杂,代码太多(反正我是调不出效果来),就是有瑕疵的, ...

  6. [转贴]原创控件代码共享--日期选择控件

    思路:实现日期年月日的选择 1.可以设定年的起止年份 2.排除不正确日期选择的可能 3.使用javascript实现控制 4.使用Text属性方便获取设置日期值 =================== ...

  7. Delphi指针样式控件代码

    郑重感谢:本文代码来自Delphi盒子用户janker (janker),谢谢janker (janker)对Delphi社区做出的奉献!欢迎加入Delphi开发局QQ群:32422310  Delp ...

  8. html页面tableview,用JS写的一个TableView控件代码

    请看看编码是否规范,使用是否方便 HTML: 代码 编号姓名 {value}{value} 编号名称 {value}{value} Javascript: 代码 //class TableView { ...

  9. bartender的api帮助_在浏览器中通过bartender,调用条码打印机的active控件代码的实现...

    系统中须要在浏览器,直接调用条码打印机,打印出产品条码. 现实中的条码打印机,品种繁多,非常难在一个程序中实现, 于是我们用已经支持全部条码打印机的bartender软件 调用它的api ,来实如今浏 ...

最新文章

  1. matlab生成ai图片,MATLAB绘图:导出矢量图
  2. 关于:last-child的一点见解
  3. Why can’t the Unity panel be hidden?
  4. SpringBatch处理器ScriptItemProcessor执行脚本语言详解
  5. android Activity 之间传递复杂对象
  6. 随机数公式生成一个负数和正数之间的数_java产生从负数到正数范围的随机数方法...
  7. java中html5表格_java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)...
  8. e0266 cout 不明确_荐书 | 不正义的时代,识别不正义的多重面孔
  9. Windows 7双系统安装与卸载
  10. 七,OpenERP 移库操作模块
  11. 【Leetcode】亮眼题/新思路
  12. Linux 环境下 vi/vim 编辑器常用命令
  13. python爬虫爬取微信公众号的阅读数、喜爱数、文章标题和链接等信息
  14. Bootstrap学习心得
  15. 【Derivation】 条件数学期望公式
  16. 怎么出家ajax假死状态,Ajax如何解决假死?
  17. 面试之NGFW 性能测试
  18. *oulapp的双向证书破解
  19. 统计输入字符串中大写字母、小写字母、阿拉伯数字个数和特殊符号的个数
  20. 一个让我用得很爽的个性导航h2w1.com

热门文章

  1. linux下编译libuv库
  2. 「消防知识」2018注册消防工程师学习要点(含解析)
  3. 高数叔建模第四章:相关分析方法与计算
  4. Power BI--DAX函数高阶
  5. 贴片光耦的类型及作用!
  6. AD(二十一)面向加工——PCB的检查和生产输出(光绘、钻孔文件、IPC网表、贴片坐标文件、BOM表)
  7. 【性能测试】系统常用监控- -CPU
  8. 碳中和数据合集:含中国碳中和政策全集、碳中和论文合集
  9. The Swift Programming Language swift 4 下载地址
  10. 后台管理登陆口一般都如何进入?