C#实现屏幕录像

C#实现屏幕录像
08年捣鼓的小东西,当时发在一个sns 网站上,不能在vista下运行
截个图先:

 


Demo 下载:
http://hocor.cn/sc.rar


下面是主要代码,

ContractedBlock.gif ExpandedBlockStart.gif Code
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
ExpandedBlockStart.gifContractedBlock.gif
{
    
public partial class MainForm : Form
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{

ContractedSubBlock.gifExpandedSubBlockStart.gif        
有关系统托盘#region 有关系统托盘
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 托盘图标类实例
        
/// </summary>

        private NotifyIcon notifyIcon;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 托盘菜单 
        
/// </summary>

        private ContextMenu notificationMenu;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 初始化托盘
        
/// </summary>

        public void NotificationIcon()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            notifyIcon 
= new NotifyIcon();
            notificationMenu 
= new ContextMenu(InitializeMenu());
            notifyIcon.DoubleClick 
+= IconDoubleClick;
            notifyIcon.Icon 
= this.Icon;
            notifyIcon.ContextMenu 
= notificationMenu;
            notifyIcon.Visible 
= true;
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 托盘菜单
        
/// </summary>
        
/// <returns></returns>

        private MenuItem[] InitializeMenu()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
//加载主题菜单
            MenuItem SkinMenu = new MenuItem("主题");
            DirectoryInfo dir 
= new DirectoryInfo(Application.StartupPath + "\\Skin");
            
foreach (FileInfo skinfile in dir.GetFiles())
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
string skinname = skinfile.Name.Substring(0, (int)skinfile.Name.Length - 4);
                SkinMenu.MenuItems.Add(
new MenuItem(skinname, ChangeSkin));
            }

            
//
            
//
            MenuItem[] menu = new MenuItem[]
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
new MenuItem("显示主窗口", IconDoubleClick),
                
new MenuItem("隐藏主窗口", HideMainForm),
                SkinMenu,
    
new MenuItem("关于", menuAboutClick),
    
new MenuItem("退出", menuExitClick)
   }
;
            
return menu;
        }

ContractedSubBlock.gifExpandedSubBlockStart.gif                    
托盘事件#region 托盘事件
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
/**//// <summary>
                    
/// 托盘关于菜单 
                    
/// </summary>
                    
/// <param name="sender"></param>
                    
/// <param name="e"></param>

                    private void menuAboutClick(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{

                        
if (about == null || about.IsDisposed)
                            about 
= new About();
                        about.Show();
                    }

ExpandedSubBlockStart.gifContractedSubBlock.gif                    
/**//// <summary>
                    
/// 托盘退出菜单
                    
/// </summary>
                    
/// <param name="sender"></param>
                    
/// <param name="e"></param>

                    private void menuExitClick(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        
this.notifyIcon.Visible = false;
                        Application.Exit();
                    }

ExpandedSubBlockStart.gifContractedSubBlock.gif                    
/**//// <summary>
                    
/// 双击托盘图标显示主窗口
                    
/// </summary>
                    
/// <param name="sender"></param>
                    
/// <param name="e"></param>

                    private void IconDoubleClick(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        
this.Visible = true;
                        
this.WindowState = FormWindowState.Normal;
                    }

ExpandedSubBlockStart.gifContractedSubBlock.gif                    
/**//// <summary>
                    
/// 隐藏主窗口
                    
/// </summary>
                    
/// <param name="sender"></param>
                    
/// <param name="e"></param>

                    private void HideMainForm(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        
this.WindowState = FormWindowState.Minimized;
                        
this.Visible = false;
                    }

ExpandedSubBlockStart.gifContractedSubBlock.gif                    
/**//// <summary>
                    
/// 改变风格
                    
/// </summary>
                    
/// <param name="sender"></param>
                    
/// <param name="e"></param>

                    private void ChangeSkin(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        
string skinname = ((MenuItem)sender).Text;
                        SetSkin(skinname);
                        ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
                        appseting.UpdateKey(
"skin", skinname);
                    }

                    
#endregion

        
#endregion


ContractedSubBlock.gifExpandedSubBlockStart.gif        
Win32#region Win32
        [DllImport(
"user32")]
        
static extern IntPtr SetCapture(IntPtr hwnd);
        [DllImport(
"user32")]
        
static extern IntPtr ReleaseCapture();
        [DllImport(
"user32.dll")]
        
static extern IntPtr WindowFromPoint(IntPtr xPoint, IntPtr yPoint);
        [DllImport(
"user32.dll")]
        
static extern IntPtr GetDC(IntPtr hWnd);

        [StructLayout(LayoutKind.Sequential)]
        
public struct RECT
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
public int left;
            
public int top;
            
public int right;
            
public int bottom;
ExpandedSubBlockStart.gifContractedSubBlock.gif            
public int Width() return right - left; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
public int Height() return bottom - top; }
        }


        [DllImport(
"user32.dll")]
        
// 注意,运行时知道如何列集一个矩形
        static extern IntPtr GetWindowRect(IntPtr hwnd, ref RECT rc);
        [DllImport(
"user32.dll")]
        
static extern IntPtr PostMessage(IntPtr hWnd, IntPtr iMsg, IntPtr wParam, IntPtr lParam);
        
#endregion


ContractedSubBlock.gifExpandedSubBlockStart.gif        
成员#region 成员
        
private WMEncoder enc;
        IWMEncSourcePluginInfoManager wspim;
        Rectangle lastrect 
= new Rectangle(0000);
        
private About about;
        
public fScreen screen;
        
private Thread th;
        
private delegate void VoidDelegate();
        
#endregion


ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**////
        
/// <summary>
        
/// 程序初始化
        
/// </summary>

        private void AppInit()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            enc 
= new WMEncoderClass();
            LoadSeting();
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 设置皮肤
        
/// </summary>
        
/// <param name="SkinName"></param>

        private void SetSkin(string SkinName)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
this.skin.SerialNumber = "";
            
this.skin.SkinFile = "Skin\\" + SkinName + ".ssk";
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 初始压缩选项列表
        
/// </summary>

        private void InitCompression()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
//
            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++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                wp 
= wpfc.Item(i);
                
this.CompressionOptionListBox.Items.Add(wp.Name);
                
if (wp.Name == Compression)
                    
this.CompressionOptionListBox.SelectedIndex = i;
            }


        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 加载设置
        
/// </summary>

        private void LoadSeting()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            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();
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 取得选择的压缩选项
        
/// </summary>
        
/// <returns></returns>

        private IWMEncProfile2 GetSelectCompressionOption()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            IWMEncProfileCollection wpfc 
= enc.ProfileCollection;
            IWMEncProfile wp;
            IWMEncProfile2 wp2 
= new WMEncProfile2Class();
            
if (this.CompressionOptionListBox.SelectedIndex == -1)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
return null;
            }

            
for (int i = 0; i < wpfc.Count; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                wp 
= wpfc.Item(i);

                
if (this.CompressionOptionListBox.SelectedItem.ToString() == wp.Name)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    wp2.LoadFromIWMProfile(wp);
                    
return wp2;
                }

            }

            
return null;
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 开始录制
        
/// </summary>

        private void StartCamera()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            IWMEncSourceGroupCollection SrcGrpColl;
            IWMEncSourceGroup2 SrcGrp;
            IWMEncAudioSource SrcAud;
            IWMEncVideoSource2 SrcVid;
            IWMEncProfile2 Pro;
            enc 
= new WMEncoderClass();
            
//-------------------------------------------
            try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                SrcGrpColl 
= enc.SourceGroupCollection;
                SrcGrp 
= (IWMEncSourceGroup2)SrcGrpColl.Add("SG_1");
                SrcVid 
= (IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);

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

                SrcVid.SetInput(
"ScreenCapture1""ScreenCap""");

ContractedSubBlock.gifExpandedSubBlockStart.gif                
指定屏幕区域录制#region 指定屏幕区域录制
                
if (this.RectCustom.Checked)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    Size priScreen 
= SystemInformation.PrimaryMonitorSize;

                    
float xx = (float)SrcVid.Height / (float)priScreen.Height;
                    
float yy = (float)SrcVid.Width / (float)priScreen.Width;

                    
int ix = Convert.ToInt32(this.rx.Text);
                    
int iy = Convert.ToInt32(this.ry.Text);
                    
int ih = Convert.ToInt32(this.rh.Text);
                    
int iw = Convert.ToInt32(this.rw.Text);
      
                    SrcVid.CroppingLeftMargin 
= (int)((float)ix * yy);
                    SrcVid.CroppingTopMargin 
= (int)((float)iy * xx);

                    
if (SrcVid.CroppingLeftMargin >= priScreen.Width)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        MessageBox.Show(
"屏幕区域外!");
                        
return;
                    }


                    
if (SrcVid.CroppingTopMargin >= priScreen.Height)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        MessageBox.Show(
"屏幕区域外!");
                        
return;
                    }


                    
int ibm = priScreen.Height - ih - iy;

                    
if (ibm <= 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        MessageBox.Show(
"屏幕区域外!");
                        
return;
                    }


                    
int irm = priScreen.Width - iw - ix;

                    
if (irm <= 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        MessageBox.Show(
"屏幕区域外!");
                        
return;
                    }

                    SrcVid.CroppingRightMargin 
= (int)((float)irm * yy);
                    SrcVid.CroppingBottomMargin 
= (int)((float)ibm * xx);
                }


                
#endregion


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

                SrcGrp.set_Profile(Pro);

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


ContractedSubBlock.gifExpandedSubBlockStart.gif                
输出文件名#region 输出文件名
                
string sFile = this.OutFilePathTextBox.Text;
                
string sExt = sFile.Substring(sFile.LastIndexOf("."));
ExpandedSubBlockStart.gifContractedSubBlock.gif                
string[] sFileAr = sFile.Split(new char[] { \\, / });
                StringBuilder sb 
= new StringBuilder();
                
int i = 0;
                
for (i = 0; i < sFileAr.Length - 1; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    sb.Append(sFileAr[i]);
                    sb.Append(
"\\");
                }

                
string sPath = sb.ToString();
                sFile 
= sFileAr[sFileAr.Length - 1];
                sFile 
= sFile.Substring(0, sFile.LastIndexOf(.));
                
this.OutFilePathTextBox.Text = sPath + sFile + sExt;

                enc.File.LocalFileName 
= this.OutFilePathTextBox.Text;
                
#endregion


                enc.Start();
            }

            
catch (Exception e1)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                MessageBox.Show(e1.Message);
            }


        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**////
        
/// <summary>
        
/// 构造
        
/// </summary>

        public MainForm()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            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;
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 主窗体加载事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void MainForm_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            AppInit();
            InitCompression();
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 选择输出文件保存路径
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void SelectOutPathButton_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            SaveFileDialog sfd 
= new SaveFileDialog();
            sfd.Filter 
= "WMV文件(*.wmv)|*.wmv";
            sfd.RestoreDirectory 
= true;
            
if (sfd.ShowDialog() == DialogResult.OK)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
this.OutFilePathTextBox.Text = sfd.FileName;
                
if(File.Exists(sfd.FileName))
                    File.Delete(sfd.FileName);
            }

        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 开始录制
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void StartButton_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
if (this.CompressionOptionListBox.SelectedIndex > -1 && this.OutFilePathTextBox.Text.Trim() != "")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
                th 
= new Thread( new ThreadStart(start));
                th.IsBackground 
= true;
                th.Start();
                
//将开始按钮不可用
                this.StartButton.Enabled = false;
                
//暂停按钮可用
                this.PauseButton.Enabled = true;
                
//
                
//窗体隐藏
                if (this.ChkHideMainForm.Checked)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
this.WindowState = FormWindowState.Minimized;
                    
this.Visible = false;
                }

            }

            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
if (this.OutFilePathTextBox.Text.Trim() == "")
                    MessageBox.Show(
"请选择录像文件保存位置");
                
if (this.CompressionOptionListBox.SelectedIndex == -1)
                    MessageBox.Show(
"请选择一种压缩方案");
            }

        }

        
private void start()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            VoidDelegate dstart 
= new VoidDelegate(StartCamera);
            
this.Invoke(dstart);
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 停止录制按钮
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void StopButton_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            th.Abort();
            enc.Stop();
            
this.StartButton.Enabled = true;
            
this.PauseButton.Enabled = false;
            
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 暂停录制按钮
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void PauseButton_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        

            
if (this.PauseButton.Text != "继续录制")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                enc.Pause();
                
this.PauseButton.Text = "继续录制";
            }

            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                enc.Start();
                
this.PauseButton.Text = "暂停录制";
            }

        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 单击主窗体关闭按钮
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
if (e.CloseReason != CloseReason.ApplicationExitCall && e.CloseReason != CloseReason.WindowsShutDown)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                e.Cancel 
= true;
                
this.WindowState = FormWindowState.Minimized;
                
this.Visible= false;
            }

            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
//none
            }

        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 压缩选项更改
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void CompressionOptionListBox_SelectedIndexChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ListBox lb 
= (ListBox)sender;
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"Compression", lb.Items[lb.SelectedIndex].ToString());
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 压缩选项更改
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void CompressionOptionListBox_MouseClick(object sender, MouseEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ListBox lb 
= (ListBox)sender;
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"Compression", lb.Items[lb.SelectedIndex].ToString());
        }


ContractedSubBlock.gifExpandedSubBlockStart.gif        
快捷键#region 快捷键
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 快捷键
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void SkStartAndPause_TextChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"SKey_StartAndPause"this.SkStartAndPause.Text);
        }

        
//
        private void SkStop_TextChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"SKey_Stop"this.SkStartAndPause.Text);
        }

        
//
        private void SkShowAndHide_TextChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{

            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"SKey_ShowAndHide"this.SkShowAndHide.Text);
        }

        
#endregion


ContractedSubBlock.gifExpandedSubBlockStart.gif        
录制区域#region 录制区域
        
private void RScreen_CheckedChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"CameraRect""0");
        }

        
private void RWindow_CheckedChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"CameraRect""1");
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 指定屏幕区域
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void RectCustom_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
if (this.RectCustom.Checked)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                screen 
= new fScreen();
                
this.Hide();
                
this.WindowState = FormWindowState.Minimized;
                System.Threading.Thread.Sleep(
220);

                
//创建一个和屏幕一样大的Bitmap
                Size size = MainForm.GetScreenSize();
                Image myImage 
= new Bitmap(size.Width, size.Height);
                
//从一个继承自Image类的对象中创建Graphics对象
                Graphics gc = Graphics.FromImage(myImage);
                gc.SmoothingMode 
= SmoothingMode.HighQuality;
                
//抓屏并拷贝到myimage里
                gc.CopyFromScreen(new Point(00), new Point(00), size);
                
//保存为文件
                screen.BackgroundImage = myImage;
                screen.WindowState 
= FormWindowState.Maximized;
                screen.TopMost 
= true;
                screen.ShowDialog();
                screen.Focus();
                screen.TopMost 
= false;
                screen.Refresh();

                myImage.Dispose();
                gc.Dispose();
            }

            
//
            ConfigManager.AppSetings appseting = new ConfigManager.AppSetings();
            appseting.UpdateKey(
"CameraRect""2");
        }

        
#endregion

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 是否录声音
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void ChkSound_CheckedChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"ChkSound"this.ChkSound.Checked.ToString());
        }

        
//是否隐藏主窗体
        private void ChkHideMainForm_CheckedChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ConfigManager.AppSetings appseting 
= new ConfigManager.AppSetings();
            appseting.UpdateKey(
"ChkHideMainForm"this.ChkHideMainForm.Checked.ToString());
        }


ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**///
        
/// <summary>
        
/// 取得屏幕大小
        
/// </summary>
        
/// <returns></returns>

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

ExpandedSubBlockStart.gifContractedSubBlock.gif





转载于:https://www.cnblogs.com/houfeng/archive/2009/07/26/1531526.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值