http://www.c-sharpcorner.com/UploadFile/perrylee/ScreenCapture11142005234547PM/ScreenCapture.aspx

解决方案 »

  1.   

    #region 截屏及获取图片代码
    //声明一个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 Image GetImage(int iWidth,int iHeight,Control con)
    {
    //获得当前屏幕的大小
    Rectangle rect = new Rectangle ( ) ;
    //rect = Screen.GetWorkingArea ( this ) ;
    rect = Screen.GetBounds(con);
    //创建一个以当前屏幕为模板的图象
    Graphics g1 = con.CreateGraphics();
    //创建以屏幕大小为标准的位图
    Image MyImage = new Bitmap(iWidth,iHeight,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 ) ;
    BitBlt(dc2,rect.X,rect.Y,iWidth,iHeight,dc1,rect.X,rect.Y,13369376);
    //释放掉屏幕的DC
    g1.ReleaseHdc ( dc1 ) ;
    //释放掉Bitmap的DC
    g2.ReleaseHdc ( dc2 ) ;
    return MyImage;
    }
    /// <summary>
    /// 截取指定区域的图片
    /// </summary>
    /// <returns></returns>
    public Image GetImage()
    {
    return this.GetImage(this.dataGridScore.Bounds.Width,this.dataGridScore.Bounds.Height,this.dataGridScore);
    } /// <summary>
    /// 将截取图片保存到指定位置
    /// </summary>
    /// <param name="strFileName">文件名称</param>
    public void SaveImage(string strFileName)
    {
    this.GetImage().Save(strFileName,System.Drawing.Imaging.ImageFormat.Jpeg);
    } /// <summary>
    /// 将截取图片按指定格式保存到指定位置
    /// </summary>
    /// <param name="strFileName">文件名</param>
    /// <param name="format">图片格式</param>
    public void SaveImage(string strFileName,ImageFormat format)
    {
    this.GetImage().Save(strFileName,format);
    } #endregion
      

  2.   

    摘录:《程序员秘书》--源代码--图形GDI+--拷贝鼠标在内的屏幕
    private void button1_Click(object sender, EventArgs e)
    {
        CaptureScreen().Save("d:\\4.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
    }
    private Bitmap CaptureScreen()//拷贝整个屏幕,包括光标
    {
        Bitmap memoryImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);//定义一个位图,大小为整个屏幕大小
        Graphics memoryGrahics = Graphics.FromImage(memoryImage);//得到画布
        memoryGrahics.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);//拷贝屏幕
        return memoryImage;
    }轻轻松松搞软件开发,详见:http://www.psec.net.cn