c#实现截取屏幕并保存到硬盘及显示在界面上

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

namespace Example023_屏幕捕获程序
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        ///   <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, 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("d://MyJpeg.jpg", ImageFormat.Jpeg);  //当然你也可以根据自己的需要,把屏幕以其他图片的格式来保存,如果你想把图片保存为位图文件,可以把"ImageFormat.Jpeg"改换成"ImageFormat.Bmp";想把图片保存为Gif文件,就把"ImageFormat.Jpeg"改换成"ImageFormat.Gif"。你可以保存的文件类型大概有十多种,这里就不一一介绍了,当然你也要相应改变保存文件的后缀。
            pictureBox1.Image = MyImage;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;   //本程序所用控件为1个按狃,一个panel,一个picturebox,其中panel的属性Autoscroll =true; picturebox的属性SizeMode =AutoSize; 然后只要改变pictureBox的大小,图象就会跟着改变大小,如果把这句去掉的话,就可以实现图象按panel滚动条移动而查看全图。

            MessageBox.Show("已经把当前屏幕保存到D://MyJpeg.jpg文件中!");
            this.Show();  

        }
     
    }
}

你可能感兴趣的:(String,object,C#,null,Class,button)