c# --屏幕录制

简介: 原文 http://hi.baidu.com/wcsjsdn/item/b2af6de7fefa8a334ddcafb9 看界面: 这 个主要是利用微软提供的库文件实现。(首先要在本机上安装解码器:WMEncoder_cn.exe。

原文 http://hi.baidu.com/wcsjsdn/item/b2af6de7fefa8a334ddcafb9

看界面:

这 个主要是利用微软提供的库文件实现。(首先要在本机上安装解码器:WMEncoder_cn.exe。注:这个是xp系统的解码器,如有需要,可以下载安 装window7的解码器 ),然后添加引用:Interop.WMEncoderLib.dll,在项目中添加命名空间:using WMEncoderLib;

这也没什么好说的,直接贴上代码:

首先定义一个WMEncoderManage类

public class WMEncoderManage
    {
        private static WMEncoder _encoder = null;
        public static WMEncoder GetWMEncoder
        {
            get
            {
                if (_encoder == null)
                {
                    _encoder = new WMEncoder();
                }

                return _encoder;
            }
        }


        private static string _defaultFormat = "屏幕视频/音频 - 高(CBR)";
        public static string DefaultFormat
        {
            get
            {
                return _defaultFormat;
            }

            set { _defaultFormat = value; }
        }
    }

然后下面开始:

/// <summary>
        /// 视频录制方法
        /// </summary>
        private void Coder()
        {
            try
            {
                WMEncoder Encoder = WMEncoderManage.GetWMEncoder;
                IWMEncSourceGroup SrcGrp;
                IWMEncSourceGroupCollection SrcGrpColl;
                SrcGrpColl = Encoder.SourceGroupCollection;
                SrcGrp = SrcGrpColl.Add("SG_1");

                IWMEncSource SrcVid;
                IWMEncSource SrcAud;
                SrcVid = SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
                SrcAud = SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);


                SrcAud.SetInput("Default_Audio_Device", "Device", "");
                SrcVid.SetInput("ScreenCapture1", "ScreenCap", "");


                IWMEncProfileCollection ProColl;
                IWMEncProfile Pro;
                int i;
                long lLength;

                ProColl = Encoder.ProfileCollection;
                lLength = ProColl.Count;

                for (i = 0; i < lLength - 1; i++)
                {
                    Pro = ProColl.Item(i);

                    if (Pro.Name == WMEncoderManage.DefaultFormat)
                    {
                        SrcGrp.set_Profile(Pro);
                        break;
                    }
                }

                IWMEncDisplayInfo Descr;
                Descr = Encoder.DisplayInfo;
                Descr.Author = "wangchao";
                Descr.Copyright = "wangchao";
                Descr.Description = "wangchao";
                Descr.Rating = "wangchao";
                Descr.Title = "wangchao";

                IWMEncAttributes Attr;
                Attr = Encoder.Attributes;
                Attr.Add("URL", "www.920wc.cn");

                IWMEncFile File;
                File = Encoder.File;
                File.LocalFileName = this.saveFileDialog1.FileName;

                Encoder.Start();
            }
            catch (Exception)
            {

                throw;
            }
        }

 

/// <summary>
        /// 浏览
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (DialogResult.OK == this.saveFileDialog1.ShowDialog())
            {
                this.tbFileSave.Text = saveFileDialog1.FileName;
            }
        }

 

在"开始录制"按钮事件中:

private void button2_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.tbFileSave.Text))
            {
                MessageBox.Show("请先选择视频文件保存路径");
                return;
            }

            Coder();

            label3.Text = "录制中...";
        }

   /// <summary>
        /// 停止录制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            WMEncoderManage.GetWMEncoder.Stop();
        }

        /// <summary>
        /// 暂停录制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbFileSave.Text))
            {
                MessageBox.Show("请先开始录制后暂停");
                return;
            }

            if (this.button4.Text == "暂停录制")
            {
                WMEncoderManage.GetWMEncoder.Pause();
                this.button4.Text = "继续录制";

                label3.Text = "录制暂时...";
            }
            else
            {
                WMEncoderManage.GetWMEncoder.Start();

                this.button4.Text = "暂停录制";

               label3.Text = "录制中...";
            }
        }
    }

好了,启动程序,选择保存路径及格式,这样就可以直接录制屏幕了。试一下,效果不错。

目录
相关文章
|
C# 编解码
WPF C# 多屏情况下,实现窗体显示到指定的屏幕内
原文:WPF C# 多屏情况下,实现窗体显示到指定的屏幕内 针对于一个程序,需要在两个显示屏上显示不同的窗体,(亦或N个显示屏N个窗体),可以使用如下的方式实现。
4913 0
|
C# 开发者
推荐一款C#开源的操作简单、免费的屏幕录制和GIF动画制作神器
推荐一款C#开源的操作简单、免费的屏幕录制和GIF动画制作神器
|
编解码 C# 图形学
C# 获取当前屏幕DPI
原文:C# 获取当前屏幕DPI 1.通过Graphics类获取 Graphics currentGraphics = Graphics.FromHwnd(new WindowInteropHelper(mainWindow).Handle); double dpixRatio = currentGraphics.DpiX/96; 比如当前屏幕设置DPI设置1.5倍,可以通过如上通过后台获取。
2958 0
C# 获取当前屏幕的宽高和位置
原文:C# 获取当前屏幕的宽高和位置 上一篇博客《C# 获取当前屏幕DPI》,介绍了如何获取当前屏幕的DPI设置 本章主要介绍如何获取当前窗口所在屏幕的信息 当前屏幕信息 如果当前是单屏幕,可以直接获取主屏幕 var primaryScreen = Screen.
1286 0
|
C# 编解码 图形学
C# 获取当前屏幕的宽高和位置
上一篇博客《C# 获取当前屏幕DPI》,介绍了如何获取当前屏幕的DPI设置 本章主要介绍如何获取当前窗口所在屏幕的信息 当前屏幕信息 如果当前是单屏幕,可以直接获取主屏幕 var primaryScreen = Screen.
2024 0
|
编解码 C# 图形学
C# 获取当前屏幕DPI
1.通过Graphics类获取 Graphics currentGraphics = Graphics.FromHwnd(new WindowInteropHelper(mainWindow).Handle); double dpixRatio = currentGraphics.DpiX/96; 比如当前屏幕设置DPI设置1.5倍,可以通过如上通过后台获取。
1230 0
C# 获取屏幕的大小
WinForm: int iActulaWidth = Screen.PrimaryScreen.Bounds.Width; int iActulaHeight = Screen.
868 0
|
C# 数据安全/隐私保护
C#弹出式窗口设计及窗体居屏幕中间
一、功能需求: 某个弹出的窗体可以输入密码,且居屏幕中间。 二、解决方案: 1、解决弹出窗体居中的问题 Form 有个方便的属性,StartPoint可以用来设置Form的特殊位置。
982 0