屏幕捕获程序

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Imaging;

namespace 屏幕捕获程序
{
 
/// <summary>
 
/// Form1 的摘要说明。
 
/// </summary>

 public class Form1 : System.Windows.Forms.Form
 
{
  
private System.Windows.Forms.Button button1;
  
/// <summary>
  
/// 必需的设计器变量。
  
/// </summary>

  private System.ComponentModel.Container components = null;

  
public Form1()
  
{
   
//
   
// Windows 窗体设计器支持所必需的
   
//
   InitializeComponent();

   
//
   
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   
//
  }


  
/// <summary>
  
/// 清理所有正在使用的资源。
  
/// </summary>

  protected override void Dispose( bool disposing )
  
{
   
if( disposing )
   
{
    
if (components != null
    
{
     components.Dispose();
    }

   }

   
base.Dispose( disposing );
  }


  
Windows Form Designer generated code

  
/// <summary>
  
/// 应用程序的主入口点。
  
/// </summary>

  [STAThread]
  
static void Main() 
  
{
   Application.Run(
new Form1());
  }


  [ System.Runtime.InteropServices.DllImportAttribute ( 
"gdi32.dll" ) ]
  
private static extern bool BitBlt (
   IntPtr hdcDest , 
//目标设备的句柄
   int nXDest , // 目标对象的左上角的X坐标
   int nYDest , // 目标对象的左上角的X坐标
   int nWidth , // 目标对象的矩形的宽度
   int nHeight , // 目标对象的矩形的长度
   IntPtr hdcSrc , // 源设备的句柄
   int nXSrc , // 源对象的左上角的X坐标
   int nYSrc , // 源对象的左上角的X坐标
   System.Int32 dwRop // 光栅的操作值
   ) ;

  [ System.Runtime.InteropServices.DllImportAttribute ( 
"gdi32.dll" ) ]
  
private static extern IntPtr CreateDC (
   
string lpszDriver , // 驱动名称
   string lpszDevice , // 设备名称
   string lpszOutput , // 无用,可以设定位"NULL"
   IntPtr lpInitData // 任意的打印机数据
   ) ;

  
private void button1_Click(object sender, System.EventArgs e)
  
{
   
this.Hide();
   IntPtr dc1 
= CreateDC ( "DISPLAY" , null , null , ( IntPtr ) null ) ;
   
//创建显示器的DC
   Graphics g1 = Graphics.FromHdc ( dc1 ) ;
   
//由一个指定设备的句柄创建一个新的Graphics对象
   Bitmap MyImage = new Bitmap ( Screen.PrimaryScreen.Bounds.Width , Screen.PrimaryScreen.Bounds.Height , g1 ) ;
   
//根据屏幕大小创建一个与之相同大小的Bitmap对象
   Graphics g2 = Graphics.FromImage ( MyImage ) ;
   
//获得屏幕的句柄
   IntPtr dc3 = g1.GetHdc ( ) ;
   
//获得位图的句柄
   IntPtr dc2 = g2.GetHdc ( ) ;
   
//把当前屏幕捕获到位图对象中
   BitBlt ( dc2 , 0 , 0 , Screen.PrimaryScreen.Bounds.Width , Screen.PrimaryScreen.Bounds.Height , dc3 , 0 , 0 , 13369376 ) ;
   
//把当前屏幕拷贝到位图中
   g1.ReleaseHdc ( dc3 ) ;
   
//释放屏幕句柄
   g2.ReleaseHdc ( dc2 ) ;
   
//释放位图句柄
   MyImage.Save ( "c:\\MyJpeg.jpg" , ImageFormat.Jpeg ) ;
   MessageBox.Show ( 
"已经把当前屏幕保存到C:\\MyJpeg.jpg文件中!" ) ;
   
this.Show();
  }

 }

}


原文地址:https://www.cnblogs.com/myx/p/83479.html