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; 
        
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 ); 
        }
 

        
Windows 窗体设计器生成的代码 

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

        [STAThread] 
        
static void Main() 
        

            Application.Run(
new Form1()); 
        }
 

        
//声明一个API函数 
        [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ] 
        
private static extern bool BitBlt 
            ( 
            IntPtr hdcDest , 
// 目标 DC的句柄 
            int nXDest , 
            
int nYDest , 
            
int nWidth , 
            
int nHeight , 
            IntPtr hdcSrc , 
// 源DC的句柄 
            int nXSrc , 
            
int nYSrc , 
            System.Int32 dwRop 
// 光栅的处理数值 
            ); 

        
private void button1_Click(object sender, System.EventArgs e) 
        

            
//获得当前屏幕的大小 
            Rectangle rect = new Rectangle ( ) ; 
            
//获得当前屏幕的大小,通过名字空间"System.Windows.Forms"中的"Screen"类的GetWorkingArea()方法 
            rect = Screen.GetWorkingArea ( this ) ; 
            
//创建一个以当前屏幕为模板的图象--获得当前屏幕的graphic对象 
            Graphics g1 = this.CreateGraphics ( ) ; 
            
//创建以屏幕大小为标准的位图 
            Image MyImage = new Bitmap ( rect.Width , rect.Height , g1 ) ; 
            Graphics g2 
= Graphics.FromImage ( MyImage ) ; 
            
//得到屏幕的DC 
            IntPtr dc1 = g1.GetHdc ( ) ; 
            
//得到Bitmap的DC 
            IntPtr dc2 = g2.GetHdc ( ) ; 
            
//调用此API函数,实现屏幕捕获 
            BitBlt ( dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376 ) ; 
            
//释放掉屏幕的DC 
            g1.ReleaseHdc ( dc1 ) ; 
            
//释放掉Bitmap的DC 
            g2.ReleaseHdc ( dc2 ) ; 
            
//以JPG文件格式来保存 
            if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
            

                MyImage.Save( @saveFileDialog1.FileName,ImageFormat.Jpeg); 
            }
 

        }
 
    }
 
}
 
posted on 2007-04-02 13:12  过江  阅读(541)  评论(0编辑  收藏  举报