在C#案例开发这本书中提到了一个方法 
 using System; 
 using System.Drawing; 
 using System.Collections; 
 using System.ComponentModel; 
 using System.Windows.Forms; 
 using System.Data; 
 using System.Drawing.Imaging; 
 namespace zhua2 
 { 
 /// <summary> 
 /// Form1 的摘要说明。 
 /// </summary> 
 public class Form1 : System.Windows.Forms.Form 
 { 
 private System.Windows.Forms.Button button1; 
 private System.Windows.Forms.SaveFileDialog saveFileDialog1; 
 /// <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 ); 
 } 
 #region Windows 窗体设计器生成的代码 
 /// <summary> 
 /// 设计器支持所需的方法 - 不要使用代码编辑器修改 
 /// 此方法的内容。 
 /// </summary> 
 private void InitializeComponent() 
 { 
 this.button1 = new System.Windows.Forms.Button(); 
 this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); 
 this.SuspendLayout(); 
 // 
 // button1 
 // 
 this.button1.Location = new System.Drawing.Point(80, 32); 
 this.button1.Name = "button1"; 
 this.button1.Size = new System.Drawing.Size(112, 24); 
 this.button1.TabIndex = 1; 
 this.button1.Text = "开始抓图"; 
 this.button1.Click += new System.EventHandler(this.button1_Click); 
 // 
 // saveFileDialog1 
 // 
 this.saveFileDialog1.FileName = "doc1"; 
 this.saveFileDialog1.Filter = "jpg Files(*.jpg) ¦*.jpg ¦jpeg Files(*.*) ¦*.jpeg ¦bmp Files(*.bmp) ¦*.bmp"; 
 // 
 // Form1 
 // 
 this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); 
 this.ClientSize = new System.Drawing.Size(292, 93); 
 this.Controls.Add(this.button1); 
 this.Name = "Form1"; 
 this.Text = "抓图软件"; 
 this.ResumeLayout(false); 
 } 
 #endregion 
 /// <summary> 
 /// 应用程序的主入口点。 
 /// </summary> 
 [STAThread] 
 static void Main() 
 { 
 Application.Run(new Form1()); 
 } 
 //调用动态链接库gdi32.dll 
 [ 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 // 光栅的操作值 
 ) ; 
 //调用动态链接库gdi32.dll 
 [ 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 ) ; 
 //释放位图句柄 
 if (saveFileDialog1.ShowDialog () == DialogResult.OK ) 
 { 
 MyImage.Save ( saveFileDialog1.FileName, ImageFormat.Bmp ) ; 
 MessageBox.Show ( "已经把当前屏幕保存!" ) ; 
 this.Show(); 
 } 
 } 
 } 
 } 
 
转载于:https://www.cnblogs.com/goody9807/archive/2008/10/29/1322298.html